我正在开发一个模拟文件存储库的项目,因此我正在使用大量的文件操作。我正在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中读过,如果文件对象不代表目录(我很确定这不是问题)或“普通”文件,就会发生这种情况......我没有发现,是什么一个不正常的文件,但如果一个简单的文本文件不正常,那么是什么?
答案 0 :(得分:4)
每当有一个问题,比如“java找不到文件......我知道它就在那里!”,不是,因为:
JVM的当前目录不是你想象的那样。
最快的调试方法是:
System.out.println(file.getAbsolutePath());
你很快就会明白为什么java“无法找到”该文件。