[英]Unreported exception java
我收到了一個未報告的異常; 必須在下面的fill方法中被捕獲或聲明為拋出錯誤。 從我讀過的類似文章中,我認為錯誤是由read方法引發Exception引起的,但我無法修復。
public void read(int fileName) throws Exception
{
FileInputStream in = null;
try
{
Scanner in = new Scanner("dataset.txt");
File inFile = new File(in.nextLine());
in = new FileInputStream(inFile);
}
catch ( Exception e)
{
System.out.println(e);
}
BufferedReader buf = new BufferedReader(new InputStreamReader(in) );
String input;
input = buf.readLine();
fill(input,buf);
}
填充定義為:
public void fill(String in,BufferedReader buf)
{
StringTokenizer token = new StringTokenizer(input);
no = token.countTokens();
constraints = new Vector[noOfAttributes];
for (int i=0; i < no; i++)
{
c[i] = new Vector();
names = new String[noOfAttributes];
}
for (int i=0; i < no; i++)
{
names[i] = token.nextToken();
}
while((in = buf.readLine()) != null) //<----error given here
{
token = new StringTokenizer(input);
Train example = new Train(no);
}
buffer.close();
}
你fillData
調用buffer.readLine()
這是宣布拋出IOException
-但你沒有捕獲異常witin fillData
,也沒有聲明它可能拋出。
最簡單的解決方法是將fillData
的簽名fillData
為:
public void fillData(String input, BufferedReader buffer) throws IOException
我也強烈建議不要在fillData
關閉閱讀器。 通常,獲取資源的相同代碼應負責關閉資源。 try-with-resources語句在這里最合適,因此read
:
try (BufferedReader buffer = new BufferedReader(new InputStreamReader(in))) {
String input = buffer.readLine();
fillData(input,buffer);
}
但是,即使這樣也不是理想的-因為您早先打開了輸入流。 我還建議始終將編碼傳遞給InputStreamReader
構造函數,否則它將使用平台默認編碼。 在Java 7+中,您可以使用默認為UTF-8的Files.newBufferedReader
。
另外:
read
聲明它拋出Exception
方法通常不是一個好主意; 只拋出特定的異常 read
捕獲Exception
是一個壞主意。 只捕獲特定的異常 read
失敗后是一個壞主意- in
將是無效的,導致故障隨即 int
類型的fileName
的參數非常奇怪。 碰巧的是,您無論如何都沒有使用它-這有什么意義? 基本上, 所有異常處理和資源管理都需要大量工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.