异常IOException永远不会在相应的try语句的主体中抛出

时间:2014-08-24 09:25:30

标签: java

我并不太愚蠢地意识到'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()

} 

2 个答案:

答案 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);以使编译器闭嘴。