【发布时间】:2019-07-27 14:37:24
【问题描述】:
我编写了这段代码用于从 Java 中读取 txt:
package exe;
import java.io.*;
public class Class1 {
public static void main(String[] args) {
Solve g = new Solve(args[0]);
}
}
class Solve {
public Solve(String fileName) {
String line = null;
try {
FileReader fileReader = new FileReader(fileName);
BufferedReader bufferedReader = new BufferedReader(fileReader);
while ((line = bufferedReader.readLine()) != null) {
System.out.println("Reading...");
}
bufferedReader.close();
} catch (IOException ex) {
System.out.println("Exception");
}
}
}
我在与Class1.java 文件相同的目录中有一个名为 test 的 txt 文件。我还在此程序中将test.txt 作为参数,所以如果我在Class1 中打印args[0],则会打印test.txt。我也尝试过使用这样的完整路径:Solve("C:\\Users....exe\\src\\test.txt");,但它仍然会产生异常。
我做错了什么?
txt 包含 5 行文本,所以我预计 Reading... 会出现 5 次。
【问题讨论】:
-
它仍然会产生异常:将
System.out.println("Exception");替换为ex.printStackTrace(),您就会知道抛出了哪个异常、它的类型、它的消息以及抛出了哪一行它。忽略错误消息会让您的生活变得困难。或者更好的是,不要捕获异常。而是将 throws 子句添加到您的方法中,因为无论如何您都无法以有意义的方式处理它。 -
另外,当您执行
ls foo或dir foo时,ls或dir程序是否会在与ls或dir可执行文件相同的目录中查找文件?还是查看当前目录?同样的规则也适用于 Java。 -
顺便说一句:你不应该在构造函数中开始计算。您应该在实例方法中移动计算。
-
一旦你的代码工作,你可以做的改进是使用
try资源而不是try