2.1 PrintStream和PrintWriter区别
1 PrintStream主要操作byte流,而PrintWriter用来操作字符流。读取文本文件时一般用后者。 2 java的一个字符(char)是16bit的,一个byte是8bit的
3 PrintStream的可能会出现字符集乱码吧。PrintStream是用来操作byte,
PrintWriter是用来操作Unicode, 一般 需要处理中文时用PrintWriter好了
4 PrintStream是一种能接收各种数据类型的输出,打印数据时比较方便:
-System.out是标准输出;-System.err是标准错误输出。
PrintWriter是基于Writer的输出。
2.2 PrintStream和PrintWriter 需要了解的点
这两者在往文件中写入字符串时,最终都需要通过字符集的映射关系得到对应字节。
但这二者在通过char得到对应若干字节的时机不一样,以new PrintStream( new BufferedOutputStream( new FileOutputStream("BasicFileOutput.out")));和new PrintWriter( new BufferedWriter( new FileWriter("BasicFileOutput.out")))为例,前者在存字符串时,从PrintStream传到BufferedOutputStream时就已经是字节了;后者在存字符串时,直到FileWriter真正写入文件时,才将字符转换为字节。
如果PrintStream被设置为autoFlush,那么这些情况flush方法将会自动执行:写入字节数组、任何重载版本的println被调用、一个换行符(char)被写入、一个换行符的字节存储(\n)被写入。
如果PrintWriter被设置为autoFlush,那么这些情况flush方法将会自动执行:println、printf、format方法被调用。
它们都不会抛出IO异常,因为它们在方法内部捕获住了,可以通过checkError()来判断是否发生异常。
PrintWriter会使用平台特有的换行符(比如Windows和linux),PrintStream则固定使用\n。
总的来说,Reader/Writer相比InputStream/OutputStream算是一种升级,将当初设计得不好的地方进行了优化。
3 简单用例3.1使用PrintStream进行打印到文件的操作
@Test
public void IOTest1() throws Exception{
PrintStream ps = new PrintStream(new FileOutputStream("D:\\\\testofprint.txt"));
ps.print("我是打印流测试(PrintStream)");
ps.close();
}
3.2使用PrintWriter进行打印到文件的操作
@Test
public void IOTest2() throws Exception{
PrintWriter pw = new PrintWriter(new FileWriter("D:\\testofprint.txt"));
pw.write("我是打印流测试(PrintWriter)");
pw.close();
}
3.3使用打印流进行重定向的操作,从文件读取内容到程序
@Test
public void IOTest3() throws Exception{
System.setIn(new FileInputStream("D:\\testofprint.txt"));
Scanner input = new Scanner(System.in);
String next = input.next();
System.out.println(next);
input.close();
}
3.4使用打印流进行重定向的操作,从程序到文件
//使用打印流进行重定向操作,从程序将内容打印到文件
@Test
public void IOTest4() throws Exception{
System.setOut(new PrintStream("D:\\testofprint.txt"));
System.out.println("我是打印流重定向操作");
}
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved