为什么在Java中会出现未报告的异常错误
我试图将一个文本文件加载到java中,以将每个单词存储在单词的数组列表中。(这是我创建的一个可以正常工作的对象为什么在Java中会出现未报告的异常错误,java,exception,file-io,compiler-errors,try-catch,Java,Exception,File Io,Compiler Errors,Try Catch,我试图将一个文本文件加载到java中,以将每个单词存储在单词的数组列表中。(这是我创建的一个可以正常工作的对象 import java.util.*; import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.BufferedReader; import java.io.InputStreamReader; public class txtUtils { public 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;
}
}
这是为线路显示的,
FileInputStream in=新的FileInputStream(文件)
文件显然在那里,甚至已经添加到我的类路径中,所以我不明白为什么它一直抛出这个异常。有没有方法覆盖它?如果没有,有没有其他方法将文本文件加载到java中?没有抛出异常,它告诉您需要将代码放入
try catch
块或h中让函数抛出异常
编辑:投票结果是-1票,但没有解释遗漏了什么,或者完全不正确,因此无法证明这一点。public ArrayList readFromText(ArrayList Words)抛出FileNotFoundException
public ArrayList<Word> readFromText(ArrayList<Word> Words) throws FileNotFoundException
称为“声明”异常。该方法声明可以引发此异常
在这种情况下,声明它比执行try
/catch
更好。这是因为您的类处于较低级别,而较高级别的类(例如使用此类的类)更适合try
/catch
一般而言,见:
- 您的问题不是在运行时发生的,而是在编译时发生的。编译器正在警告您,因为它不知道如果没有文件该怎么办
在java中,可以捕获或抛出异常。要捕获异常,请在代码中使用如下语句:
try
{
FileInputStream in = new FileInputStream(file);
}
catch(FileNotFoundException e)
{
e.printStackTrace();
}
这将允许您的代码即使抛出异常也能继续工作,并且e.printStackTrace()
行将打印出有关异常的信息
或者,您可以通过向方法头添加throws
声明来引发异常,如下所示:public ArrayList readFromText(ArrayList Words)throws FileNotFoundException
然后抛出异常。这意味着异常将在编译时被忽略,并被推到下一层。问题是,当有人最终使用您的txtutils类时,他们还必须捕获或抛出异常。这里您得到一个编译错误。这是因为您调用了一些f可能在运行时抛出异常的函数,但您没有采取任何预防措施来处理它。Java不会对所有类型的异常都这样做
public ArrayList<Word> readFromText(ArrayList<Word> Words) throws Exception
{
// method logic goes here
}
下面是对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...
}
}
public ArrayList readFromText(ArrayList单词)
{
试一试{
String file=“corpus.txt”;
FileInputStream in=新的FileInputStream(文件);
BufferedReader br=新的BufferedReader(新的InputStreamReader(in));
//其他程序逻辑。。。
in.close();
返回单词;
}捕获(例外e){
//如果发生错误,请采取措施。。。
返回null;//或空的ArrayList。。。
}
}
有关处理异常的更多信息,请参阅此
另一种方法是将方法声明为抛出异常的方法
public ArrayList<Word> readFromText(ArrayList<Word> Words) throws Exception
{
// method logic goes here
}
public ArrayList readFromText(ArrayList Words)引发异常
{
//方法逻辑在这里
}
但是,如果您这样做,那么无论调用此方法的方法是什么,也应该像这样声明,或者它们应该在try-catch块中处理异常。您对异常有什么不了解?仔细阅读它,然后搜索它。这是异常(带有堆栈跟踪)还是编译器错误消息?“所以我不明白为什么它总是抛出这个异常"它并没有抛出那个异常,但编译器告诉您它可能在运行时抛出。似乎OP在理解java中异常是如何工作的方面有点困难,所以某种更具体的帮助或有用的链接可能会很好。但这并不能证明投反对票是正确的,因为我提供的信息是准确的e、 在不投票的情况下采取适当的行动。这几乎不是误导性的信息,是吗?我猜,这里有一个人回答并否决了其他人。
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...
}
}