Java学习笔记二十六(IO流之OutputStreamWriter、InputStreamReader类和BufferedReader、PrintWriter类)

OutputStreamWriter、InputStreamReader类

终于总结到字符的输入输出流了,太漫长了.....

在字符输入输出流中,顶级父类是Reader和Writer,是按照字符进行读写的,这两个流都是高级流,在使用之后必须关闭,不然写入不进去文件中。

在这个类中涉及到字符集的选择上,字符集主要是GBK和UTF-8。

在GBK中,中文一个字占两个字节,在UTF-8中,一个字占三个字节,所以写入和读取采取的字符集应该相同,不然会导致读取乱码。(不指定字符集时系统使用默认的字符集,其中windows下是GBK,Linux中是UTF-8)。

写入文件的简单操作

public class TestWriter {
	public static void main(String[] args) throws IOException {
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\keshe\\writer.txt"),"GBK");
		osw.write(65);
		osw.write("早上好");
		osw.write("困了".toCharArray());
		osw.close();
	}
}

读出文件的简单操作

public class TestReader {
	public static void main(String[] args) throws IOException {
		InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\keshe\\writer.txt"),"GBK");
		char[] chs = new char[1024];
		/*
		 * 从文件中尝试读取chs.length个字符
		 * 返回值是实际读到的字符
		 */
		int len = isr.read(chs);      
		String str = new String(chs,0,len);
		System.out.println(str);
		isr.close();
	}
}

 

PrintWriter和BufferedReader类

这两个类是缓冲字符输入输出流,BufferedWriter类也存在,但是由于性能没有PrintWriter好,支持的功能也没有人家多,所以在这里使用PrintWriter类。这两个类都是高级流。

在复制音频或者视频时,一般不采取这两个类,因为他们复制出的结果比原结果的字节数多,占用空间。

FileOutputStream("",true);                                               //表示追加写
PrintWriter(FileOutputStream file,true);                           //表示自动刷新

写入的简单操作

public class TestPrintWriter {
	public static void main(String[] args) throws IOException {
		PrintWriter pw = new PrintWriter(new FileOutputStream("C:\\keshe\\printwriter.txt",true),true);
		pw.println("fjdog");
		pw.print("djfd");
		pw.close();
	}
}

其中println和print的区别是:println中调用了一个刷新缓冲区函数,如果在构造方法中选择的是true的话,则会自动刷新缓冲区,print没有这个功能。同时println也会自动换行。

读出的简单操作

public class TestBufferedReader {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\keshe\\printwriter.txt")));
		System.out.println(br.readLine());
		br.close();
	}
}

每次都读一行。

IO流到这就结束啦,耶!

猜你喜欢

转载自blog.csdn.net/weixin_40373090/article/details/82558151