当前位置: 首页 > 面试题库 >

未报告的异常Java

何骞尧
2023-03-14
问题内容

我收到了一个未报告的异常;必须在下面的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();
}

问题答案:

您的fillDatacall buffer.readLine(),它被声明为throw
IOException,但是您既没有捕获witin异常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+中,您可以使用Files.newBufferedReader默认为UTF-8的版本。

另外:

  • read声明抛出异常Exception通常是一个坏主意;只抛出特定的异常
  • 捕获Exceptionread是一个坏主意; 只捕获特定的异常
  • read失败后继续执行操作是个坏主意- in为空,此后立即导致失败
  • 有一个名为fileNametype 的参数是非常奇怪的int。碰巧的是,您无论如何都没有使用它-这有什么意义?

基本上, 所有 异常处理和资源管理都需要大量工作。



 类似资料:
  • 问题内容: 在学习Java时,我经常会偶然发现此错误。它是这样的: 只是一个例子,我见过很多不同的例子。在这种情况下,导致错误的代码是: 一旦将语句放入块中,错误总是消失并且代码编译并成功运行。有时对我来说已经足够了,但有时却不行。 首先,我从中学习的示例并不总是使用,但是显然应该可以使用。 更重要的是,有时当我将整个代码放在中时,它根本无法工作。例如在这种情况下,我需要; 在区块中;但如果上述本

  • 问题内容: 我想打开一个文件并对其进行扫描以打印其令牌,但出现错误:未报告的异常java.io.FileNotFoundException; 必须被捕获或声明为抛出Scanner stdin = new Scanner(file1);该文件与正确的名称位于同一文件夹中。 问题答案: 您正在使用的构造函数将引发FileNotFoundException,您必须在编译时捕获该异常。 上面的表示法(在括

  • 然而,试图使用jsp与bean交互时,在运行它时会出现一些错误。 下面是我在浏览器中看到的错误 生成的servlet错误:[javac]c:\sun\appservernew\domains\domain1\Generated\jsp\j2ee-apps\converterapp\war-ic_war\org\apache\jsp\index_jsp.java:24:未报告的异常javax.ejb

  • 我试图找出为什么在<代码>中会发生特定行为。orElseThrow在Java流中。此代码块 导致此错误:

  • 问题内容: 请问为什么第13行中的错误是未报告的异常,必须在声明声明为pr的情况下将其捕获 问题答案: 您需要向引发异常的方法中添加一个,如上所述,以及调用该方法的所有方法

  • 你好,我试图在NetBeans7 IDE,java6,glassFish3.2环境中生成动态报告。我正在使用java创建项目 commons-collections-3.2.1 commons-digester-2.0 dynamicreports-1.3.0 dynamicreports-adhoc-4.0.1 dynamicreports-core-4.0.1 itext-2.1.7 jasp