簡體   English   中英

file.exists()意外返回false

[英]file.exists() unexpectedly returns false

所以我有這樣的事情:

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

它總是退出,查看調試器,我發現該文件是使用“ \\ opt \\ tester \\ etc \\ test.properties”的“ path”屬性和“ 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用戶身份運行,並且路徑上沒有符號鏈接)

任何想法為什么會這樣? 謝謝。

更新:剛剛在同一目錄上創建了文件“ test”,並在其中添加了“ nano”一詞,但仍然無法正常工作..所以我猜該文件還可以,還有其他問題

更新2:在我的書上未解決。.我認為這與我用/設置的路徑有關,當在調試器上查看時,它存儲為\\。 但是在未通過調試器運行時運行良好。 因此,我認為這是由於我的環境(在Linux上運行的代碼由Windows 7上運行的Mule Studio 1.0.0(基於eclipse 3.6.1進行遠程調試)引起的。

更新3:讀到一些東西說,也許VM上的32位調試器和客戶端中的64位調試器可能與故障有關。.所以我將所有東西都移到了本地機器上,現在調試很好。

我很愚蠢,我在遠程調試! 所以我認為eclipse在我的系統而不是遠程機器上尋找文件。 (第一次使用遠程調試)

(這不是正確的答案,因為我剛剛了解到遠程調試不應對此產生任何干擾)

我懷疑您有一個錯誤,原因是未在{}大括號中包含if條件。 在沒有括號的情況下,如果ifSystem.exit(0)之間有任何一行,則將始終調用出口(因為它不是if子句的一部分)。

我知道這可能看起來很幼稚,但是仍然可以嘗試一下此代碼,因為它對我有用。

要將文件寫入磁盤:

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");
}

您在一條評論中說它可以在Windows上完美運行。 顯然,這是用戶特權錯誤。 在終端仿真器中嘗試此命令

sudo chmod 777 /path_to_file

有關命令的更多信息,請參見

它將繞過任何用戶訪問權限錯誤。

然后,嘗試再次運行Kumar Vivek Mitra的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM