2014-08-31 95 views
-1

爲什麼我得到這個代碼中的「必須被捕獲或聲明爲拋出」錯誤?我想要的只是通過將它粘貼到一個新的Java程序中來測試一堆代碼什麼是一堆代碼最簡單的方法?java:未引發異常java.io.FileNotFoundException;必須被捕獲或被宣告爲拋出

import java.io.File; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 

     Scanner sc = new Scanner(new File("C:\\Users\\User\\Selenium\\scrapjv\\interface\\NASDAQlist.txt")); 
     List<String> symbolList = new ArrayList<String>(); 
     while (sc.hasNextLine()) { 
      symbolList.add(sc.nextLine()); 
     } 

     PrintWriter logput = new PrintWriter("C:\\Users\\User\\Selenium\\scrapjv\\interface\\log.txt", "UTF-8"); 
     for (String symb : symbolList) { 
      System.out.println(symb); 
     } 
     logput.close(); 
    } 
} 
+0

[搜索錯誤消息(http://stackoverflow.com/search?q=%22must+be+caught+or+declared+to+be+thrown%22)* *前詢問。 「最簡單」的方法是將'throws Exception'添加到主方法定義中;找到一個相關的[近]重複的細節。 (遺憾的是幾乎每一個副本本身具有同樣貧困的標題一個貧窮的問題。) – user2864740 2014-08-31 22:55:13

+1

啊http://stackoverflow.com/questions/11589302/why-is-throws-exception-necessary-when-calling-a-function似乎更好比大多數和http://stackoverflow.com/questions/4392446/when-to-use-throws-in-a-java-method-declaration?rq=1 – user2864740 2014-08-31 23:00:19

回答

2

一些你調用可以拋出FileNotFoundException的方法,如果沒有找到該文件:

public Scanner(File source) throws FileNotFoundException 
public PrintWriter(String fileName) throws FileNotFoundException 

Java的編譯器檢查,有些拋出的異常 - 那些比的RuntimeException和它的子類等 - - 被捕獲或被宣佈拋出。否則編譯將失敗。這有助於在程序運行之前在編譯時找到一些錯誤。

一種選擇是,聲明你調用函數拋出異常或超:

public static void main(String[] args) throws FileNotFoundException { 

在這種情況下,更好的選擇是,以捕獲異常,並用它做什麼。例如,這裏是你如何能做到這一點的掃描儀()例外:

File inFile = new File("C:\\Users\\User\\Selenium\\scrapjv\\interface\\NASDAQlist.txt"); 
    try { 
     Scanner sc = new Scanner(inFile); 
     List<String> symbolList = new ArrayList<String>(); 
     while (sc.hasNextLine()) { 
      symbolList.add(sc.nextLine()); 
     } 
    } 
    catch (FileNotFoundException e) { 
     System.out.println("Could not find file: " + inFile.getAbsolutePath()); 
    } 
+0

你讀過這個? http://stackoverflow.com/questions/2417485/file-separator-vs-slash-in-paths – 2014-08-31 23:08:12

+0

不錯我是新來的Java,不知道這東西感謝的 – Wicelo 2014-09-01 00:32:59

1

您的兩個Scanner報關行有機會拋出一個例外,它們基本上被執行的代碼之後發生的錯誤(因爲它們有時被稱爲運行時錯誤)。因爲編譯器知道你的代碼可能會使FileNotFoundException發生,所以它需要你catch這個異常。

這是通過將代碼封裝在try-catch塊中完成的。

try { 

    Scanner sc = new Scanner(new File("C:\\Users\\User\\Selenium\\scrapjv\\interface\\NASDAQlist.txt")); 
    List<String> symbolList = new ArrayList<String>(); 
    while (sc.hasNextLine()) { 
     symbolList.add(sc.nextLine()); 
    } 


    PrintWriter logput = new PrintWriter("C:\\Users\\User\\Selenium\\scrapjv\\interface\\log.txt", "UTF-8"); 
    for (String symb : symbolList) { 
     System.out.println(symb); 
    } 
    logput.close(); 


} catch (java.io.FileNotFoundException ex) 
{ 
    ex.printStackTrace(); 
} 
+0

你讀過嗎? http://stackoverflow.com/questions/2417485/file-separator-vs-slash-in-paths – 2014-08-31 23:08:48

相關問題