文件操作

//用缓冲字节流实现文件读写

packageDataStream;

importjava.io.*;

publicclassBufferedStreamTest{

/**

*@paramargs

*/

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

try{

FileOutputStreamfos=new FileOutputStream("res/bufferFile");

BufferedOutputStreambos=newBufferedOutputStream(fos);

DataOutputStreamdos=newDataOutputStream(bos);

dos.writeUTF("helloworld");

dos.writeBoolean(false);

dos.writeInt(125);

dos.flush();//清空缓冲区

fos.close();

fos.close();

dos.close();

/*需要注意的是,由于读写顺序是从最外面开始读取也就是说从数据输出流DataOutputStream开始读取,其次是缓冲输出流BufferedOutputStream,再其次是文件输出流FileOutStream,所以如果不写d os.flush只要保证关闭的顺序正确也是可以正确运行的,即:

dos.close();

bos.close();

fos.close();

*/

FileInputStreamfis=new FileInputStream("res/bufferFile");

BufferedInputStreambis=newBufferedInputStream(fis);

DataInputStreamdis=newDataInputStream(bis);

System.out.println(dis.readUTF()+"\n"+dis.readBoolean()+"\n"+d is.readInt());//输出时注意与输入时保持一致

fis.close();

bis.close();

dis.close();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}//新增文档bufferFile直接查看会出现乱码问题,这是正常的,由于文档将字符型、布尔型、整型等放在一起使文档无法识别出现乱码,但是文档输出是正确的。

在写这段代码的时候,我们遇到了问题,由于没有提前清空缓冲数据,导致程序运行错误,后来找到了错误的原因,原因是:

Flush()主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还有一部分有可能会留在内存这个缓冲区中。这时候如果你调用了Close()方法关闭了读写流,那么这部分数据就会丢失,所以应该在关闭读写流之前先Flush(),先清空数据。

文件操作类

文件类(File)提供处理文件的方法,包括:更改文件名、删除文件、列出目录下的文件以及文件对象属性的描述信息等。

publicFile(Stringpathname);根据parent抽象路径名和child路径名字符串创建一个新的File对象

publicFile(Stringpath,Stringname);根据parent路径名字符串和child路径名字符串创建一个新File对象

publicFile(Fileparent,Stringchile);通过指定路径名字字符串转换为抽象路径名来创建一个新的File对象

感觉有点绕啊.......通过实例来解决,其实还是很简单的

Source.txt

Backup\source.txt

执行备份:

1、判断目录备份是否存在,如无建立目录①backup②将源文件复制到backup;如有:判断是否需要备份,如有必要:将源文件复制到backup,如没必要

其他方法

(1)访问文件对象

l publicStringgetName()//返回文件对象名,不包含路径名

l publicStringgetPath()//返回相对路径名,包含文件名

l publicStringgetAbsolutePath()//返回绝对路径名,包含文件名

l publicStringgetParent()//返回父文件对象的路径名

l publicFilegetParentFile()//返回父文件对象

(2)获得文件属性

l publiclonglength() //返回指定文件的字节长度

l publicbooleanexists()//测试指定的文件是否存在

l publiclonglastModified()//返回指定文件最后被修改的时间

(3)文件操作

l publicbooleanrenameTo(Filedest)//文件重命名

l publicbooleandelete()//删除空目录

(4)目录操作

l publicbooleanmkdir()//创建指定日录,正常建立时返回true

l publicString[]list()//返回目录中的所有文件名字符串

l publicFile[]listFiles()//返回指定目录中的所有文件对象

感觉有点绕啊.......通过实例来解决,其实还是很简单的

例子如下:

//生成目录文件和输出目录文件

由于操作非常简单,按照方法就能实现,在这里就不做演示了

//利用File自动更新文件

packageDataStream;

importjava.io.*;

importjava.text.SimpleDateFormat;

importjava.util.Date;

publicclassFileUpdateTest{

publicstaticvoidmain(String[]args)throwsIOException{

//待复制的文件名

Stringfname="source.txt";

//目标目录名

Stringdestdir="backup";

update(fname,destdir);

}

privatestaticvoidupdate(Stringfname,Stringdestdir)throwsIOException{

//TODOAuto-generatedmethodstub

Filef1,f2,dest;

//在当前目录中创建文件对象f1,dest

f1=newFile(fname);

dest=newFile(destdir);

if(f1.exists()){

//dest不存在时创建目录

if(!dest.exists()){

System.out.println("dest不存在,创建backup");

dest.mkdir();

}

//在目录dest中创建文件f2

f2=newFile(dest,fname);

longd1=f1.lastModified();

longd2=f2.lastModified();

//f2不存在时或存在但日期较早时

if((!f2.exists())||(f2.exists()&&(d1>d2))){

copy(f1,f2);//复制

}

showFileInfo(f1);

showFileInfo(dest);

}else{

System.out.println(f1.getName()+"filenotfound");

}

}

publicstaticvoidshowFileInfo(Filef1)throwsIOException{

//TODOAuto-generatedmethodstub

SimpleDateFormatsdf;

sdf=newSimpleDateFormat("yyyy年MM月dd日hh时mm分");

if(f1.isFile()){

Stringfilepath=f1.getAbsolutePath();

Dateda=newDate(f1.lastModified());

Stringmat=sdf.format(da);

System.out.println("<文件:>\t"+filepath+"\t"+f1.length()+"\t"+mat);

}else{

System.out.println("<目录:>"+"\t"+f1.getAbsolutePath());

File[]files=f1.listFiles();

for(inti=0;i<files.length;i++){

showFileInfo(files[i]);

}

}

}

publicstaticvoidcopy(Filef1,Filef2)throwsIOException{

//TODOAuto-generatedmethodstub

//创建文件输入流对象

FileInputStreamfis=newFileInputStream(f1);

//创建文件输入流对象

FileOutputStreamfos=newFileOutputStream(f2);

intcount,n=512;

bytebuffer[]=newbyte[n];

//从输入流读取数据

count=fis.read(buffer,0,n);

while(count!=-1){

//写出输出流数据

fos.write(buffer,0,count);

count=fis.read(buffer,0,n);

}

System.out.println("复制文件"+f2.getName()+"成功!");

//关闭输入\输出流

fis.close();

fos.close();

}

}

缓冲字节流和文件操作相关推荐

  1. 心得---字节流、文件操作、对象序列化

    1. 抽象基类InputStream.OutputStream,不能实例化.                                 •      InputStream类是基本的输入类.它定 ...

  2. .dat文件写入byte类型数组_文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流...

    一.实操名称: 描述如下流的基本作用:文件字节流.文件字符流.缓冲字节流.缓冲字符流字节数组流.数据流.转换流.对象流二.描述1.文件字节流:包括:FileInputStream,FileOutput ...

  3. 字节流(InputStream和OutputStream),字节流读写文件,字节流的缓冲区,字节缓冲流

    字节流 抽象类InputStream和OutputStream是字节流的顶级父类 所有的字节输入流都继承自InputStream,所有的输出流都继承子OutputStream InputStream的 ...

  4. Java入门学习第十七天——字节流读写文件、字节缓冲流拷贝文件

    字节流读写文件 字节流拷贝文件-按单个字节读写 FileInputStream:普通的字节输入流,用来读取数据的 构造方法: ​ public FileInputStream(String pathn ...

  5. FileInputStream 把文件作为字节流进行读操作

    //把文件作为字节流进行读操作 FileInputStream in = new FileInputStream(filename);//FileInputStream具体实现了在文件上读取数据 转载 ...

  6. java中的文件操作:读取写入byte[]字节流、string字符串、list列表

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java中文件操作:读取文件成字节流,将字节流写入文件,按行读取文件成字符串列表,将字符串列表存储成文件,读取文件成字符串,将字符串写入文件. 主 ...

  7. linux缓存写入文件,实验5Linux文件操作之带缓存和非缓冲文件的读写

    <实验5Linux文件操作之带缓存和非缓冲文件的读写>由会员分享,可在线阅读,更多相关<实验5Linux文件操作之带缓存和非缓冲文件的读写(15页珍藏版)>请在人人文库网上搜索 ...

  8. linux缓存文件和非缓存文件格式,实验5 Linux文件操作之带缓存和非缓冲文件的读写...

    1 实验5Linux 文件操作之带缓存和非缓冲文件的读写 学生姓名:王祥真学号:6103114095专业班级:计科143 实验类型:□ 验证▥综合 □ 设计 □ 创新实验日期:2017.4.20实验成 ...

  9. python3打开文件的代码_Python3 对文件操作

    计算机文件 在计算机系统中,以硬盘为载体存储在计算机上的信息集合称为文件.文件可以是文本文档.图片.声音.程序等多种类型.在编程时经常要对文件进行读写等操作, 从程序员的视角可以把文件理解为是连续的字 ...

最新文章

  1. SPCOMM的一些用法注意
  2. 数据集标注工具_数据标注分享9个数据标注工具
  3. 非二进制字符串数据:CHAR,VARCHAR,TEXT
  4. Struts2理解——转发和重定向
  5. iOS中常见的6种传值方式,UIPageViewController
  6. java中Collections常用方法总结(包括sort,copy,reverse等)
  7. wemall app商城源码Android之支付宝通知处理类
  8. Docker的Solomon Hykes在OSCON上的主题演讲的要点
  9. coderfoces D. Gourmet choice
  10. 安装XDS110驱动时系统找不到指定文件
  11. 服务器系统盘单独硬盘,我的服务器今天加了个硬盘,可以实现双系统吗?
  12. Jsf + Spring + Hibernate项目中引用的包
  13. cad会员共享_CAD迷你画图共享版下载
  14. 移动应用开发学习通测试题答案
  15. linux服务器上配置二级域名
  16. Biotin-PEG-CHO,生物素PEG醛基
  17. 怎么把线稿提取出来_如何提取线稿为你所用?不会的来!
  18. 跨境电商如何搭建独立站?
  19. yolov5安装与环境配置
  20. EasyAR尝鲜系列教程之视频播放功能的实现

热门文章

  1. signature=2f0e364618bd844a5fe88c26cefcaa33,Microsoft Word - CEFC_Failure_Detection_Resume.doc
  2. 算法很美-位的奇巧淫计(c/c++)
  3. Ubuntu 20.04安装中文输入法和切换中文系统
  4. 分手后一定要过得开心
  5. flutter开发桌面应用_Flutter应用开发十大公司
  6. 心理测试软件需求分析报告,心理测评软件都适用于哪些人群?具体有哪些功能?【心悦灵】...
  7. notepad++ 配置成VIM模式
  8. echarts饼状图设置label的交互效果,饼状图鼠标浮上图形才显示label和视觉引导线
  9. 中国洗车水产业政府战略管理与区域发展战略研究咨询报告
  10. ios afn html解析,iOS开发关于使用AFN遇到的问题总结