为什么这个程序输出" java.io.BufferedReader@Number"?

时间:2014-03-28 06:46:10

标签: java csv

这是一个让我感到困惑的快速方法。我有一个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文件位于同一目录中。

我错过了什么?

5 个答案:

答案 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。