我正在尝试将文本文件加载到java中,以便将每个单词存储在单词的ArrayList中。 (这是我创建的一个没有问题的对象。
import java.util.*;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class txtUtils
{
public ArrayList<Word> readFromText(ArrayList<Word> Words)
{
String file = "corpus.txt";
FileInputStream in = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null) {
for (int j = 0; j < strLine.length(); j++){
{
strLine = br.readLine();
int start = 0;
for(int x= start; x < strLine.length(); x++)
{
if(strLine.charAt(x)== ' ' || strLine.charAt(x) == '.')
{
Words.add(new Word((strLine.substring(start,x- 1)).toUpperCase()));
start = x;
}
}
}
}
}
in.close();
return Words;
}
}
编译时,我收到此错误。
unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown
显示为该行, FileInputStream in = new FileInputStream(file);
文件显然在那里,甚至已经添加到我的类路径中,所以我不明白为什么它继续抛出这个异常。有没有办法覆盖它?如果没有,还有其他方法可以将文本文件加载到java中吗?
答案 0 :(得分:1)
异常没有被抛出,它告诉你需要将代码放在try-catch
块中或让你的函数抛出异常。
编辑:所以有一个-1投票,但没有解释什么是缺失或完全不正确,以证明它的合理性。
答案 1 :(得分:1)
public ArrayList<Word> readFromText(ArrayList<Word> Words) throws FileNotFoundException
被称为'声明'例外。该方法声明可能抛出此异常。
在这种情况下宣布它比在try
/ catch
更好。这是因为您的班级处于较低级别,而较高级别的班级(例如使用此班级的班级)更适合try
/ catch
。
更一般地说,请参阅:
答案 2 :(得分:0)
您的问题不会在运行时发生,而是在编译时发生。编译器警告你,因为它不知道如果没有文件该怎么做。
在java中,可以捕获或抛出异常。要捕获异常,请在代码周围使用这样的语句:
try
{
FileInputStream in = new FileInputStream(file);
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
即使抛出异常,这也将允许您的代码继续工作,e.printStackTrace()
行将打印出有关异常的信息。
Alternativley,您可以通过向方法标题添加throws
声明来抛出异常,如下所示:public ArrayList<Word> readFromText(ArrayList<Word> Words) throws FileNotFoundException
然后抛出异常。这意味着在编译时将忽略该异常,并将其推送到下一层。问题是当有人最终使用你的txtutils类时,他们还必须捕获或抛出异常。
答案 3 :(得分:0)
这里出现编译错误。这是因为您正在调用某些可能在运行时抛出异常的函数,但您没有采取任何预防措施来处理它。 Java不会对所有类型的异常执行此操作。
这是对java中所谓的已检查和未经检查的异常的一个很好的解释。
Checked vs Unchecked Exceptions in Java
在您的情况下,您可以通过两种方式克服此问题。
一种方法是将语句括在try-catch块周围。
public ArrayList<Word> readFromText(ArrayList<Word> Words)
{
try{
String file = "corpus.txt";
FileInputStream in = new FileInputStream(file);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
// other program logic...
in.close();
return Words;
}catch(Exception e){
// do something if error occurs...
return null; // or an empty ArrayList...
}
}
有关处理异常的更多信息,请参阅此内容。
Catching and Handling Exceptions
另一种方法是将方法声明为抛出异常的方法。
public ArrayList<Word> readFromText(ArrayList<Word> Words) throws Exception
{
// method logic goes here
}
但是,如果你这样做,那么无论调用这个方法的方法也应该像这样声明,或者他们应该在try-catch块中处理异常。