多线程下bufferedwriter若不关闭并不能记下所有log
2021-05-30 21:48 钱先生 阅读(199) 评论(0) 编辑 收藏 举报问题
一个很简单的多线程修改文件夹中特定文件名的程序。用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(); } } } }