Java 异常IOException从不在相应的try语句体中抛出

Java 异常IOException从不在相应的try语句体中抛出,java,Java,我不会愚蠢到意识到“try-catch”中的代码不能抛出异常。但是我被困在这里,因为我完全从书中复制了代码,所以它在出版时一定是正确的。这让我怀疑代码是否因为过时而无法编译?我意识到这个问题的本质可能会冒犯这里的一些人。如果是这样的话,请不要太严厉地严厉斥责 我得到一个错误: ./StreamCopier.java:13:error:exception IOException从未在相应的try语句体中抛出 }catch(IOException e){System.err.println(e);}

我不会愚蠢到意识到“try-catch”中的代码不能抛出异常。但是我被困在这里,因为我完全从书中复制了代码,所以它在出版时一定是正确的。这让我怀疑代码是否因为过时而无法编译?我意识到这个问题的本质可能会冒犯这里的一些人。如果是这样的话,请不要太严厉地严厉斥责

我得到一个错误:

./StreamCopier.java:13:error:exception IOException从未在相应的try语句体中抛出 }catch(IOException e){System.err.println(e);}

//FileTyper.java
//从命令行读取文件名,并将命名文件复制到System.out。
导入java.io.*;
公共类文件类型器{
公共静态void main(字符串[]args){
如果(args.length==0){
System.err.print(“用法:java文件类型器file1,file2”);
返回;
}
对于(int i=0;i
错误是因为StreamCopier.java的主方法中的try{}catch{}块为空。删除空的try{}catch{}块,然后重试。它应该会起作用

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


            } catch (IOException e) {System.err.println(e);} // here is the problem
}

try
块为空,显然是因为您尚未编写其中的代码。Java编译器愚蠢地抱怨是否存在
catch
块,并且[它认为]无法抛出异常。这是Java语言令人讨厌的特性之一


只需继续填写
try
块,错误就会消失。您可以插入一个伪
副本(null,null),使编译器关闭。

来自编译器的错误消息是针对StreamCopier.java的。您发布的代码是FileTyper.java。顺便说一句,这个try块可以抛出IOException,因为它调用typeFile(),而typeFile()抛出IOException。Gotchya:这是StreamCopier类:您有一个空的try块,并问自己为什么会出现这个错误?但是,try块在教科书中也是空的。你可以在这个.pdf的第49页看到:@user3814983这个示例看起来更像一个模板。他的主类是空的,因此如果他执行它,他的程序将不会做任何事情。谢谢。输入副本(空,空);解决了这个问题。我想我从来没有把一个问题解决得这么快:它没有什么“愚蠢”的地方。在这种情况下,它已经向OP发出了一个错误警报,如果没有它,跟踪该错误将更加困难。@EJP它是愚蠢的。所有这些都会使调试和编辑变得复杂。编译器实际上无法确定已检查的异常是从何处抛出的,因为有一些方法可以在不告诉它的情况下抛出已检查的异常,因此它会阻止您捕获合法的异常。它还阻止改进方法以抛出更少的异常,因为它会破坏现有的catch块。
public static void main (String[] args)  {
            try  {


            } catch (IOException e) {System.err.println(e);} // here is the problem
}