我有一个java程序,除其他外,它写入一个带时间戳(SimpleDateFormat(“yyyyMMdd_HHmm”))日志文件。每次运行程序时,它都会将当前文件夹中的所有日志文件移动到另一个文件夹,同时写入新的日志文件。
我的(次要)问题是,除了旧的日志文件之外,它还会尝试移动我当前正在写入的日志文件,该文件在异常中被捕获,然后继续执行该程序的其余部分。这不会影响程序的职责,因为它会跳过此尝试,但是这个异常确实显示在日志文件中,这实际上不是人们想要的。
有没有办法复制一种类型的文件,同时忽略当前正在写入的文件?
代码:
try {
...
Path logDir = FileSystems.getDefault().getPath( logTrim );
String tempLogDir = logTrim + "\\" + logDirName1 + "\\" + logDirName2 + "\\";
DirectoryStream<Path> logStream = Files.newDirectoryStream( logDir, "lol*log" );
for (Path path : logStream) {
Path logDir2 = FileSystems.getDefault().getPath( tempLogDir + "\\" + path.getFileName().toString() );
Files.move(path, logDir2, StandardCopyOption.REPLACE_EXISTING);
logger.log(Level.INFO, path.getFileName() + " moved to " + logDirName1 + "\n");
}
logStream.close();
}
catch (Exception e) {
...
}
我不喜欢的错误:
java.nio.file.FileSystemException: \\..\..\lol20150320_1522.log -> \\..\..\lol20150320_1522.log: The process cannot access the file because it is being used by another process.
非常感谢所有人
答案 0 :(得分:0)
如果我说得对,一个解决方案是重命名您正在编写的日志文件,并检查您正在移动的文件的名称。另一种选择是检查文件名中的时间信息(如果它是旧的日志文件)。最后但并非最不重要的一点是,在你的循环中没有任何异常处理的情况下使用catch块。