Java IO流

流概述

流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。

输入流

Java由数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据。
源可以是文件,网络,压缩包等数据源。
Java由数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据。

输出流

输出流的指向是数据要到达的目的地,程序通过向输出流中能够写入数据把信息传递到目的地。
输出流的目标可以文件,网络,压缩包等数据输出目标。输出流的指向是数据要到达的目的地,程序通过向输出流中能够写入数据把信息传递到目的地。
IO流常用类

FileInputStream读取文件数据

1、通过FileInputStream(String name)构造方法创建FileInputStream对象时,传入的待读取文件的路径,可以是相对路径也可以是绝对路径。
2、在读取文件数据时,必须保证文件是存在并且可读的,否则会抛出文件找不到的异常FileNotFoundException。
3、FileInputStream类有三个重载的read()方法,如果方法返回值为-1,均表示已读取到了文件的结尾。
4、为了使流对象所占用的系统资源得到释放,请记住调用FileInputStream类close()方法关闭字节流。

FileOutputStream写入数据

1、与FileInputStream读取的文件必须存在不同,FileOutputStream写入数据的文件不必是已存在的,因为该文件会被自动创建。
2、FileOutputStream类有三个重载的write()方法,可以分别向文件中一次写入单个字符、字符数组以及数组的部分数据。

字节缓冲流拷贝大文件

1、BufferedInputStream和BufferdOutputStream字节缓冲流在初次拷贝文件时耗时较长,之后耗时较少。

FileReader读取字符数据

1、FileReader和FileInputStream有非常多相似之处,但是FileReader每次读取的单位是一个字符,而FileInputStream每次读取的单位是一个字节。

FileWriter写入字符数据

2、FileWriter和FileOutputStream有非常多相似之处,但是FileWriter每次写入的单位是一个字符,而FileOutputStream每次写入的单位是一个字节。

LineNumberReader读取加行号

3、setLineNumber()方法设置当前行号,getLineNumber()方法读取当前行号。在实验当前行号初始值设为100,输出时行号却是从101开始的,这是因为LineNumberReader类在读取到换行符('\n')、回车符('\r')或者回车后紧跟换行符时,会将行号自动加1。

File类的常用方法的使用

File类有三个常用构造方法,如下表所示:

 1、File(String pathname)	通过指定的一个字符串类型的文件路径来创建一个新的File对象
2、 File(String parent,String child)	根据指定的一个字符串类型的父路径和一个字符串类型的子路径(包括文件名称)创建一个File对象
3、 File(File parent,String child)	根据指定的File类的父路径和字符串类型的子路径(包括文件名称)创建一个File对象
4、三种常用构造方法创建File对象可以都使用,示例代码如下:

// 方式1: File(String pathname)
File file = new File(“c:\a.txt”);
// 方式2: File(String parent,String child)
File file = new File(“c:”, “a.txt”);
// 方式3: File(File parent,String child)
File parentfile = new File(“c:”);
File file = new File(parentfile, “a.txt”);
2、File类中的createNewFile()方法,当文件存在时不会创建,该方法返回值为false,文件不存在时才创建,如果创建成功,该方法返回值为true。
3、在获取文件的最后修改时间操作中,使用到了DateFormat类,将File类中的lastModified()方法返回的毫秒值转换成了日期,更直观。
4、除了上面实验中演示的方法外,File类中还有其它常用的方法,例如重新命名文件。File类非常重要,常用方法也特别多,建议大家在学习File类的过程中多查看API。

递归遍历目录及其子目录下的文件

 1、File类中有一个list()方法,该方法用于遍历某个指定目录下的所有文件的名称,返回值类型是String[]类型,和它不同的是,listFiles()方法返回值类型是File[]类型。list()还有一个重载方法list(FilenameFilter filter),其中FilenameFilter是文件过滤器,在文件过滤器对象的accept()方法中可以对文件进行过滤操作,例如遍历指定扩展名的文件等。
 2、在实验中由于每次遍历文件的操作是相同的,因此fileDir()方法中可以使用递归的方式,即自身调用自身的情况。

ByteArrayInputStream和ByteArrayOutputStream

 1、ByteArrayInputStream 包含一个内部缓冲区,该缓冲区包含从流中读取的字节。关闭 ByteArrayInputStream是无效的,该类中的方法在关闭此流后仍然可以被调用,而不会产生任何 IOException。
 2、ByteArrayOutputStream类实现了一个输出流,其中的数据被写入一个 byte 数组,缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。和ByteArrayInputStream一样,关闭ByteArrayOutputStream是无效的,该类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException。
 3、虽然ByteArrayInputStream的缓冲区会根据存入数据的多少而自动变化,但是读取的文件非常大时,就不能使用这个类,否则会造成内存溢出。

CharArrayReader和CharArrayWriter读写操作

1、CharArrayReade从字符数组中读取数据,CharArrayWriter是在内存中创建一个字符数组缓冲区,它们的功能与ByteArrayInputStream、ByteArrayOutputStream类似,只不过操作的数据是字符。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brldy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值