我有一个xml文件,我正在获取它的完整路径,并将它传递给一个函数,在该函数中,我将String
添加到它的名称中。然而,在添加字符串后,我无法使用它(初始完整路径)。怎么可能呢,在search(String dirName)
中获得完整路径,并在lk(String fullpath)
中添加字符串之后,我仍然可以使用search(String dirName)
返回的路径。
public String search( String dirName)throws Exception{
String fullPath = null;
File dir = new File(dirName);
if ( dir.isDirectory() )
{
String[] list = dir.list(new FilenameFilter()
{
@Override
public boolean accept(File f, String s )
{
return s.endsWith(".xml");
}
});
if ( list.length > 0 )
{
fullPath = dirName+list[0];
lockFile(fullPath);
return fullPath;
}
}
return "";
}
public void lk( String fullPath) throws Exception {
File f = new File(fullPath);
String fileNameWithExt = f.getName();
try {
File newfile =new File(fileNameWithExt+".lock");
if(f.renameTo(newfile)){
System.out.println("Rename succesful");
}else{
System.out.println("Rename failed");
}
} catch (Exception e) {
e.printStackTrace();
}
}
尝试这个
File originalFile = new File(<file parent path>, "myxmlfile");
File cloneFile = new File(originalFile.getParent(),
originalFile.getName()+"<anything_i_want_to_add>");
Files.copy(originalFile.toPath(),cloneFile.toPath());
//now your new file exist and you can use it
originalFile.delete();//you delete the original file
...
//after you are done with everything and you want the path back
Files.copy(cloneFile.toPath(),originalFile.toPath());
cloneFile.delete();
在您的锁方法中,您正在调用renameTo
方法。因此,原始文件名现在不见了,取而代之的是以.lock.结尾的新文件名
java.io.File
类不是文件指针,而是用于保存文件名的对象。使用仍然引用旧文件名的文件对象将导致错误。
回答你的问题:如果你想在锁定后使用旧文件名,你必须使用不同的方法来锁定你的文件。例如,MS Access通过创建与打开的.accdb文件具有相同文件名的锁定文件来锁定其.accdb件。
您可以使用此代码作为参考:
public boolean fileIsLocked(File file) {
File lock = new File(file.getAbsolutePath() + ".lock");
return lock.exists();
}
public void lockFile(File file) {
if (!fileIsLocked(file)) {
File lock = new File(file.getAbsolutePath() + ".lock");
lock.createNewFile();
lock.deleteOnExit(); // unlocks file on JVM exit
}
}
public void unlockFile(File file) {
if (fileIsLocked(file)) {
File lock = new File(file.getAbsolutePath() + ".lock");
lock.delete();
}
}