2014-03-28 28 views
0

这是一个让我难以接受的快速方法。我有一个Java程序用下面的代码:这个程序为什么会输出“[email protected]”?

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的罐子csvdiff.jar mainfile.csv subfile.csv输出。以csv

但随后,它返回:

[email protected]

重复,就好像在循环中一样。我尝试了一个Try/Catch错误,但它仍然是一样的 - 没有错误。我打开了.csv文件,并验证了它的内容。

CSV文件与.jar文件位于同一目录中。

我错过了什么?

回答

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); 
} 
+0

D'OH。我完全忘了那一个。我觉得很愚蠢。确实,“你看到的最后一个地方是它的第一个地方,但在第一次尝试中找不到。”谢谢。 –

+0

np! & 不用谢 –

0

阅读不打印的线,但该数据的一个实例阅读器本身,打印行更改您的代码是这样的:

// Read the files 
    String line; 
    while((line = br1.readLine()) != null) { 
     masterRBT.add(line); 
     System.out.println(line); 
    } 
2

您正在打印br1.toString() - 您在BufferedReader本身上致电toString()BufferedReader没有覆盖toString(),所以你得到从Object的实施,为documented

toString方法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); 
} 

作为一般事项,如果你开始看到在输出[email protected],这几乎肯定的对象上调用toString()的类似问题它不会覆盖它。

0

使用此,

String str; 

    while((str=br1.readLine()) != null) { 
       masterRBT.add(str); 
       System.out.println(str); 
      } 
0

因为BufferedReader.toString()只返回类名称和对象的哈希值。

使用BufferedReader.readLine()来取代String。

相关问题