博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java IO(RandomAccessFile、File、PipedInputStream、PipedOutputStream)
阅读量:2384 次
发布时间:2019-05-10

本文共 3257 字,大约阅读时间需要 10 分钟。

RandomAccessFile

RandomAccessFile允许你来回读写文件,也可以替换文件中的某些部分。FileInputStream和FileOutputStream没有这样的功能。

在使用RandomAccessFile之前,必须初始化它。

RandomAccessFile file = new RandomAccessFile("c:\\data\\file.txt", "rw");

请注意构造函数的第二个参数:“rw”,表明你以读写方式打开文件。

1.1 在RandomAccessFile中来回读写

在RandomAccessFile的某个位置读写之前,必须把文件指针指向该位置。通过seek()方法可以达到这一目标。可以通过调用getFilePointer()获得当前文件指针的位置。

RandomAccessFile file = new RandomAccessFile("c:\\data\\file.txt", "rw");file.seek(200);long pointer = file.getFilePointer();file.close();

1.2 读取RandomAccessFile

RandomAccessFile中的任何一个read()方法都可以读取RandomAccessFile的数据。

RandomAccessFile file = new RandomAccessFile("c:\\data\\file.txt", "rw");int aByte = file.read();file.close();

read()方法返回当前RandomAccessFile实例的文件指针指向的位置中包含的字节内容。Java文档中遗漏了一点:read()方法在读取完一个字节之后,会自动把指针移动到下一个可读字节。这意味着使用者在调用完read()方法之后不需要手动移动文件指针。

1.3 写入RandomAccessFile

RandomAccessFile中的任何一个write()方法都可以往RandomAccessFile中写入数据。

RandomAccessFile file = new RandomAccessFile("c:\\data\\file.txt", "rw");file.write("Hello World".getBytes());file.close();

与read()方法类似,write()方法在调用结束之后自动移动文件指针,所以你不需要频繁地把指针移动到下一个将要写入数据的位置。

File

Java IO API中的FIle类可以让你访问底层文件系统,通过File类,你可以做到以下几点:

  • 检测文件是否存在
  • 读取文件长度
  • 重命名或移动文件
  • 删除文件
  • 检测某个路径是文件还是目录
  • 读取目录中的文件列表

请注意:File只能访问文件以及文件系统的元数据。如果你想读写文件内容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile。如果你正在使用Java NIO,并且想使用完整的NIO解决方案,你会使用到java.nio.FileChannel(否则你也可以使用File)。

2.1 实例化一个java.io.File对象

File file = new File("c:\\data\\input-file.txt");

2.2 检测文件是否存在

当你获得一个File对象之后,可以检测相应的文件是否存在。当文件不存在的时候,构造函数并不会执行失败。

File file = new File("c:\\data\\input-file.txt");boolean fileExists = file.exists();

2.3文件长度

通过调用length()可以获得文件的字节长度。

File file = new File("c:\\data\\input-file.txt");long length = file.length();

2.4 重命名或移动文件

通过调用File类中的renameTo()方法可以重命名(或者移动)文件

File file = new File("c:\\data\\input-file.txt");boolean success = file.renameTo(new File("c:\\data\\new-file.txt"));

2.5 删除文件

通过调用delete()方法可以删除文件

File file = new File("c:\\data\\input-file.txt");boolean success = file.delete();

delete()方法与rename()方法一样,返回布尔值表明是否成功删除文件,同样也会有相同的操作失败原因。

2.6 检测某个路径是文件还是目录

File对象既可以指向一个文件,也可以指向一个目录。可以通过调用isDirectory()方法,可以判断当前File对象指向的是文件还是目录。当方法返回值是true时,File指向的是目录,否则指向的是文件,

File file = new File("c:\\data");boolean isDirectory = file.isDirectory();

2.7 读取目录中的文件列表

你可以通过调用list()或者listFiles()方法获取一个目录中的所有文件列表。list()方法返回当前File对象指向的目录中所有文件与子目录的字符串名称(译者注:不会返回子目录下的文件及其子目录名称)。listFiles()方法返回当前File对象指向的目录中所有文件与子目录相关联的File对象(译者注:与list()方法类似,不会返回子目录下的文件及其子目录)。

File file = new File("c:\\data");String[] fileNames = file.list();File[] files = file.listFiles();

PipedInputStream

PipedInputStream可以从管道中读取字节流数据

InputStream input = new PipedInputStream(pipedOutputStream);int data = input.read();while(data != -1) {    //do something with data...    doSomethingWithData(data);    data = input.read();}input.close();

PipedInputStream的read()方法返回读取到的包含一个字节内容的int变量(译者注:0~255)。如果read()方法返回-1,意味着程序已经读到了流的末尾,此时流内已经没有多余的数据可供读取了,你可以关闭流。-1是一个int类型,不是byte类型,这是不一样的。

PipedOutputStream

PipedOutputStream可以往管道里写入读取字节流数据

OutputStream output = new PipedOutputStream(pipedInputStream);while(moreData) {    int data = getMoreData();    output.write(data);}output.close();

PipedOutputStream的write()方法取一个包含了待写入字节的int类型变量作为参数进行写入。

一个PipedOutputStream总是需要与一个PipedInputStream相关联。当这两种流联系起来时,它们就形成了一条管道。

备注:文章参考

 

 

 

 

 

 

 

 

转载地址:http://fjyab.baihongyu.com/

你可能感兴趣的文章
windows7配置虚拟AP的脚本
查看>>
北京开放政府信息资源 “大数据”供社会化利用
查看>>
大数据挖掘变革 美赛达软硬云引领车联网商业蓝海
查看>>
停车费上涨需要公开“大数据”
查看>>
玩转大数据 运动员如何用科技提升成绩
查看>>
广发银行试水大数据 “精细服务”现雏形
查看>>
大数据让社区生活更方便
查看>>
借助互联网大数据打假
查看>>
东信北邮大数据项目获2014中国通信学会科学技术一等奖
查看>>
大数据塑造新时代公共外交
查看>>
海-两篇
查看>>
整理硬盘
查看>>
ERP&SCM&MES發展歷程
查看>>
风-----
查看>>
系统Server架构图
查看>>
我的简历
查看>>
一种自适应的柔性制造系统优化调度算法
查看>>
现代管理思想与总图设计
查看>>
原创BPR之企业流程分析模型图 FDD
查看>>
PLM技术促进现代模具企业精益化和规模化
查看>>