------- android培训、java培训、期待与您交流! ----------
IO流用来处理设备之间的数据传输;
Java对数据的操作是通过流的方式;
Java用于操作流的对象都在IO包中;
流按操作数据分为两种:
字节流和字符流;
流按流向分为:输入流,输出流。
字节流的抽象基类:InputStream,OutputStream
字符流的抽象基类:Reader,Writer;
流操作的基本规律:
1、明确源和目的;
2、操作的数据是否为纯为本;
3、当体系明确后,在明确要使用哪个具体的对象。
FileWriter,FileReader类:
操作流程:
1、创建相应的流对象,该对象被初始化时必须要明确被操作的文件。而且该文件会被创建到指定
目录下。如果该目录下已有同名文件,将被覆盖(调用第一个构造函数)。
2、进行相应的读写操作;
3、是否需要进行刷新操作,如果需要,则需要进行刷新;
4、关闭流,释放资源。
FileWriter:
class FileWriterDemo {
public static void main(String[] args) throws IOException {
/*创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。*/
FileWriter fw = new FileWriter("demo.txt");
//调用write方法,将字符串写入到流中。
fw.write("abcde");
/*刷新流对象中的缓冲中的数据。
将数据刷到目的地中。*/
//fw.flush();
/*关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据。
将数据刷到目的地中。
和flush区别:flush刷新后,流可以继续使用,close刷新后,会将流关闭。 */
fw.close();
}
}
文件的续写:通过构造方法创建可续写文件的流对象。
public static void main(String[] args) throws Exception {
FileWriter fw = new FileWriter("demo.text",true);//续写,不覆盖已有的文件
fw.write("abc");
fw.close();
}
文件拷贝代码片段:
通过FileReader读取指定文件中的内容,创建一个1M大小字符数组缓冲区,再由FileWriter流对象写入指定的目标文件。
public static void copy_2() throws Exception {
FileReader fr = new FileReader("D:\\testsrc.txt");//创建FileReader对象指向要读取的文件
FileWriter fw = new FileWriter("D:\\dest.txt");//创建FileWriter对象指向要写入的目的文件
int len = 0;
char[] buf = new char[1024];//创建一个缓冲区
while((len=fr.read(buf)) != -1) { //读取文件内容
fw.write(buf,0,len);//写入文件内容
}
fr.close();
fw.close();
}
字符流的缓冲区:
缓冲区的出现提高了对数据的读写的效率;
对应类:BufferedWrite, BufferedReader;
缓冲区要结合流才可以使用。
在流的基础上对流的功能进行了增强。
BufferedWrite提供了一个跨平台的换行方法,newLine();
BufferedReader提供了一个读一行的方法,readLine()不包含行终止符。当返回null是,表示已经读到了文件的末尾。
因为在BufferedReader和BufferedWrite中调用了相应的流对象,所以只需要关闭BufferedReader和BufferedWrite,释放资源。
装饰设计模式:
当想要对已有的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。那么自定义的该类称为装饰类。继承和装饰的区别:
装饰模式比继承更灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有对象是相同的,只不过提供了更强的功能,所以装饰类和被装饰类通常属于同一个体系中。
read 方法返回的为什么是int类型,而不是byte类型:
为了防止凑巧读取到8个1(十进制的-1),这样正好符合了判断条件,而此时文件并没有读取结束,所以将byte类型提升为int类型,由4个字节来存放数据,前3个字节补0(方法是将提升后的数据与255进行与运算),避免了出现-1的情况,也保证了原数据没有变化。而write方法在执行时,又将4个字节的int类型转换为了1个字节的byte类型。
------- android培训、java培训、期待与您交流! ----------
本文深入探讨了Java IO流的基本概念、分类、操作流程,包括字节流与字符流的区别,着重介绍了FileWriter与FileReader类的使用方法、文件的读写与续写过程,以及文件拷贝的实现步骤。同时,阐述了缓冲区的作用及其在流操作中的应用,最后通过装饰设计模式解释了如何对现有对象进行功能增强。
1176

被折叠的 条评论
为什么被折叠?



