这是一个让我感到困惑的快速方法。我有一个Java程序,代码如下:
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
String file1 = args[0];
String file2 = args[1];
String output = args[2];
Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(output), "utf-8"));
// Get the file
BufferedReader br1 = new BufferedReader(new FileReader(file1));
ArrayList<String> masterRBT = new ArrayList<String>();
// Read the files
while(br1.readLine() != null) {
masterRBT.add(br1.toString());
System.out.println(br1.toString());
}
读取文件(在本例中为.csv),并将其输出到命令行。
我使用命令行运行程序,加上三个参数,使用它(它只使用第一个):
java -jar csvdiff.jar mainfile.csv subfile.csv output.csv
然而,它返回了这个:
java.io.BufferedReader@17dfafd1
反复,好像在循环上。我尝试输入Try / Catch错误,但它仍然是一样的 - 没有错误。我打开了.csv文件,并验证了它的内容。
CSV文件与.jar文件位于同一目录中。
我错过了什么?
答案 0 :(得分:2)
因为您试图打印BufferedReader
的实例而不是您正在从中读取的数据
更改
while(br1.readLine() != null) {
masterRBT.add(br1.toString());
System.out.println(br1.toString());
}
到
while((String line = br1.readLine()) != null) {
masterRBT.add(line);
System.out.println(line);
}
答案 1 :(得分:2)
您正在打印br1.toString()
- 您正在toString()
本身上呼叫BufferedReader
。 BufferedReader
不会覆盖toString()
,因此您从Object
获得实施,documented:
类
toString
的{{1}}方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符Object
和无符号十六进制组成表示对象的哈希码。换句话说,此方法返回一个等于值的字符串:@
这不是你想要的。据推测,你实际上想要打印出你刚读过的那条线 - 但是你现在已经抛弃了它。你想要:
getClass().getName() + '@' + Integer.toHexString(hashCode())
或作为String line;
while((line = br1.readLine()) != null) {
masterRBT.add(line);
System.out.println(line);
}
循环:
for
一般来说,如果你开始在输出中看到for (String line = br1.readLine(); line != null; line = br1.readLine()) {
masterRBT.add(line);
System.out.println(line);
}
,那几乎当然在一个不会覆盖它的对象上调用ClassName@Number
的类似问题。
答案 2 :(得分:0)
您不是在打印线而是打印机本身,打印行更改您的代码如下:
// Read the files
String line;
while((line = br1.readLine()) != null) {
masterRBT.add(line);
System.out.println(line);
}
答案 3 :(得分:0)
使用此,
String str;
while((str=br1.readLine()) != null) {
masterRBT.add(str);
System.out.println(str);
}
答案 4 :(得分:0)
因为BufferedReader.toString()只返回对象的类名和哈希值。
使用BufferedReader.readLine()来获取String。