Java 6 file.exists()和file.isFile()无法解释地失败

时间:2013-10-16 22:16:06

标签: java file-io

我正在开发一个模拟文件存储库的项目,因此我正在使用大量的文件操作。我正在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的文件的相对路径(我在文件系统上直接创建了这个非常标准的文本文件)。

现在首先,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() - 检查失败了!我在javadoc中读过,如果文件对象不代表目录(我很确定这不是问题)或“普通”文件,就会发生这种情况......我没有发现,是什么一个不正常的文件,但如果一个简单的文本文件不正常,那么是什么?

1 个答案:

答案 0 :(得分:4)

每当有一个问题,比如“java找不到文件......我知道它就在那里!”,不是,因为:

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

最快的调试方法是:

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

你很快就会明白为什么java“无法找到”该文件。