Java IO流(一) 字符流

xiaoxiao2021-02-28  129

IO流用来处理设备间的数据传输,分为字节流和字符流(融合了编码表,处理常见的文本数据)。

常用基本类之字符流类:Reader:Writer

1.FileWriter和FileReader

这两个类是字符流类的子类,可以实现文本的写入和读取,查阅API也可以看出,这两个类很简单。

写入:

FileWriter fw = new FileWriter("/Volumes/Function/G/demo.txt");//创建文本文件 fw.write("abc");//写入流中 fw.flush();//将数据刷新到文本中,如果不刷,则不会写入文本中 fw.close();//关闭之前会刷新一次内部缓冲,将数据刷到目的地中,flush刷新会继续使用。 其中,flush()和close()方法的区别在于,flush仅仅刷新了缓冲,并没有关闭流,在刷新后可以继续写入,而close则是在关闭之前刷新一次缓冲区,之后就不能再写入。

读取:

FileReader fr = new FileReader("/Volumes/Function/G/demo.txt"); // 一次读一个字符 int ch = 0; while((ch = fr.read()) != -1){ System.out.println((char)ch); } //循环读取数据 char[] chr = new char[1024]; int number = 0; while((number = fr.read(chr)) != -1){ System.out.println(number + "*******"+new String(chr,0,number)); } fr.close(); 复制文本:

(1)边读边复制,速度较慢

FileWriter fw = new FileWriter("/Volumes/Function/G/demo_copy.txt");//创建复制后的文本 FileReader fr = new FileReader("/Volumes/Function/G/demo.txt");//读取要复制的文本 int ch = 0; while ((ch = fr.read()) != -1) { fw.write(ch); } fw.close(); fr.close(); (2)先读取,临时存储,然后写入 FileWriter fw = null; FileReader fr = null; try { fw = new FileWriter("/Volumes/Function/G/demo_copy1.txt"); fr = new FileReader("/Volumes/Function/G/demo.txt"); char[] ch = new char[1024]; int len = 0; while ((len = fr.read(ch)) != -1) { fw.write(ch, 0, len); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (fr != null) { try { fr.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (fw != null) { try { fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 2.BufferedWriter和BufferedReader

字符串的缓冲区,提高对数据的读写效率,需要结合流来使用,所以在创建缓冲区前必须有流对象。与FileWriter和FileReader类似。

写入:

FileWriter fw = new FileWriter("/Volumes/Function/G/demo_test.txt"); BufferedWriter bufw = new BufferedWriter(fw);//将流对象传递给BufferedWriter方法即可利用缓冲区函数方法进行读写 bufw.write("abcd"); bufw.newLine(); bufw.write("dajhd"); bufw.flush(); bufw.close(); 读取: FileReader fr = new FileReader("/Volumes/Function/G/demo_test.txt"); BufferedReader bufr = new BufferedReader(fr); String s = ""; while((s = bufr.readLine()) != null){ System.out.println(s); } bufr.close(); 复制:与FileWriter、FileReader类似。

3.LineNumberReader

这一子类新增了两个方法,getLineNumber()和setLineNumber(),对于读取和写入方法还是一样的。

FileReader fr = new FileReader("/Volumes/Function/G/demo_test.txt"); LineNumberReader lnr = new LineNumberReader(fr); String line = null; while((line = lnr.readLine()) != null){ System.out.println(lnr.getLineNumber() + ":" + line); } lnr.close();效果如下:

转载请注明原文地址: https://www.6miu.com/read-50188.html

最新回复(0)