IO学习笔记(一)

一、对文件的写操作

1. FileWriter对象

FileWriter fw = new FileWriter("XXX");

只要对文件进行IO操作,就会有IOException异常。

创建一个FileWriter对象,该对象一初始化,必须要明确要操作的文件。

而且如果在该目录下如果存在与指定文件同名的文件,那么同名文件将被覆盖。

在用FileWriter对象写文件的时候,数据是被写到了缓冲中,所以要flush()。

当我们调用flush()方法时,FileWriter对象没有被关闭,我们可以继续向其中写数据。

调用FileWriter对象的close()方法前,会默认的自动调用flush()方法,但是调用close()方法后,将不能再进行写操作。

2. 对IO操作的异常的处理方式

在try外创建引用,在try内进行初始化,对FileWriter对象的关闭要在finally中执行,并且要加入不等于空的判断,防止文件找不到异常。

3. 利用FileWriter进行文件的续写

查阅JDK后我们发现在FileWriter的构造函数FileWriter(StringfileName, booleanappend) 对文件的续写给予了支持。

在文件续写时要注意的一个问题是:在Windows下的换行 \r\n 在linux下为\n

二、对文件的读操作

4. FileReader对象

FileReader fr = new FileReader("XXX");

fr.read();一个字符一个字符的读取即读取单个字符,每次返回的是一个字符,但是整形的,需要我们强制的转换成char。

fr.read(c);------read(char[]cbuf) 将读到的字符放入数组

fr.read(c,0,len);------read(char[]cbuf, intoff, intlen) 将字符读入数组的某一部分

读到文件的末尾会返回-1

5. 文件的拷贝(简写)

FileWriter fw = new FileWriter("xxx");

FileReader fr = new FileReader("xxxx");

char[] buf = new char[1024];
int len = 0 ;

while ((len = fr.read(buf))) {

fw.write(buf,0,len);

}
fw.close();

fr.close();

6. BufferWriter---BufferedReader

缓冲区的出现是为了提高流的操作效率,在缓冲区创建之前必须有流对象

BufferedWriter(Writerout)

BufferedWriter(Writerout, intsz)

BufferedWriter中多了一个newLine()的方法。

BufferedReader中出现了一个新的方法,readLine(),一次读一行的方法包含改行内容的字符串,不包含任何行终止符,如果已到达流的末尾,则返回null.

BufferedReader(Readerin)
BufferedReader(Readerin, intsz)

文件拷贝实现-----(一)

BufferedWriter bufw = new BufferedWriter(new FileWriter("D:\\a.txt"));

BufferedReader bufr = new BufferedReader(new FileReader("d:\\copy.txt"));
String str = null;
while ((str = bufr.readLine()) != null) {
bufw.write(str);
bufw.newLine();
bufw.flush();
}

文件拷贝实现-----(二)

FileWriter fw = new FileWriter("A.txt");
BufferedWriter bufw = new BufferedWriter(fw);
bufw.write("aaaaaaaccc");
bufw.flush();

7. readLine()方法的实现原理



8. 装饰设计模式的应用
当已有类的方法不能满足我们的需求的时候,我们可以采用装饰设计模式来对我们已有的对象进行增强,这里要注意是对对象的增强,如何对对象进行增强呢?我们可以定义一个新的类,然后在这个类中通过构造方法中传入原来的对象,基于已有的功能,并提供加强功能,那么自定义的类称为装饰类。在IO操作中,BufferedWriter就是采用了装饰设计模式。


9. FileInputStreamFileOutputStream

采用字节的方式对文件进行操作,在对图片、声音、视频等文件操作的时候就必须采用字节的方式对文件进行读取。其操作与字符流的操作基本一致,只是中间存放数据的数组发生了变化,由原来的字符数组变成了字节数组。

FileInputStream fi = new FileInputStream("D:\\1.jpg");
FileOutputStream fo = new FileOutputStream("D:\\2.jpg");
byte[] b = new byte[1024];
int len = 0;
while ((len=fi.read(b))!=-1)
{
fo.write(b,0,len);
}


10. BufferedInputStream(InputStreamin) BufferedOutputStream(OutputStreamout)

实现缓冲的输入输出流,与字符缓冲的输入输出流类似,都是在底层实现了数组,所以我们在使用的时候也不需要字节手动去创建字节数组,直接用就可以。

FileInputStream fi = new FileInputStream("D:\\1.jpg");
FileOutputStream fo = new FileOutputStream("D:\\2.jpg");
BufferedOutputStream bufo = new BufferedOutputStream(fo);
BufferedInputStream bufi = new BufferedInputStream(fi);
int len = 0;
while ((len=bufi.read())!=-1)
{
bufo.write(len);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值