2012-12-19 90 views
0

即使我在我聲明的確切目錄中有文件,FileNotFound異常仍在引發我的代碼。我也試過...new File("euler8.txt");...沒有成功。我的代碼如下:正在拋出Java Filenotfound異常

 private static void euler8() throws IOException 
{ 
    int current; 
    int largest=0; 
    int c =0; 
    ArrayList<Integer> bar = new ArrayList<Integer>(0); 
    File infile = new File("C:/Users/xxxxxxxx/workspace/Euler1/euler8.txt"); 
    BufferedReader reader = new BufferedReader(
      new InputStreamReader(
      new FileInputStream(infile), 
      Charset.forName("UTF-8"))); 
    try 
    { 
     while((c = reader.read()) != -1) 
     { 
      bar.add(c); 
     } 
    } 
    finally{reader.close();} 
    for(int i=0; i<bar.size(); i++) 
    { 
     current = bar.get(i) * bar.get(i+1) * bar.get(i+2) * bar.get(i+3) * bar.get(i+4); 
     if(largest<current) 
      largest = current; 
    } 
} 

的它是做什麼圖片:

http://img163.imageshack.us/img163/7017/halpbk.png

+1

您是否嘗試過打印文件的絕對路徑,並可能將該輸出與新文件(「。」)的絕對路徑進行比較,以查看路徑中是否出現錯誤?文件名中是否正確? –

+0

嘗試在聲明'infile'後立即添加'System.out.println(infile.exists());'。如果返回false,則文件路徑出現問題 - 繼續返回目錄,直至您成爲true。如果它真的回來...... –

+0

嘗試使用'../ Euler1/euler8.txt'作爲文件路徑。 – Smit

回答

4

除了所有其他建議,您可以檢查您是否遇到此問題(我們已在實驗室中看到過):擴展名爲兩倍的文件。換句話說,請確保您的euler8.txt確實被稱爲,而不是euler8.txt.txt,例如,因爲使用隱藏的擴展名,文件資源管理器將顯示第一個,但最初可能不會讓您覺得奇怪,如果您不記得它是應該隱藏擴展名。

+1

從@James Roberts給出的圖片來看,我認爲你是對的。文件名顯示'euler8.txt',但它應該只顯示'euler8',因爲擴展名在Windows 7中單獨指定。 –

+0

@ JavaNewbie_M107我沒有注意到圖片。這似乎是。讓我們希望OP在這裏檢查。 –

+0

爲了幫助...在我的開發Windows機器上,我關閉了該選項,因爲這個問題經常使用在Windows中重命名文件的簡單方法,但缺少擴展的可見性。 –

2

斜槓做工精細,並且是優選的,因爲它們在任何平臺上運行(相對路徑是不是絕對的好)。確保您的路徑按指定的方式存在,並驗證您是否擁有對通往該文件的目錄的讀取權限。例如,如果您以其他用戶的身份運行您的Java程序,則可能沒有「myuser」文件夾的讀取權限。

1

如果所有的目錄都不存在,那麼這段代碼就不會工作,所以我會假設(希望我是正確的),你有一個錯字,或者缺少一個文件夾。

我平時比較喜歡有一個java.io.File參考父目錄,然後在後續文件的參考用它作爲母公司,即:

File dir = new File("parentDir"); 
File inFile = new File(dir, "fileName"); 

此外,java.io.File有一個exists()方法返回true或false,及其隨後的mkdir(),mkdirs()createNewFile()如果它們實際創建所請求的文件則返回true或false。

也就是說,我將你的代碼修改爲以下代碼,並在我的機器上執行;但我不知道你試圖通過這個來運行什麼數據。

int current; 
    int largest = 0; 
    int c = 0; 
    ArrayList<Integer> bar = new ArrayList<Integer>(0); 
    File dir = new File("C:/Users/myuser/workspace/Euler1"); 
    if(!dir.exists()){ 
     dir.mkdirs(); 
    } 
    File infile = new File(dir, "euler8.txt"); 
    if(!infile.exists()){ 
     infile.createNewFile(); 
    } 
    BufferedReader reader = new BufferedReader(
      new InputStreamReader(
      new FileInputStream(infile), 
      Charset.forName("UTF-8"))); 
    try { 
     while ((c = reader.read()) != -1) { 
      bar.add(c); 
     } 
    } finally { 
     reader.close(); 
    } 
    for (int i = 0; i < bar.size(); i++) { 
     current = bar.get(i) * bar.get(i + 1) * bar.get(i + 2) * bar.get(i + 3) * bar.get(i + 4); 
     if (largest < current) { 
      largest = current; 
     } 
    } 
0

反斜槓是不必要的。我跑這個程序:

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.nio.charset.Charset; 

public class Test { 
    public static void main(String[] args) throws IOException { 
    File infile = new File("C:/Users/pats/workspace/test/euler8.txt"); 
    BufferedReader reader = new BufferedReader(new InputStreamReader(
     new FileInputStream(infile), Charset.forName("UTF-8"))); 
    try { 
     String s; 
     while ((s = reader.readLine()) != null) { 
     System.out.println(s); 
     } 
    } finally { 
     reader.close(); 
    } 
    } 
} 

這是非常相似的,它打印我的文件的內容。

我認爲你需要檢查文件是否存在,並且你有權訪問它。