Java输入输出流与缓冲区的使用,有需要的朋友可以参考下。
一,Input/Output流:
将外设中的数据读取到内存中就是输入。
将内存中的数据写入到外设中就是出。
I/O流就是用来处理设备间的 数据传输 。用于操作流的对象都放在IO包中。
流按操作方式分为字节流和字符流。
字节流能处理所有的数据。
字符流的由来:
其实就是字节流读取文字字节数据后,不直接操作,而是先查指定的编码表,获取指定的文字,再对这个文字进行操作。简单地说即是:字符流=字符流+编码表。
输入输出流的顶层父类:
字节流:
1,InputStream
2,OutputStream
字符流:
1,Readrer:
2,Writer:
这些体系的子类都以父类名作为后缀。而且子类名的前缀就是对象的功能。
从熟悉的文字开始:字符流
将一些文字存储到硬盘上的 文件夹 中:
若果要操作文字数据,优先考虑字符流,而且要将数据从内存写到硬盘上,要使用字符流中的输出流Writer。 硬盘数据 的基本体现是文件。
FileWriter file = new FileWriter("D:\\FileWriterDemo.txt"); //创建文件输出流
file.write("加油"); //向文件缓冲区写入数据
file.flush(); //将缓冲区数据写入到目标文件中
file.write("Hello World!"); //再次向文件中写入数据
file.close(); //关闭输出流,以后不能再利用该流输出数据
注意:
1.向 硬盘 输出数据需要抛出IOException异常。
2.Windows 识别的换行标志是:\r\n 故,需要文本换行时,需要在文本内部添加“\r\n”即可。
例如需要输出:
加油!
加油。
可以使用语句:file.write("加油!\r\n加油。");
如果构造 函数 中添加参数true,则可以实现对文件的续写功能,再次对文件进行操作时,是追加的内容而不是覆盖。
方法如下:FileWriter file = new FileWriter("D:\\FileWriterDemo.txt",true);
读取:
读取一个文本文件,将读取到的文本打印到 控制台 :
//方法一: int ch; FileReader filereader = new FileReader("D:\\FileWriterDemo.txt"); while((ch = filereader.read()) != -1){ System.out.print((char)ch); filereader.close(); } //方法二: FileReader filereader = new FileReader("D:\\FileWriterDemo.txt"); char[] arr = new char [1024]; int len = 0; while((len = filereader.read(arr)) != -1) System.out.print(new String(arr,0,len)); filereader.close();
注意:
1.在创建读取流对象时,必须要明确被读取的文件。并且一定要确定该文件存在。
2.当读取到文件末尾时,如果继续读则返回-1.
将C盘的一个文本文件复制到D盘。
分别定义读写操作,从一个文件读取,使用写操作对读取的数据进行写的操作。
二,缓冲区的使用:
使用缓冲区写入文件:
为了提高写入的效率,就引入了字符流的缓冲区。
创建一个字符写入流缓冲区对象,
和指定需要缓冲的对象相关联。
使用缓冲区的写入方法将数据写入到缓冲区中。
使用缓冲区的刷新方法,将数据刷新到目的文件
使用缓冲区的光比方法,关闭相应的缓冲区,关闭缓冲区其实就是关闭流对象。
举例如下:
FileWriter filereader = new FileWriter("D:\\BufferedDemo.txt",true); BufferedWriter bw = new BufferedWriter(filereader); bw.write("\r\n努力加油加油!"); bw.flush(); bw.close();
注意:写入缓冲器中含有一个特殊的方法:newLine()。作用换行。
使用缓冲区读取文件:(过程如写入)
String str; FileReader fr = new FileReader("D:\\BufferedDemo.txt"); BufferedReader br = new BufferedReader(fr); while((str = br.readLine()) != null) System.out.println(str); br.close();
注意:读取 缓冲器 中含有一个特殊的方法:readLine()。作用读取一行。不包含换行。
缓冲区无非就是定义了一个数组,并对外提供了更多的方法对数组进行访问。
其实这些方法最终操作的都是数组的角标。
缓冲的原理:
其实就是从源中获取一批数据装进缓冲区中,再从缓冲区中不断地取出一个一个的数据。
在此次取完后,再从源中继续取出下一批数据进入缓冲区。当源中的数据取完后,用-1作为结束标记。