Java的I/O

File类:
访问文件和目录,可以新建,删除,重命名等,但是,File不能访问文件本身,访问文件本身需要用到流。

查找某个特定文件可以使用文件过滤器,FilenameFilter.


I/O流:

  基类      数据单元
字节流     InputStream/OutputStream 8位-->字节
字符流 Reader/Writer 16位-->字符

字节流与字符流的大多数操作可以近似。

因为大多数差不多,就是数据单元,一个是字节,一个是字符,最后的单位参数不同。


记得使用流打开文件要用file.close(),方法关闭文件,程序里面打开的文件IO资源不属于内存里的资源,垃圾回收机制无法回收该资源。


小发现:平台的换行符不同,Windows下"\r\n",Linux下“\n”.   如今大多数都封装好为直接换行。

I/O流体系:
处理流:对开发人员来说,使用处理流进行输入/输出操作更加简单;使用处理流的执行效率更高。
例如:使用PrintStream处理流来包装OutputStream,让输出更加方便。
FileOutputStream fos = new FileOutputStream("test.txt");
PrintStream ps = new PrintStream(fos)
  • I/O处理流

  字节流输入  字节流输出 字符流输入 字符流输出
访问文件      FileInputStream FileOutputStream FileReader FileWriter
缓冲流 BufferedInputStream BufferedOutputStream BufferReader BufferWriter
访问字符串     StringReader StringWriter


这些方法针对不同的数据类型,不同的数据单位使用,许多方法共通的,只是单位不相同。


StringReader和StringWriter是字符串节点,不是文件节节点,由于String是不可变的字符串对象,所以StringWriter都用StringBuffer作为输出节点。


  • 转换流

顾名思义,转换流可以实现字节流------->字符流的转换。
InputStreamReader :  将字节输入流 -------> 字符输入流

OutputStreamWriter : 将字节输出流 --------> 字符输出流


为毛没有字符转字节,字节虽然比字符的范围更广,但是,字符流的操作比字节流方便,所以如此。


Java虚拟机读取其他进程的数据

  • InputStream getErrorStream():获取子进程的错误流

  • InputStream getInputStream():获取子进程的输入流

  • OutputStream getOutputStream():获取子进程的输出流


RandomAccessFile
RandomAccessFile是Java输入/输出流系统中功能最丰富的文件访问类。他可以提供“随机访问”的形式。
可以访问文件的任意位置。它有一个指针指向位置,可以看做平常使用的光标。
  • long getFilePointer():返回文件记录指针的当前位置。

  • void seek(long pos):将文件记录指针定位到pos位置。

创建RandomAccessFile有一个mode参数,其指向访问模式:
  •  r   以只读方式打开指定文件。

  • rw  以读、写方式打开指定文件。如果文件不存在就尝试创建此文件。

上面为常用的两种模式。


PS:断点续传:

多线程断点续传的网络下载工具,就可以通过RandomAccessFile来实现。


所有的下载工具在一开始的时候会建立两个文件:一个是与被下载文件大小相同的空文件,一个是记录文件指针的位置文件。下载通过多线程启动网络输入流来读取网络数据,并使用RandomAccessFile来将网络上读取的数据写入前面建立的空文件中,每写入一些数据以后,记录文件指针的文件就分别记下每个RandomAccessFile当前文件的指针位置。


网络断开以后,再次开始下载时,每个RandomAccessFile都根据记录文件指针的文件中记录的位置,继续向下写数据。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值