我遇到了一个问题,即用Java编写的归档模块无法清理通过smb共享的文件(如果在清理过程中由网络用户打开)。下面是对文件的清理代码的简化版本:Java删除文件unix方式(unlink header)
private static boolean moveFile(String sourceFilePath, String targetFilePath) {
boolean fileStatus = false;
File sourceFile = new File(sourceFilePath);
File targetFile = new File(targetFilePath);
if(sourceFile.canRead() && sourceFile.canWrite()) {
if(targetFile.exists()) {
fileStatus = (new File(targetFilePath)).delete();
if(!fileStatus) {
Logger.ERROR("Target deletion failed");
}
}
fileStatus = sourceFile.renameTo(new File(targetFilePath));
if(!fileStatus) {
Logger.ERROR("RenameTo method failed");
return false;
} else {
Logger.INFO("Move succeeded");
return true;
}
} else {
Logger.ERROR("Cannot read file");
return false;
}
}
它的工作原理,当我在两个ftp会话测试罚款: 会议答:
cat -v /dev/zero > sourceFile.txt
会议B:
java -jar JavaUnixFileRemovalTest.jar sourceFile.txt targetFile.txt
但是在使用网络共享和用户时生产失败。
我想实现的是将文件复制到存档文件夹并取消链接标题。这样,如果用户仍然打开文件,他将继续访问内容,而名称从文件系统中删除,以便其他人无法看到该文件。
所以现在的问题是,如果有一种方法,通过本地Java取消链接文件头中的Unix指没有显式调用unlink
命令
你为什么叫'新文件(targetFilePath)'三次? – EJP
是的,我知道。这是一种原始代码的复制粘贴,与前一个团队很早以前编写的代码相同。我还没做过任何重构。相信我,这不是代码中最糟糕的部分 –