file.exists()意外返回false

时间:2012-06-26 16:16:45

标签: java linux

所以我有这样的事情:

File testFile = new File("/opt/tester/etc/test.properties");
if(!testFile.exists()){
   System.exit(0) }

它总是退出,看着调试器我看到文件是用“path”属性“\ opt \ tester \ etc \ test.properties”创建的,'prefixLength'是1

该文件存在于系统上,我可以在其上执行'ls'和'file'命令,它工作正常, 在阅读权限等时,我将文件的属性更改为:

-rw-rw-rw-. 1 root root 475 Jun 18 14:11 /opt/tester/etc/test.properties

之前:

 -rw-------. 1 user1 user1 475 Jun 18 14:11 /opt/tester/etc/test.properties

(我的java类以root身份运行,路径上没有符号链接)

为什么会发生这种情况的任何想法? 谢谢。

UPDATE:刚刚在同一个目录上创建了一个'test'文件,用'nano'添加了一个单词,但仍然无效..所以我猜文件还可以,还有别的

更新2:我的书籍尚未解析..我认为它与我设置的路径有关/并且在查看调试器时它存储为\。但是当没有通过调试器运行时运行正常。所以,我认为这是由我的环境造成的(在Linux上运行的代码由在Windows 7上运行的Mule Studio 1.0.0(基于eclipse 3.6.1)进行远程调试)。

更新3:读取一些内容,说VM上的32位调试器和客户端的64位调试器可能与毛刺有关..所以我把所有内容都移到我的本地机器上,现在是调试很好。

4 个答案:

答案 0 :(得分:0)

我的愚蠢,我正在远程调试!!所以我认为eclipse正在我的系统而不是远程机器上寻找文件。 (第一次使用远程调试)

(这不是正确的答案,因为我刚学会了远程调试不应该干扰这一点)

答案 1 :(得分:0)

我怀疑您因if括号中未包含{}条件而导致错误。如果没有大括号,如果ifSystem.exit(0)之间有任何行,则将始终调用退出(因为它不是if子句的一部分)。

答案 2 :(得分:0)

我知道这可能看起来很幼稚,但你仍然可以试试这段代码,因为它对我有用......

要在磁盘上写入文件:

try {
    File f = new File("path_of_file"); 
    FileWriter fw = new FileWriter(f);
    BufferedWriter bw = new BufferedWriter(fw);
    bw.write("Hello");
    bw.close();
    fw.close();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

此代码检查指定位置的文件是否存在:

File f = new File("path_of_file");
if(f.exists()){
    System.out.println("success");
}
else{
    System.out.println("fail");
}

答案 3 :(得分:0)

您在评论中表示它在Windows上运行良好。这显然是用户权限错误。 在终端仿真程序中尝试此命令

sudo chmod 777 /path_to_file

有关命令here的更多信息。

它将绕过任何用户访问权限错误。

然后,再次尝试运行Kumar Vivek Mitra代码。