我并不太愚蠢地意识到'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()
}
答案 0 :(得分:0)
错误是因为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
}
答案 1 :(得分:-1)
try
块是空的,显然是因为你还没有编写进入它的代码。 Java编译器愚蠢地抱怨是否存在catch
块并且[它认为]不能抛出异常。这是Java checked exceptions的烦人特质之一。
只需继续填写try
块,错误就会消失。您可以在其中插入一个虚拟copy(null, null);
以使编译器闭嘴。