我正在尝试使用this page底部的一些代码。这是我为它创建的类中的代码:
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;
}
}
我的目标是计算文本文件的行数,将该数字存储为整数,然后在我的主类中使用该整数。在我的主要课程中,我尝试了几种不同的制作方法这发生了,但(作为一个新的程序员)我错过了一些东西。这是我尝试的第一件事:
String sFileName = "MyTextFile.txt";
private int lineCount = LineCounter.countLines(sFileName);
通过这次尝试,我收到错误“未报告的异常java.io.IOException;必须被捕获或声明被抛出。”我不明白为什么我得到这个,因为我可以看到异常是在我的“countLines”方法中声明的。我尝试在我发布的最后一段代码下使用try catch块,但这也没有用(我不认为我做得对)。这是我试试的尝试:
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);
}
}
请指教我的方式!在此先感谢您的帮助!
答案 0 :(得分:4)
初始化程序块就像任何代码位一样;它不会“附加”到它之前的任何字段/方法。要为字段赋值,必须显式使用该字段作为赋值语句的lhs。
private int lineCount; {
try{
lineCount = LineCounter.countLines(sFileName);
/*^^^^^^^*/
}
catch(IOException ex){
System.out.println (ex.toString());
System.out.println("Could not find file " + sFileName);
}
}
此外,您的countLines
可以更简单:
public static int countLines(String filename) throws IOException {
LineNumberReader reader = new LineNumberReader(new FileReader(filename));
while (reader.readLine() != null) {}
reader.close();
return reader.getLineNumber();
}
根据我的测试,您似乎可以在getLineNumber()
后close()
。
答案 1 :(得分:1)
您的countLines(String filename)
方法抛出IOException。
您不能在会员声明中使用它。您需要使用main(String[] args)
方法执行操作。
您的main(String[] args)
方法将获得countLines抛出的IOException,它将需要处理或声明它。
尝试这样做只是从主
中抛出IOExceptionpublic class MyClass {
private int lineCount;
public static void main(String[] args) throws IOException {
lineCount = LineCounter.countLines(sFileName);
}
}
或者这个来处理它并将其包装在未经检查的IllegalArgumentException中:
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);
}
}
}
答案 2 :(得分:1)
获取IOException的原因是因为您没有捕获countLines方法的IOException。你会想做这样的事情:
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.
}
}