多线程下bufferedwriter若不关闭并不能记下所有log
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程下bufferedwriter若不关闭并不能记下所有log相关的知识,希望对你有一定的参考价值。
问题
一个很简单的多线程修改文件夹中特定文件名的程序。用bufferedwriter把待修改的文件名(包括完整地址)都记在Log里,以做检查之用。
发现如果不在最后关闭bw的话,每个文件夹只能写上最后一个文件的名字。即使bw.flush()也没有什么帮助。\\
package SamplePackage; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; public class WebdriverDemo { public static void main(String[] args) { String path = "C:\\\\Users\\\\XXX\\\\Desktop\\\\temp"; String logPath = "C:\\\\Users\\\\XXX\\\\Desktop\\\\temp\\\\log.txt"; reviseName(path,logPath); } public static void reviseName(String path, String logPath) { File dir = new File(path); File log = new File(logPath); BufferedWriter bw=null; try { bw = new BufferedWriter(new FileWriter(log,true)); } catch (Exception e) { e.printStackTrace(); } if(dir.exists()) { File[] subFile = dir.listFiles(); for(File file:subFile) { if(file.isDirectory()) { String subpath = file.getAbsolutePath(); new Thread(new Runnable() { @Override public void run() { reviseName(subpath,logPath); } }).start(); } else{ String name = file.getName(); String parentPath = file.getAbsolutePath(); if(name.startsWith("Abc")){ try { bw.flush(); bw.write(parentPath); bw.newLine(); } catch(Exception e) { e.printStackTrace(); } file.renameTo(new File(parentPath.replace("Abc","AAA"))); } } } try { if(bw!=null) { bw.close(); } } catch(Exception e) { e.printStackTrace(); } } } }
以上是关于多线程下bufferedwriter若不关闭并不能记下所有log的主要内容,如果未能解决你的问题,请参考以下文章
socket java实现客户端多线程接受消息并发送消息给服务器,并发执行
BufferedWriter不能把数据发送出去,flush()也用了,只要不调用close()数据就发不出去,调用立马发送出去