我在Mac上编写了代码。我正在创建两个文件,将它们分别命名为file1和file2。对于file1,如果我在SQL中找到比在file1中存储的表更大的记录,则将所有内容写入临时文件,删除file1并将该临时文件重命名为文件1。在Windows和Mac上均可使用。
对于file2,如果在SQL中找到表的时间戳记值大于在file2中存储的时间戳记值,则执行相同的过程。这在我的Mac环境中本地运行,但是在Windows上无法删除和重命名该文件。
但是,当我第一次启动该程序时,由于我的缓冲写入器总是先写入一个临时文件,然后重命名该临时文件,因此,file2的重命名和删除操作在我第一次运行该程序时就起作用了,这意味着file2和file1都不存在。
因此,在启动时,file2不存在。缓冲的编写器将写入tempFile,如果存在则删除file2(在这种情况下不存在),然后将tempFile重命名为file2。这行得通。但是,新数据的后续记录无法删除和重命名file2。但是正如我所说,这在Mac上有效,但在Windows上无效。
用于删除和重命名file1的代码(适用于Windows和Mac):
private void recordMaxRecordIdFromHistory(String table, String maxRecord) {
String line;
try {
File file1 = new File(file1);
File tempFile = new File("tempFile.txt");
FileWriter fw = new FileWriter(tempFile, false);
BufferedWriter bw = new BufferedWriter(fw);
if (!file1.exists()) {
file1.createNewFile();
}
FileReader fr = new FileReader(file1);
BufferedReader br = new BufferedReader(fr);
//writing to temp file
if(){
....
}
else{
....
}
bw.close();
br.close();
if (file1.delete()) {
logger.info("Successfully deleted the max ID file");
} else {
logger.error("Unable to delete the file maxID File");
}
if (tempFile.renameTo(file1)) {
logger.info("Successfully renamed the tempFile to file1");
} else {
logger.error("Unable to rename the tempFile to file1");
}
} catch (Exception ex) {
logger.error(ex.getMessage());
}
}
用于删除和重命名File2的代码(仅在Mac上运行,并且仅在Windows上首次运行程序时可用)
private void recordLastModifiedDate(String table, Timestamp modifiedDate) {
String line;
try {
File file2 = new File(file2);
File tempFile2 = new File("tempFile2.txt");
FileWriter fw = new FileWriter(tempFile2, false);
BufferedWriter bw = new BufferedWriter(fw);
if (!file2.exists()) {
file2.createNewFile();
}
FileReader fr = new FileReader(file2);
BufferedReader br = new BufferedReader(fr);
//WRITING TO FILE HERE
bw.close();
br.close();
if (file2.delete()) {
logger.info("Successfully deleted the lastModified file");
} else {
logger.error("Unable to delete the lastModified file");
}
if (tempFile2.renameTo(file2)) {
logger.info("Successfully renamed the tempFile to lastModified");
} else {
logger.error("Unable to rename the tempFile to lastModified");
}
} catch (Exception ex) {
logger.error(ex.getMessage());
}
}
您不是要关闭FileReader
,而是要关闭BufferedReader
(对作家来说是相同的)。
由于您没有关闭FileReader/FileWriter
(fr.close()
和fw.close()
),因此手柄保持活动状态。
在像MacOS-X这样的类Unix系统上,这不是问题,但是在Windows中,如果程序已经具有打开的句柄(读或写)(Windows锁定文件),则无法删除文件,因此会出现错误。
因此,致电fr.close()
和fw.close()
,您的代码将在Windows上运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句