2017-10-18 217 views
1

爲什麼有這種差異?爲什麼'Files.exists'返回true,但'File.exists'返回false?它只發生在多字節字符的文件名中

Path docDir 

Paths.exists(docDir):true 
docDir.toPath().exists():false 

其他屬性:

Files.isDirectory(docDir)=true 
Files.isExecutable(docDir)=true 
Files.isHidden(docDir)=false 
Files.isReadable(docDir)=true 
Files.isRegularFile(docDir)=false 
Files.isSymbolicLink(docDir)=false 
Files.isWritable(docDir)=true 
Files.notExists(docDir)=false 

不會出現在單字節字符串此問題。

的Linux版本

Linux version 2.6.32-431.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)) 

這個應用程序服務,並使用我的springBoot庫。

使用'nio'進行讀取/寫入沒有問題,但使用'io.File'會導致'FileNotFoundException'。

有什麼我做錯了嗎?

+1

它是一個符號鏈接?你使用的是什麼版本的Java?我似乎無法在'Paths'或'Path'(to'toPath')找到'exist'這個事情 – MadProgrammer

+0

FYI:'java.io'不處理符號鏈接,其中'java.nio'的確如此一個更好的工作) – MadProgrammer

+2

那麼最新的問題是什麼?也因爲你使用的是非常老的linux,並且你的名字看起來像日語,你使用的是「euc-jp」還是「shift-jis」字符代碼?你使用的是什麼文件系統? – ymonad

回答

0

如果你的意思

String fileName = "テスト.txt"; 
    Path docDir = new File ("/tmp/" + fileName).toPath(); 
    System.out.println(Files.exists(docDir)); 
    System.out.println(docDir.toFile().exists()); 

然後工作確定爲我@ CentOS版本6.8(最終)

雖然我記得是這樣的zip文件

+0

沒錯,我很抱歉。它不是'toPath',而是'toFile'。 該目標是日文名稱目錄和PDF文件。 docDir.toFile()。 exists():false –

+0

嘗試將它作爲/ tmp /テスト/テスト.txt,因爲它工作正常 –

相關問題