Java Try and Catch IOException Problem
我试图使用我在本页底部找到的一些代码。 这是我为它创建的类中的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import java.io.LineNumberReader; import java.io.FileReader; import java.io.IOException; public class LineCounter { public static int countLines(String filename) throws IOException { LineNumberReader reader = new LineNumberReader(new FileReader(filename)); int cnt = 0; String lineRead =""; while ((lineRead = reader.readLine()) != null) {} cnt = reader.getLineNumber(); reader.close(); return cnt; } } |
我的目标是计算文本文件的行,将该数字存储为整数,然后在我的主类中使用该整数。 在我的主要课程中,我尝试了几种不同的方法来实现这一点,但是(作为一名新程序员)我错过了一些东西。 这是我尝试的第一件事:
1 2 |
通过此尝试,我得到错误"未报告的异常java.io.IOException;必须被捕获或声明被抛出"。 我不明白为什么我得到这个,因为我可以看到异常是在我的"countLines"方法中声明的。 我尝试在我发布的最后一段代码下使用try catch块,但这也没有用(我不认为我做得对)。 这是我试试的尝试:
1 2 3 4 5 6 7 8 9 10 | String sFileName ="MyTextFile.txt"; private int lineCount;{ try{ LineCounter.countLines(sFileName); } catch(IOException ex){ System.out.println (ex.toString()); System.out.println("Could not find file" + sFileName); } } |
请告诉我方式! 在此先感谢您的帮助!
初始化块就像任何代码位一样; 它不会"附加"到它之前的任何字段/方法。 要为字段赋值,必须显式使用该字段作为赋值语句的lhs。
1 2 3 4 5 6 7 8 9 10 | private int lineCount; { try{ lineCount = LineCounter.countLines(sFileName); /*^^^^^^^*/ } catch(IOException ex){ System.out.println (ex.toString()); System.out.println("Could not find file" + sFileName); } } |
此外,您的
1 2 3 4 5 6 | public static int countLines(String filename) throws IOException { LineNumberReader reader = new LineNumberReader(new FileReader(filename)); while (reader.readLine() != null) {} reader.close(); return reader.getLineNumber(); } |
根据我的测试,看起来你可以在
获得IOException的原因是因为您没有捕获countLines方法的IOException。 你会想做这样的事情:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public static void main(String[] args) { int lines = 0; // TODO - Need to get the filename to populate sFileName. Could // come from the command line arguments. try { lines = LineCounter.countLines(sFileName); } catch(IOException ex){ System.out.println (ex.toString()); System.out.println("Could not find file" + sFileName); } if(lines > 0) { // Do rest of program. } } |
您的
您不能在成员声明中使用它。 您需要以
您的
试试这个只是从main抛出IOException
1 2 3 4 5 6 | public class MyClass { private int lineCount; public static void main(String[] args) throws IOException { lineCount = LineCounter.countLines(sFileName); } } |
或者这个来处理它并将其包装在未经检查的IllegalArgumentException中:
1 2 3 4 5 6 7 8 9 10 11 | public class MyClass { private int lineCount; private String sFileName ="myfile"; public static void main(String[] args) throws IOException { try { lineCount = LineCounter.countLines(sFileName); } catch (IOException e) { throw new IllegalArgumentException("Unable to load" + sFileName, e); } } } |