2013-07-16 26 views
2

存在這是當我嘗試在* .txt文件讀一些特定的文本我使用的代碼:檢查文件從字符串

public void readFromFile(String filename, JTable table) { 

     BufferedReader bufferedReader = null; 

     try { 
      bufferedReader = new BufferedReader(new FileReader(filename)); 
      String a,b,c,d; 
      for(int i=0; i<3; i++) 
      { 
       a = bufferedReader.readLine(); 
       b = bufferedReader.readLine(); 
       c = bufferedReader.readLine(); 
       d = bufferedReader.readLine(); 
       table.setValueAt(a, i, 0); 
       table.setValueAt(b, i, 1); 
       table.setValueAt(c, i, 2); 
       table.setValueAt(d, i, 3); 
      } 

     } catch (FileNotFoundException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } finally { 
      //Close the reader 
      try { 
       if (bufferedReader != null) { 
        bufferedReader.close(); 
       } 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 

,它被稱爲這種方式:

readFromFile("C:/data/datafile.txt", table1) 

問題是以下幾點:第一次打開程序* .txt文件我要讀取的內容不存在,所以我想我可以使用函數exists()。我不知道該怎麼辦的想法,但我想這一點:

if(("C:/data/datafile.txt").exists()) { 
readFromFile("C:/data/datafile.txt", table1) 
} 

它不工作,因爲NetBeans的給了我很多的錯誤。我怎麼能解決這個問題?

+0

既然這樣,你可以簡單地從FileNotFoundException異常異常處理程序返回。 – Ingo

回答

19

String沒有名爲exists()的方法(即使它沒有做到你所要求的),這將成爲IDE報告錯誤的原因。

創建的File一個實例,並在File實例調用exists()

if (new File("C:/data/datafile.txt").exists()) 
{ 
} 
+0

在大約10秒內毆打我的答案:) –

+0

哦,是的,它的工作。大回答謝謝你隊友 –

+1

@AlbertoRossi如果它對你有用,接受答案隊友。 :) – zEro

3

您可以使用此代碼來檢查文件是否存在

使用java.io.File中

File f = new File(filePathString); 
if(f.exists()) { /* do something */ } 
+0

+1,很好的答案;) –

7

注意:此答案使用的版本不可用s比Java 7.

方法exists()對象字符串不存在。請參閱String documentation瞭解更多信息。如果要檢查文件是否存在於路徑上,應使用PathFiles來驗證文件是否存在。

Path file = Paths.get("C:/data/datafile.txt"); 

if(Files.exists(file)){ 
    //your code here 
} 

一些教程有關Path類:Oracle tutorial
和博客帖子大約How to manipulate files in Java 7

建議爲你的代碼
我都會指向你教程的try-with-resources因爲它可能是對你有用。我也想把你的注意力放在Files#readAllLines上,因爲它可以幫助你減少閱讀操作的代碼。基於這種方法,您可以使用for-each循環在JTable上添加文件的所有行。

+0

+1我沒有意識到這一點(並沒有看到太多的Java 7)。 – hmjd

+0

在Java 7中的文件操作已成爲相當有效的恕我直言。 –

2

你需要給它一個實際的File對象。你在正確的軌道上,但NetBeans(和java,就此而言)不知道'(「C:/data/datafile.txt」)是什麼。

什麼你可能想要做有使用字符串作爲參數,像這樣創建一個java.io.File對象:

File file = new File ("C:/data/datafile.txt"); 
if (file.exists()) { 
    readFromFile("C:/data/datafile.txt", table1); 
} 

而且,你缺失的readFromFile通話結束一個分號。我不確定這是否只是一個錯字,但你也想檢查一下。

如果你知道你永遠只能用這個File對象只是爲了檢查是否存在,你也可以這樣做:

if (new File("C:/data/datafile.txt").exists()) { 
    readFromFile("C:/data/datafile.txt", table1); 
} 
2

如果你想確保你可以從文件中讀取,它甚至可能適合使用:

if(new File("C:/data/datafile.txt").canRead()){ 
    ... 
} 

爲條件,以驗證該文件存在你有足夠的權限從文件中讀取。

Link to canRead() javadoc