PrintWriter的使用

本文深入解析Java中的PrintWriter类,探讨其自动行刷新特性及高效文件写入机制。通过实例演示如何利用PrintWriter进行文件操作,包括字符集指定、流连接形式的使用,以及简易记事本功能的实现。
摘要由CSDN通过智能技术生成

PrintWriter的使用

java.io.PrintWriter

具有自动行刷新的缓冲字符输出流,特点是可以按行写出字符串,并且可以自动行刷新。

java.io.BufferedWriter是缓冲字符输出流,内部有缓冲区可以进行块写操作提供效率,

而PrintWriter就是通过连接它实现的缓冲功能(PW的很多构造方法内部自动连接它)。

PW支持两个直接对文件写操作的构造方法:
* PrintWriter(File f)传文件名
* PrintWriter(String s)传路径

以上两种方法都支持一个重载,就是再传入一个参数
* 允许我们制定写出字符时的字符集。

* PrintWriter给人一种可以直接对文件进行操作的假象
* PW是一个高级流
* 实际上PW包装了字节流、字符流和字符缓冲流。
* PW负责自动行刷新
* bw负责提高效率
* osw负责读字符
* fos负责写字节
* 最后PW能够按行很快地把一个字符串变成字节写在文件中

代码展示如下所示:



import java.io.IOException;
import java.io.PrintWriter;

/**
* java.io.PrintWriter
* 具有自动行
* @author 小明
*
*/
public class PWDemo {

public static void main(String[] args) throws IOException {
/**
* PW支持两个直接对文件写操作的构造方法:
* PrintWriter(File f)传文件名
* PrintWriter(String s)传路径
* PrintWriter给人一种可以直接对文件进行操作的假象
* PW是一个高级流
* 实际上PW包装了字节流、字符流和字符缓冲流。
* PW负责自动行刷新
* bw负责提高效率
* osw负责读字符
* fos负责写字节
* 最后PW能够按行很快地把一个字符串变成字节写在文件中
*/

PrintWriter pw = new PrintWriter("pw.txt");

pw.println("飞雪连天射白鹿");
pw.println("金庸小说我都爱看");
System.out.println("写出完毕!");
pw.close();
}
}




import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class PWDemo2 {

public static void main(String[] args) throws IOException {
/**
* 使用流连接形式向文件中写出字符串
*/
//    FileOutputStream fos = new FileOutputStream("pw2.txt");
//    
//    OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
//    
//    BufferedWriter bw = new BufferedWriter(osw);
//    
//    PrintWriter pw = new PrintWriter(bw);

PrintWriter pw = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream("pw2.txt")
, "UTF-8")
)
);

pw.println("你好");
pw.println("我不好");
pw.close();

}

}


缓冲字符流中所有构造方法中第一个参数都是Reader或Writer对象。

代码展示如下所示:
PrintWriter创建时如果有参数true时,会有行刷新。PrintWriter调用println()方法有行刷新。

当创建PW时第一个参数为一个流时,
* 那么久可以再传入一个boolean值类型的参数,
* 若该值为true,那么当前PW久具有自动行刷新的功能,
* 即:每当使用println方法写出一行字符串后就会自动调用flush
* 注:使用自动行刷新可以提高写出数据的即时性,
* 但是由于会提高写出次数,必然会导致写效率降低。



package io;

import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;

/**
* 完成简易记事本功能
* 程序启动后要求输入文件名,然后对该文件写操作。
* 之后输入的每一行字符串都按行写入到该文件中。
* 当输入“exit"是程序退出。
* 
* 使用PW完成该功能,并且自行使用流连接完成。
* 
* @author 小明
*
*/
public class Note {
public static void main(String[] args) throws IOException, FileNotFoundException{
Scanner reader = new Scanner(System.in);
System.out.println("请输入文件名:");
String filename = reader.nextLine();

PrintWriter pw = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
new FileOutputStream(filename),"UTF-8"
)
),true
);
System.out.println("请开始输入内容");
while(true)
{
String line = reader.nextLine();
/**
* 当创建PW时第一个参数为一个流时,
* 那么久可以再传入一个boolean值类型的参数,
* 若该值为true,那么当前PW久具有自动行刷新的功能,
* 即:每当使用println方法写出一行字符串后就会自动调用flush
* 注:使用自动行刷新可以提高写出数据的即时性,
* 但是由于会提高写出次数,必然会导致写效率降低。
*/
if("exit".equals(line))
{
break;
}
//pw.write(line);
pw.println(line);
//pw.flush();
}
pw.close();
System.out.println("谢谢输入");
}

}

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值