0

我正在开发一个模拟文件存储库的项目,因此我使用了很多文件操作。我正在 Windows8 机器上开发它,但它也应该可以移植到其他平台。该项目要求使用 Java 6 编写。考虑以下代码:

public void add(String description, boolean move, String repPath, String filePath) throws Exception {

    ...

    File fileToAdd = new File(filePath);
    if(!fileToAdd.exists()) throw new FileNotFoundException(filePath + " does not exist.");

    ...

    addDataset(description, move, repPath, fileToAdd, parentID);
    ...
}

该参数filePath是一个名为的文件的相对路径move.txt(我直接在文件系统上创建了这个非常标准的文本文件 my-self )。

现在首先,fileToAdd.exists()检查失败(更不用说这段代码在过去几周内不是问题的事实)。但我 100% 确定该文件确实存在于该位置。我打印出绝对路径,这似乎是正确的路径,所以我看不出为什么检查失败......另外,fileToAdd.canRead()失败(我已经测试过这个,因为有时这在我审查过的类似帖子中工作) . 也fileToAdd.getAbsoluteFile().exists()失败了。

为了测试剩下的代码,我暂时把这行删掉了,又发现了一个问题:

private void addDataset(String description, boolean move, String repPath, File datasetToAdd, long parentID) {

if(datasetToAdd.isFile()){

        addFile(description, move, repPath, datasetToAdd, parentID);

    } else {

        ...
    }
}

在第二个片段中,datasetToAdd-File 对象与上面的相同fileToAdd,因此它确实应该是一个文件(即move.txt)。但是datasetToAdd.isFile()-check 失败了!我在 javadoc 中读到,如果文件对象不代表目录(我很确定这不是问题)或“正常”文件,就会发生这种情况......我没有发现,什么一个不正常的文件是,但如果一个简单的文本文件不正常,那是什么?

4

1 回答 1

4

每次出现“java找不到文件......我知道它在那里!”这样的问题时,它都不在那里,因为:

JVM的当前目录不是你想象的那样。

最快的调试方法是:

System.out.println(file.getAbsolutePath());

你很快就会明白为什么java“找不到”这个文件。

于 2013-10-16T22:21:09.837 回答