当前位置: 首页 > 知识库问答 >
问题:

异常IOException从不在相应try语句的正文中抛出

麹高义
2023-03-14

我不是太笨,不会意识到“try catch”中的代码不能抛出异常。但是我被困在这里,因为我完全从书中复制了代码,所以它在出版时肯定是正确的。这让我想知道代码是否不能再编译了,因为它已经过时了?我意识到这个问题的性质可能会冒犯在座的一些人。如果是的话,请不要在严厉的斥责中过于严厉。

我得到了一个错误:

./streamcopier.java:13:错误:异常IOException从不在相应try语句的正文中抛出}catch(IOException e){system.err.println(e);}

//FileTyper.java
//Reads filenames from the command line and copies named files onto System.out.

import java.io.*;

public class FileTyper  {

  public static void main (String[] args)  {

    if (args.length == 0)  {
      System.err.print("usage: java FileTyper file1, file2");
      return;
    }

    for (int i = 0 ; i < args.length ; i++)  {
      try  {
        typeFile(args[i]);
        if (i+1 < args.length)  {    //more files waiting to be processed
          System.out.println();
          System.out.println("********************************************");
        }
      } catch (IOException e) {System.err.println(e);}
    } //end for

  } //end main()

  public static void typeFile (String filename) throws IOException  {

    FileInputStream fin = new FileInputStream(filename);
    StreamCopier.copy(fin, System.out);
    fin.close();
  }
}


//StreamCopier.java
//hard to know what this program does exactly

import java.io.*;

public class StreamCopier  {

  public static void main (String[] args)  {

    try  {

    } catch (IOException e) {System.err.println(e);}

  }

  public static void copy (InputStream in, OutputStream out) throws IOException  {

    //do not allow other threads to read from the  input or
    //write to the output while copying is taking place.
    synchronized (in)  {
      synchronized (out)  {
        byte [] buffer = new byte [256];
        while (true) {
          int bytesRead = in.read(buffer);
          if (bytesRead == -1) break;
          out.write(buffer, 0, bytesRead);
        }
      }
    }

  }  //end copy()

} 

共有1个答案

濮阳和泰
2023-03-14

该错误是由于StreamCopier.java的main方法中的try{}catch{}块为空。删除空的try{}catch{}块,然后尝试。应该管用。

public static void main (String[] args)  {
            try  {


            } catch (IOException e) {System.err.println(e);} // here is the problem
}
 类似资料:
  • 我已经看到过一个类似的问题,但是我还没有找到一个解决方案,因为在我的例子中,放入try子句的函数实际上会引发一个异常。 在my try块中,psv main调用方法,该方法打印2并引发名为myexc3的异常。然后,这个异常应该由处理,它应该打印3等等。但代码实际上并不编译: 异常MyExc3从不在相应try语句的正文中抛出 这是为什么?

  • 在我更好地学习Java的过程中,我一直试图理解异常处理。我不明白为什么下面的代码不能编译。 编译器消息为:

  • 执行此代码时,我收到以下错误: JSONException 从不在相应的 try/catch body 语句中抛出。 你能解释一下为什么抛出这个异常吗?语法在我看来还行。

  • 这是我的堆栈代码的数组实现: 这是OverFlowException类: 当我运行这个编译器时给出错误“exception OverFlowException is never thrown in body of response try statement” 然后我意识到我没有包含检查数组是否为isFull()的部分。 我的问题是我在ArrayStack2类中有isFull()方法,以及如何从O

  • 问题内容: 我在Java中进行异常处理时遇到问题,这是我的代码。尝试运行以下行时出现编译器错误:。错误是: 永远不会在相应的try语句的主体中引发MojException异常 这是代码: 这是MojException的代码: 谁能帮我这个? 问题答案: try语句中的catch块需要 精确 捕获-block 内的代码 可能 抛出的异常(或该异常的超类)。 您想做的是这样的: 这将导致编译器错误,因

  • 正如您所看到的,我正在方法和构造函数的子句中声明。但我不会在身体的任何地方抛出这个例外。因此,它应该是一个编译时错误,就像我们试图捕获不是从try块抛出的异常一样。但在这种情况下,它编译得很好。有人能解释一下这种行为背后的原因吗?