这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战
BufferedWriter的中文意思就是字符缓冲输出流,可以写入单个字符,也可以写入字符数组,或者是字符串的某一部分,一句话就是非常好用。
下面是BufferedWriter实例中一个最简单的结构。
public static void main(String[] args) {
BufferedWriter bw = null;
bw = Files.newBufferedWriter("test.txt", StandardCharsets.UTF_8);
bw.write("hello");//写入单个字符
bw.write("world");
bw.write("!!!");
bw.newLine();
bw.flush();
bw.close();
}
复制代码
这里必须调用bw.flush()方法,这个方法会刷新一下该缓冲流,也就是会把数据写入到目的文件里去,不然数据都还是只写在缓冲区里,没有写入文件的。
//Writes a string.
public void write(String str) throws IOException {
write(str, 0, str.length());
}
复制代码
BufferedWriter中的另外一个重要方法write()
,这是一个核心方法,继承子父类,对缓存区内写入字符串的作用,可以是单个字符串或者是多个字符串组。
newLine方法:提供了一个newLine()方法,它使用平台自己的行分隔符概念
用于进行输出的时候做换行操作且自动适用平台的换行分隔符,而非自定义的,比较灵活。
写入行分隔符。行分隔符字符串由系统属性<tt>
行。分隔符</tt>
,不一定是单个换行符('\\n')
字符。
public void newLine() throws IOException {
write(lineSeparator);
}
public void write(String str) throws IOException {
write(str, 0, str.length());
}
复制代码
下面是一个实际案例,使用BufferedWriter
打开一个本地文件
String filename = "BufferedWriterTestVisit-2021-11-28.csv";
BufferedWriter bw = null;
File csvFile = null;
try {
csvFile = new File(systemConfig.getExportFilePath() + filename);
File parent = csvFile.getParentFile();
if (parent != null && !parent.exists()) {
parent.mkdirs();
}
csvFile.createNewFile();
bw = Files.newBufferedWriter(Paths.get(systemConfig.getExportFilePath()+filename), StandardCharsets.UTF_8);
List<String> headList = Lists.newArrayList();
headList.add("测试BufferedWriter的头部内容");
headList.add("第一列内容");
headList.add("第二列内容");
headList.add("第三列内容");
//写入头部
writeRow(headList,bw);
writeRow(dataList,bw);
};
bw.flush();
复制代码
封装的writeRow
方法。主要内容就是将字符串内容列表一一读取通过write
方法写入到BufferedWriter
对象中。
private void writeRow(List row, BufferedWriter csvWriter) throws IOException {
// 写入文件头部
for (Object data : row) {
StringBuffer sb = new StringBuffer();
// 通过StringBuffer对象组装rowStr字符串,例如data=123456,得到的rowStr就是"123456",
String rowStr = sb.append(""").append(data).append("",").toString();
csvWriter.write(rowStr);
}
csvWriter.newLine();
}
复制代码
近期评论