2015-10-06 106 views
0

我無法理解爲什麼我無法讓掃描儀讀取我的.txt文件。最後,我採取了將數據作爲字符串存儲在我的程序中。但我仍然想知道爲什麼Scanner沒有看到這個文件。無法讓掃描儀查看文件

Scanner scan = new Scanner(new File("Test.txt")); 

我也試過:

Scanner scan = new Scanner(new File("C:/Users/myusername/Desktop/Test.txt")); 

兩個結果FileNotFoundException異常被拋出。

該文本文件位於類文件和源文件所在的同一目錄中。

有誰知道什麼是錯?

好吧,這真的很糟糕。我只是不知道爲什麼會發生這種情況。我知道這個文件存在。

System.out.println(System.getProperty("user.dir")); 

顯示我所在的目錄是正確的。

其他人有什麼想法?

+1

你確定這個文件真的存在嗎?你能打開一個資源管理器並在路徑中轉儲嗎? –

+0

在第一種情況下,文件需要位於當前目錄中,而不一定是「類文件和源文件所在的目錄」。在第二種情況下,你必須弄錯文件名。 – EJP

+0

正如@Tim正確指出的那樣,路徑是無效的。Windows路徑應該包含反斜槓 – 2015-10-06 04:17:54

回答

-1

剝離下來的問題,只有文件開始:或者你也可以嘗試這個

File myFile = new File("Test.txt"); 
myFile.exists(); 
myFile.canRead(); 
... 

然後繼續分析該文件的路徑:

myFile().getCanonicalPath(); 
... 

如果java進程能夠訪問該文件,則掃描程序不會有任何問題。

如果這不會導致任何地方,我們將需要更多的信息:哪個版本的Java?你如何開始Java過程?

+0

調用布爾方法並忽略它們的返回值究竟是什麼? – EJP

+0

這只是J'Zargo爲了追蹤這個問題應該怎麼做的一個提示 - 應該已經足夠明顯了(並且對於J'Zargo來說,事實上......) – Torgeist

+0

您還沒有回答該問題我問。這並不能解答這個問題。它應該作爲評論發佈。 – EJP

0

檢查您嘗試訪問的文件是否爲read-only。如果是read-only則取消選中它。通過省略掃描儀

FileInputStream fis=new FileInputStream(new File("C:/Users/myusername/Desktop/Test.txt")); 
Scanner scan=new Scanner(fis); 
+1

對於純文本文件,我不認爲權限會成爲問題,除非他明確地修改它們。順便說一下,我並沒有讓你失望,它是@EJP。 –

+0

爲什麼?他只是試圖從中讀取它。爲什麼只讀權限會阻止閱讀?您提出的代碼更改也不會產生任何影響。 – EJP

+0

它有時可能會在讀取時引發異常[請參閱此處](http://docs.oracle.com/javase/7/docs/api/java/io/FileNotFoundException.html) – jcool

-1

好吧,我修好了。看來Torgeist是對的。它確實有助於消除這個問題。使用exists()canRead()是非常有用的,因爲它們返回false。即使我複製並粘貼,我在進入的確切文件路徑中一定有錯誤。奇怪......只有其他可能的解釋是,某些東西阻止了對桌面的訪問,但這似乎不太可能。

使用逃逸的反斜槓或正斜槓沒有區別。

File file = new File("C:/Users/UserName/Documents/Testing.txt"); 

File file = new File("C:\\Users\\OCB\\Documents\\Testing.txt"); 

都工作。

+0

你修好了嗎?如果你不提供解決方案,這不是一個答案。 – EJP