2015-10-28 78 views
-1

我有一些奇怪的問題,但我希望找到解決辦法。從java中不存在的文本文件讀取?

我在java中創建了一個構造函數,它在創建構造函數類的對象時從文本文件中讀取。

如果這個文件存在,那麼即使它是空的,它也會讀取它的數據。

但我希望解決辦法(文件不存在)的錯誤,因爲這是我的程序崩潰。

這裏是我的代碼:

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.util.*; 

public class Inventory{ 

    public Inventory(){ 

     Scanner x = null; 
     try{ 
      x = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\products.txt")); 
     } 
     catch(Exception e) 
     { 
      System.out.println("No current products."); 
     } 
     while(x.hasNext()) 
     { 
      String a = x.next(); // id 
      String b = x.next(); // product name 
      String c = x.next(); // product type 
      String d = x.next(); // product brand 
      int e = x.nextInt(); // product quantity 
      int f = x.nextInt(); // production day 
      int g = x.nextInt(); // production month 
      int h = x.nextInt(); // production year 
      int i = x.nextInt(); // expiry day 
      int j = x.nextInt(); // expiry month 
      int k = x.nextInt(); // expiry year 
      String l = x.next(); // company name 
      String m = x.next(); // supplier name 
      String n = x.next(); // supplier address 
      String p = x.next(); // supplier phone number 
     } 
    } 
} 

回答

1

看邏輯的代碼中的流動。即使文件/掃描儀行會引發錯誤(即找不到該文件),仍會嘗試讀取該文件。

您正在尋找的解決方案是

Scanner x = null; 
try { 
    x = new Scanner(new File("C:\\Users\\فاطمة\\Downloads\\products.txt")); 

    while(x.hasNext()) { 
     String a = x.next(); // id 
     String b = x.next(); // product name 
     String c = x.next(); // product type 
     String d = x.next(); // product brand 
     int e = x.nextInt(); // product quantity 
     int f = x.nextInt(); // production day 
     int g = x.nextInt(); // production month 
     int h = x.nextInt(); // production year 
     int i = x.nextInt(); // expiry day 
     int j = x.nextInt(); // expiry month 
     int k = x.nextInt(); // expiry year 
     String l = x.next(); // company name 
     String m = x.next(); // supplier name 
     String n = x.next(); // supplier address 
     String p = x.next(); // supplier phone number 
    } 
} catch(Exception e) { 
    System.out.println("No current products."); 
} 

你應該做的,而不是追趕Exception什麼是趕上一個特定的錯誤,如FileNotFoundException或者,如果你想捕獲所有的錯誤,然後把它作爲是的,但我建議你檢查錯誤,並提供更詳細的錯誤使用類似

... 
} catch (Exception e) { 
    if (e instanceof FileNotFoundException) { 
     System.out.println("could not find the file..."); 
    } else { 
     System.out.println("something else went wrong"); 
    } 
} 

安慰記住,如果你的while循環是你try ... catch塊內,引發的錯誤讀取文件的Wi也會被抓到。

趕上多種類型的錯誤,更明確的方式將

... 
} catch (FileNotFoundException e) { 
    System.out.println("file not found"); 
} catch (Exception e) { 
    System.out.println("something else went wrong"); 
} ... 
+0

非常感謝你的兄弟,這是非常有用的:) –

+1

如果它作爲一個解決方案,請接受的解決方案作爲一個答案。 –

+0

是的,當然是最好的解決方案。解決方案接受:) –