1
我正在使用log4j在運行時記錄文本文件中的信息。這是tomcat/conf
文件夾移動文件,同時運行正在鎖定文件的tomcat
log4j.additivity.com.ixaris.apps.genericapp.web.filter.HttpAccessFilter=false
log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.file.rollingPolicy = org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.rollingPolicy.FileNamePattern = C:/dev/generic-app/generic-app.%d{yyyy-MM-dd}.log
log4j.appender.file.layout = org.apache.log4j.EnhancedPatternLayout
log4j.appender.file.layout.ConversionPattern = %m%n
log4j.appender.file.Locking=false
此文件被正確保存到我給它的路徑找到了log4j.properties
文件。但是,當創建時,這個文件被tomcat本身立即鎖定。後來,而Tomcat是仍然在運行,我在處理該日誌文件的信息,我需要這個文件移動到另一個文件夾:C:/dev/generic-app/Processed
我使用這個代碼:
read = new BufferedReader(new FileReader(logFiles[i]));
//parse and upload records in file to db
parseLogFile(logFiles[i]);
//move files to processed folder
Files.move(logFiles[i].toPath(), new File(uploadedFolder.getAbsolutePath() + "\\\\" + logFiles[i].getName()).toPath(), StandardCopyOption.REPLACE_EXISTING);
在parseLogFile我確保我做read.close()
釋放文件上的任何流。
但是,這是引發此異常:
ERROR: Problem moving log files to Processed folder.
java.nio.file.FileSystemException: C:\dev\generic-app\generic-app.2014-11-03.log -> C:\dev\generic-app\Processed\generic-app.2014-11-03.log:
The process cannot access the file because it is being used by another process.
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:286)
at java.nio.file.Files.move(Files.java:1345)
at log2db.Log2DB.main(Log2DB.java:90)
我也試圖迫使垃圾收集System.gc()
,但沒有運氣無論是。 有什麼建議嗎?謝謝!
如果tomcat對該文件有鎖定,那麼確實沒有任何事情可以做...... – phantom 2014-11-03 16:13:30
是的我想在這裏找到解決方法..我假設沒有直接的解決方案..我' m不知道爲什麼tomcat甚至鎖定文件,即使我設置鎖定爲false – Bernice 2014-11-03 16:19:37
爲什麼你需要將文件複製到'Processed'? – Stefan 2014-11-03 18:45:10