黑马程序员Java教程:PrintWriter-字符打印流
- 格式:docx
- 大小:149.19 KB
- 文档页数:3
printwriter用法PrintWriter是一种专门用来写入字符文件或网络输出流的流对象。
它继承自java.io.Writer类,其实它也有助于方便的写入UTF-8文件或流且占用资源更少的事实上,PrintWriter也可以接受其它类型的数据源,如文件的路径字符串、文件或者一个网络流等。
PrintWriter常用的构造函数有两个:1. PrintWriter(File file):根据文件名创建PrintWriter ,该构造函数可以使用一个字符的流对象( OutputStreamWriter)来写入一个字节的流对象( FileOutputStream)。
2. PrintWriter(Writer out):使用该构造函数时,可以将其他类型的Writer对象传入,使其输出到PrintWriter中,并在PrintWriter上强转成Writer类型,如OutputStreamWriter、FileWriter。
PrintWriter最主要的方法就是常用的print( )和println( )方法,它们是用于写入标准输出流和字符流。
print( )方法用于将指定的字符串写入流中,而println( )方法会先将指定的字符串写入流中,再自动换行。
这两个方法可以有很多形式的参数,可以是String、基本数据类型,以及基本数据类型的数组等,从而可以写出很多不同类型的数据到文件中。
PrintWriter还可以调用flush( )方法和close( )方法,可以用来清空缓冲区里仍然留存的字符,以及最后关闭输出流,使其释放占用的资源减少内存占用。
总之,PrintWriter类可以方便地将文本数据写入文件,或者将文件的内容输出到文件或者网络流中,极大地提高了编程的效率,是Java编程中非常常用的文件输出流类。
IO 部分测试题考试宣言:同学们, 考试考多少分不是我们的目的! 排在班级多少的名次也不是我们的初衷!我们考试的目的是要通过考试中的题目,检查大家在这段时间的学习中,是否已经把需要掌握的知识掌握住了,如果哪道题目你不会做,又或者做错了, 那么不用怕, 考完试后, 导师讲解的时候你要注意听! 那时候学会了, 记住了, 也一样不影响你高薪就业!本套题共40道不定项选择题,其中单选30道,多选10道。
单选2分/题,多选4分/题。
多选题不全对半分,全对满分。
1.下列叙述中,正确的是 ( )A. Reader是一个读取文本文件的接口B. Reader是读取二进制数据文件的抽象类C. Reader是一个读取文本文件的抽象类D. Reader是读取二进制数据文件的一般类2.下面关于IO流的说法正确的是( )A. IO流可以分为字节流和字符流B. 和是专门用于读取和写入文本文件的C. 顶层类有InputStream和OutputStreamD. 顶层类有Reader和Writer,他们都是接口//抽象类3.类描述正确的是( )A. 字节输入流B. 字符输入流//没什么说的,记住吧C. 打印流D. 序列化流4.下列关键字能和try一起使用的有( )A. finalB. finalizeC. finallyD. catch5.具有readLine()方法的类是( )A.B. InputStreamReaderC.D. BufferedReader // readLine()方法是缓冲流BufferedReader的特有方法6.关于newLine()方法描述错误的是( )A. newLine()方法写入换行B. newLine()方法会根据不同操作系统自动选择使用相应的换行符C. newLine()方法是类的方法D. newLine()方法是BufferedWriter类的方法// 这个也是特有方法.7.实现下列哪个接口,可以启用序列化功能( )A. Runnable接口B. Comparable接口C. Serializable接口// 这个记住吧D. Comparator接口8.以下关于java异常说法不正确的是()。
IO流总结异常父类是Throwable,处理异常的两种方案,一种try --catch 另外一种抛出熟练使用Try---catch---finally,注意:能和try一起使用的只有catch和finally关键字Try块里面存放的是有可能发生异常的代码,通常和catch块一起使用,catch块用于处理try块中抛出的异常,finally块不是必须的,通常将释放资源(例如IO流的close方法)的代码放到finally块里面注意:finally和Final还有Finalize的区别File类注意:File类封装的路径,而不一定是一个具体的文件,File类不能用于读写文件,File类只能用来处理和文件相关的操作构造方法* File(String pathname):根据一个路径得到File对象* File(String parent, String child):根据一个目录和一个子文件/目录得到File对象* File(File parent, String child):根据一个父File目录和一个子文件/目录得到File对象创建功能* public boolean mkdir():创建文件夹如果存在这样的文件夹,就不创建了* public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来注意:mkdir只能创建单级目录,mkdirs用于创建多级目录判断功能,* public boolean isDirectory():判断是否是目录* public boolean isFile():判断是否是文件* public boolean exists():判断文件是否存在注意:判断功能返回的都是布尔类型的获取功能* public String getName():获取名称* public long length():获取长度。
字节数* public File[] listFiles():获取指定目录下的所有文件或者文件夹对象,返回的是File数组* public File[] listFiles(FilenameFilter filter):注意:此方法需要传入筛选文件名的接口FileNameFilter,用于过滤文件概念* Input Output流用来处理设备之间的数据传输,Java中输入输出功能是通过流来实现,把数据写入文件需要创建流对象* Java对数据的操作是通过流的方式* Java用于操作流的类都在IO包中* 流按流向分为两种:输入流,输出流。
PrintWriter的⽤法简介 1 import java.io.FileWriter;2import java.io.IOException;3import java.io.PrintWriter;45/*6 * 打印流:7 * PrintStream8 * PrintWriter9 * 可以⾃动换⾏:println()10 * 不能输出字节,但可以输出其他的任意类型11 * 通过某些配置可以⾃动刷新(只有在println,print,format才可以使⽤)12 * 是包装流,不具备读写功能13 * 可以把字节转换成字符输出14 *15 * 注意:只能输⼊不能输出16*/17public class PrintWriterDemo {1819public static void main(String[] args) throws IOException {20//创建打印流21 PrintWriter print = new PrintWriter("b.txt");2223//输出数据24 print.write("hello");25 print.write("world");26 print.write("!");2728//使⽤打印流特有⽅法输出println()29//与平台⽆关30 print.println("hello");31 print.println("world");32 print.println("!");3334//创建⼀个新的对象,此对对象具有⾃动刷新的功能,即在释放资源之前就写⼊数据35 PrintWriter out = new PrintWriter(new FileWriter("c.txt"), true);3637//输出数据38 out.println("hello");39 out.println("world");40 out.println("!");4142//释放资源43 print.close();44 out.close();4546 }47 }应⽤实例:1import java.io.BufferedReader;2import java.io.FileReader;3import java.io.FileWriter;4import java.io.IOException;5import java.io.PrintWriter;67/*8 * 使⽤PrintWriter复制⽂本⽂件9*/10public class PrintWriterDemo2 {1112public static void main(String[] args) throws IOException {13//创建数据源对象14 FileReader is = new FileReader("b.txt");15 BufferedReader br = new BufferedReader(is);1617//创建⽬标路径对象18 PrintWriter os = new PrintWriter(new FileWriter("d.txt"), true); 1920//复制⽂件21 String line; //交换数的中介22while ((line = br.readLine()) != null) {23 os.println(line);24 }2526//释放资源27 is.close();28 os.close();29 }30 }。
Day23总结:1、打印流:就是输出流,可以直接操作输入流和文件printStream:字节流特点:1、构造函数接收File对象、字符路径、字符输出流、以为着打印的目的可以是很多。
2、该对象具有特有的方法,print println可以打印任何数据类型的数据。
3、特有的printf方法可以保持任意类型的数据表现形式的原样性,将数据输出到目的地,对于OutputStream父类中的write是将数据的最低字节写出去、API:为其他的输出流添加了功能,使他们能够方法便的打印各种数据值表示形式,它还提供了其他两项功能。
与其他输出流不同,printStream永远不会抛出IOException异常,而是异常情况仅设置可通过checkError方法测试的内部标识,另外,为了自动刷新,可以创建一个printStream,这以为着可在写入byte数组之后自动调用flush方法,可吊桶其中一个println方法,或者写入一个换行符或者字节(\r\n),printStream打印的所有字符都使用平台默认字符编码转换为字节,在需要写入字符而不是写入字节的情况下,应该使用printWriter 类。
注意:能写一个整数、还能打印一个整数为什么?Write(97);a0000-0000 0000-0000 0000-0000 0110-0001 97将最后一个八位写入到硬盘,也就是最后一个字节0110-0001记事本把这个二进制解析了,然后查表返回a;Print(97);你看到是什么?目的里面就是什么?97原理:先把97--->"97"--->"97".getBytes()(2个字节)printWriter字符流:使用频繁,因为需要将数据从服务端打印到客户端特点:1、当操作的数据是字符时,可以选择printWriter比printStream更方便。
2、它的构造函数可以接收File对象,字符串路径、字节输出流、字符流。
Java学习PrintWriter打印输出—⽤于快速输出字符到⽂件前⾔ ⼀般情况下,我们输出⼀些字符串到⽂档中需要使⽤FileWriter与BufferedWriter配合。
但是使⽤这⽅式效率并不⾼,在有⼤量⽇志或者字符串需要输出到⽂档中的情况下更推荐使⽤PrintWriter简单的demoprivate void write(){File file = new File(getExternalCacheDir().getPath(), "demo.txt");try {PrintWriter printWriter = new PrintWriter(file);//PrintWriter会⾃动判断⽂件是否存在,如果不存在会⾃动创建⽬录与⽂件printWriter.print("写⼊内容1");//print⽅法不会调⽤flushprintWriter.println("写⼊内容2");//使⽤println⽅法写⼊内容会⾃动在底层调⽤flush⽅法,println会影响些许性能,因为时刻将字符串输出到⽂件中,但是有及时性 } catch (FileNotFoundException e) {e.printStackTrace();}}注意!这个demo,并不会⾃动在⽂件的后续追加内容,所以你会看到⽂档只有⼀⼩部分内容。
在输出⽂档的尾部追加写⼊内容的demoprivate void write(){File file = new File(getExternalCacheDir().getPath(), "demo.txt");FileWriter fileWriter = null;PrintWriter printWriter = null;try {fileWriter = new FileWriter(file, true);//这⾥设置的true就是设置在⽂档后⾯追加内容printWriter = new PrintWriter(fileWriter, true);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally {if (printWriter != null){printWriter.close();printWriter = null;}if (fileWriter != null){try {fileWriter.close();fileWriter = null;} catch (IOException e) {e.printStackTrace();}}}}end。
Java字符输入输出流是用来处理字符流的,比较适合处理文本文件。
1. InputStreamReader和OutputStreamWriterJava提供了InputStreamReader和OutputStreamWriter两个类,分别用于将字节流转换成字符流,以及将字符流转换成字节流。
它们可以指定字符集,实现不同字符编码之间的转换。
2. FileReader和FileWriterFileReader和FileWriter分别用于读取和写入字符文件。
它们默认使用评台默认的字符编码,也可以指定字符编码。
3. BufferedReader和BufferedWriterBufferedReader和BufferedWriter是字符输入输出流的缓冲流,它们可以提高读写的效率。
BufferedReader可以一次读取一行字符,BufferedWriter可以一次写入一行字符。
4. PrintWriterPrintWriter是字符输出流的高级类,它提供了很多方便的方法来输出各种类型的数据,比如字符串、整数、浮点数等。
5. 字符输入输出流的使用示例下面是一个使用字符输入输出流读写文件的示例:```javaimport java.io.*;public class FileCopy {public static void m本人n(String[] args) {try (BufferedReader reader = new BufferedReader(new FileReader("input.txt"));BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {String line;while ((line = reader.readLine()) != null) {writer.write(line);writer.newLine();}} catch (IOException e) {e.printStackTrace();}}}```在这个例子中,我们使用BufferedReader和BufferedWriter来读取和写入文本文件,通过BufferedReader的readLine方法一次读取一行字符,然后通过BufferedWriter的write和newLine方法来写入文件。
流的操作规律之所以要弄清楚这个规律,是因为流对象太多,开发时不知道用哪个对象合适。
想要知道对象的开发时用到哪些对象,只要通过四个明确即可。
1、明确源和目的源:InputStream Reader目的:OutputStream Writer2、明确数据是否是纯文本数据源:是纯文本:Reader否:InputStream目的:是纯文本:Writer否:OutputStream到这里,就可以明确需求中具体要使用哪个体系。
3、明确具体的设备源设备:硬盘:File键盘:System.in内存:数组网络:Socket流目的设备:硬盘:File控制台:System.out内存:数组网络:Socket流4、是否需要其他额外功能是否需要高效(缓冲区):是,就加上buffer需求1:复制一个文本文件1、明确源和目的。
源:InputStream Reader目的:OutputStream Writer 2、是否是纯文本?是!源:Reader目的:Writer3、明确具体设备。
源:硬盘:File目的:硬盘:FileFileReader fr = new FileReader("a.txt");FileWriter fw = new FileWriter("b.txt");4、需要额外功能吗?需要,高效BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));============================================需求2:读取键盘录入信息,并写入到一个文件中1、明确源和目的。
源:InputStream Reader目的:OutputStream Writer2、是否是纯文本?是!源:Reader目的:Writer3、明确具体设备。
PrintWriter:字符打印流
构造函数参数:
1. 字符串路径
2. File对象
3. 字节输出流
4. 字符输出流
示例2:
1.import java.io.BufferedReader;
2.import java.io.InputStreamReader;
3.import java.io.PrintWriter;
4.import java.io.IOException;
5.
6.public class PrintWriterDemo{
7. public static void main(String[] args) throws IOException {
8. BufferedReader bufr = new BufferedReader(new
InputStreamReader(System.in));
9. PrintWriter out = new PrintWriter(System.out);
10.
11. String line = null;
12. while((line = bufr.readLine()) != null){
13. if("over" .equals(line))
14. break;
15. out.println(line.toUpperCase());
16. out.flush();
17. }
18.
19. out.close();
20. bufr.close();
21. }
22.}
23.
运行结果:
示例3:
1.import java.io.BufferedReader;
2.import java.io.FileWriter;
3.import java.io.InputStreamReader;
4.import java.io.PrintWriter;
5.import java.io.IOException;
6.
7.//写入到out.txt文件中
8.public class PrintWriterDemo{
9. public static void main(String[] args) throws IOException {
10. BufferedReader bufr = new BufferedReader(new
InputStreamReader(System.in));
11. //PrintWriter构造函数的第二个参数设置为true,表示自动刷新
12. PrintWriter out = new PrintWriter(new
FileWriter("out.txt" ),true);
13.
14. String line = null;
15. while((line = bufr.readLine()) != null){
16. if("over" .equals(line))
17. break;
18. out.println(line.toUpperCase());
19. }
20.
21. out.close();
22. bufr.close();
23. }
24.}
25.
运行结果:。