我写了一些代码来读取文本文件并返回一个数组,每行存储在一个元素中。我无法为我的生活解决为什么这不起作用......任何人都可以快速看看吗? System.out.println(行)的输出;是的,所以我猜测读取行有问题,但我不明白为什么。顺便说一句,我传递给它的文件肯定有一些内容!
public InOutSys(String filename) {
try {
file = new File(filename);
br = new BufferedReader(new FileReader(file));
bw = new BufferedWriter(new FileWriter(file));
} catch (Exception e) {
e.printStackTrace();
}
}
public String[] readFile() {
ArrayList<String> dataList = new ArrayList<String>(); // use ArrayList because it can expand automatically
try {
String line;
// Read in lines of the document until you read a null line
do {
line = br.readLine();
System.out.println(line);
dataList.add(line);
} while (line != null && !line.isEmpty());
br.close();
} catch (Exception e) {
e.printStackTrace();
}
// Convert the ArrayList into an Array
String[] dataArr = new String[dataList.size()];
dataArr = dataList.toArray(dataArr);
// Test
for (String s : dataArr)
System.out.println(s);
return dataArr; // Returns an array containing the separate lines of the
// file
}
答案 0 :(得分:2)
首先,在使用新的FileWriter(文件)打开FileReader后打开FileWriter,该文件以创建模式打开文件。因此,在运行程序后它将是一个空文件。
其次,你的文件中是否有空行?如果是这样,!line.isEmpty()将终止你的do-while-loop。
答案 1 :(得分:1)
您正在将FileWriter用于您正在阅读的文件,因此FileWriter会清除文件的内容。不要同时读写同一个文件。
另外:
答案 2 :(得分:1)
我不确定您是否正在寻找一种方法来改进您提供的代码,或者仅仅是为了解决“在Java中读取文本文件”的解决方案,但如果您正在寻找解决方案我建议使用apache commons io为你做这件事。来自readLines的FileUtils方法将完全符合您的要求。
如果你想从一个很好的例子中学习,FileUtils是开源的,所以你可以看看他们如何选择looking at the source来实现它。
答案 3 :(得分:0)
您的问题有几种可能的原因:
最好尝试这种阅读方法:
try {
String line = null;
BufferedReader br = new BufferedReader(new FileReader(file));
while ((line = br.readLine()) != null) {
System.out.println(line);
dataList.add(line);
}
} finally {
if (br != null)
br.close();
}