Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在Java中会出现未报告的异常错误_Java_Exception_File Io_Compiler Errors_Try Catch - Fatal编程技术网

为什么在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<

我试图将一个文本文件加载到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<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...
          }
      }