2014-12-03 91 views
0

我已閱讀其他有關此問題的問題的答案,並嘗試了他們的建議,但沒有成功。在我的計劃,我有這五條線都在陸續:FileNotFoundException即使文件存在

String curDir = System.getProperty("user.dir"); 
    System.out.println(curDir); 

    File f = new File("/home/brian/workspace/Color Sampler/src/Data.txt"); 
    if(f.exists() && !f.isDirectory()) { System.out.println("success"); } 

    Scanner input = new Scanner(new File("/home/brian/workspace/Color Sampler/src/Data.txt")); 

前四行導致輸出:

/home/brian/workspace/Color Sampler 
success 

的文件,據我所知,位於多個地點:

/home/brian/workspace/Color Sampler 
/home/brian/workspace/Color Sampler/src 
/home/brian/workspace/Color Sampler/bin 

儘管如此,我仍然得到例外。我已經用上述三個文件路徑試過了。該文件也沒有打開,因此它應該是可讀的。由於我花了一個多小時在一個簡單的文件名規範上,所以我在這一點上把我的頭髮撕掉了。

這裏的例外:

Exception in thread "AWT-EventQueue-1" java.lang.Error: Unresolved compilation problem: 
Unhandled exception type FileNotFoundException 

at WindowDestroyer.windowOpened(WindowDestroyer.java:46) 
at java.awt.Window.processWindowEvent(Window.java:1972) 
at javax.swing.JFrame.processWindowEvent(JFrame.java:290) 
at java.awt.Window.processEvent(Window.java:1933) 
at java.awt.Component.dispatchEventImpl(Component.java:4649) 
at java.awt.Container.dispatchEventImpl(Container.java:2103) 
at java.awt.Window.dispatchEventImpl(Window.java:2588) 
at java.awt.Component.dispatchEvent(Component.java:4475) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:675) 
at java.awt.EventQueue.access$300(EventQueue.java:96) 
at java.awt.EventQueue$2.run(EventQueue.java:634) 
at java.awt.EventQueue$2.run(EventQueue.java:632) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:108) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:119) 
at java.awt.EventQueue$3.run(EventQueue.java:648) 
at java.awt.EventQueue$3.run(EventQueue.java:646) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:108) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:645) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138) 
+0

你想對文件做什麼? – user432 2014-12-03 15:29:20

+0

Data.txt真的有一個captital D嗎?另外,當您只是創建一個新的文件時,會發生什麼情況,而不是先將它送入掃描儀?你能得到一些文件信息,還是已經失敗了?如果你能顯示你所得到的例外情況,這也會很好。 – SirRichie 2014-12-03 15:32:06

+0

它確實有一個資本D.我修改了我的問題以包括這個觀點。你是什​​麼意思,只是創建一個新的文件?我是Java的新手,對它的file-io非常不熟悉。 – Bobazonski 2014-12-03 15:38:54

回答

0

我認爲,關鍵是你的問題是「未解決的編譯錯誤」。您的項目是在Eclipse中生成的嗎?如果是這樣,根據this discussion,Eclipse可以生成不應編譯的代碼,從而在運行時發生錯誤。

所有打開的操作可能會生成異常。檢查文檔並更正代碼,並用適當的try-catch子句將其包圍。

試試這個:

try { 
Scanner input = new Scanner(new File("/home/brian/workspace/Color Sampler/src/Data.txt")); 
} catch (Exception ex) { 
} 

如果成功,那麼這是方向。

附錄:有關此問題的更多信息,請參見this discussion

-1

你可能沒有足夠的權限訪問該文件。

嘗試先對File對象調用exists(),則應返回true

+0

我試過了,返回true。我修改了我的問題以包含此內容。也許我的電腦試圖惡作劇? – Bobazonski 2014-12-03 15:45:48

3

你的問題是,該文件無法找到,你的問題是,你沒有處理可能FileNotFoundException

要麼改變你的代碼:

try (Scanner input = new Scanner(new File("/home/brian/workspace/Color Sampler/src/Data.txt"))) { 
    // read file and all 
} catch (FileNotFoundException e) { 
    e.printStackTrace(); 
} 

或添加throws子句你的方法:

public void method() throws FileNotFoundException { 

} 
相關問題