java io文件操作

前言:

java文件系统操作的主要对象就是File类。

java文件内容给操作主要流对象有两种:面向字符流(Reader,Writer),面向字节流(InputStream,OuputStream)

1.文件系统操作(File)

(1)构造方法:

最常用的是第二种(只传pathname),一旦给定pathname就会在对应路径(可以是绝对路径,也可以是相对路径)创建出一个指定后缀名的文件。

(2)方法:

只列举了部分方法,具体的所有方法移至JDK帮助手册 。

2.文件内容操作

进行文件相关操作时,最后需要关闭文件,如果不关闭可能会造成资源泄露(一直打开文件导致文件描述符表被占满了)有两种形式:

a.try....finally{...} :在finally中执行文件的关闭

b.try with resources:更优雅的方式,try中的类必须实现closeable接口,在该代码块结束时会自动调用接口中的close方法。

eg:

(1)面向字符流(面向文件)

主要使用的类:Reader(读)和Writer(写),都是抽象类不能直接实例化对象,需要通过FileReader和FileWriter两个继承了Reader和Writer的类来实例化对象。Writer在实例化对象时,可以传入参数append:表示是否进行拼接。(如果为true,则每次写文件的时候都是直接写在后面;如果为false,则会将原有的数据清空然后写入新的数据)

a.Reader

方法:

主要方法就是read和close方法。

ps:

read方法的返回值是一个int类型的,是为了更好的判断文件是否读到末尾(读取结束) ,如果返回-1则代表已经读到文件末尾,用其他类型的返回值(比如:char)不好进行表示,大小为2个字节(0~65535)。

在使用read()(每次只读一个字符),是最好使用while循环,直到返回值为-1.

b.Writer

方法:

主要的方法write,close和flush。

ps:

flush方法:这个方法的存在是为了刷新缓存区,使数据完全写入硬盘。

缓冲区的作用:一定程度上可以提高效率。

原因:往缓冲区中写入数据相当于往内存中存储数据,而往硬盘上写数据的速度是很慢的,所以要想提高效率,就得降低写硬盘的次数。

flush存在意义:当我们把数据写入缓冲区后,还未来得及写入硬件,进程就结束了,就会导致数据的丢失,所以为了确保数据写入硬盘就需要在合适的时机调用flush刷新内存,让数据完全写入硬盘。

(2)面向字节流

主要是InputStream(读)和OutputStream(写),也都是抽象类,需要FileInputStream和FileOutputStream(也可传入参数append同Writer一样)来实例化对象。

a.InputStream

方法:

主要方法为read和close 

b.OutputStream

方法:

上述方法都比较常用。

(3)其他:

a.将字节流转换成字符流

eg:

String pathname = "....."; 

InputStream inputStream = new InputStream (pathname);//会抛异常IOException,需要显式处理

Scanner scanner = new Scanner(inputStream); //通过此种方法就可以进行读取文件中的内容

初学Scanner是所用的System.in中的in就是一个字节流。

System类下的静态成员变量:

b.使用PrintStream (使用输出流)来写文件

eg:

String pathname = "....."; 

OutputStream outputStream = new OutputStream(pathname);

PrintStream printStream = new PrintStream(outputStream);

方法都是OutputStream中相同的方法(write,flush)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值