Java 将字符串添加到文件名并仍然能够使用它

Java 将字符串添加到文件名并仍然能够使用它,java,xml,file,copy,Java,Xml,File,Copy,我有一个xml文件,我正在获取它的完整路径,并将其传递给一个函数,在该函数中,我在其名称中添加了一个字符串。但是,在添加字符串后,我无法使用它(初始完整路径)。在search(String dirName)中获取完整路径,并在lk(String fullpath)中添加字符串后,我仍然可以使用search(String dirName)返回的路径,这是怎么做到的呢 在锁定方法中,您正在调用renameTo方法。因此,原来的文件名现在不见了,取而代之的是以.lock结尾的新文件名 java.io.

我有一个xml文件,我正在获取它的完整路径,并将其传递给一个函数,在该函数中,我在其名称中添加了一个
字符串。但是,在添加字符串后,我无法使用它(初始完整路径)。在
search(String dirName)
中获取完整路径,并在
lk(String fullpath)
中添加字符串后,我仍然可以使用
search(String dirName)
返回的路径,这是怎么做到的呢


在锁定方法中,您正在调用
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();
    }
}
试试这个

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();
File originalFile=新文件(,“myxmlfile”);
File cloneFile=新文件(originalFile.getParent(),
originalFile.getName()+“”);
copy(originalFile.toPath(),cloneFile.toPath());
//现在您的新文件已经存在,您可以使用它了
originalFile.delete()//删除原始文件
...
//当你做完所有的事情,你想要回到那条路
copy(cloneFile.toPath(),originalFile.toPath());
cloneFile.delete();

您可以发布一个示例,说明您的问题中的xml是什么样的吗?search()方法实际上返回的是原始的完整路径,而不是锁定的路径。search()方法实际应该返回什么?找到的文件名或锁定后的文件名?
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();