如何在Java输出控制台中完全打印.CSV文件?

时间:2019-04-26 21:30:17

标签: java eclipse csv

我正在尝试读取.CSV文件,该文件由邮政编码及其在一个国家/地区的地址组成。每当我尝试读取文件时,打印控制台只会显示文件的一部分,而不是整个文件。我应该怎么做才能将整个文件打印到控制台。

我正在处理Eclipse,并且尝试了CSVreader(openCSV库)和扫描器inputStream,但是每次编译时它们显示的结果都不相同。

public class Database
{

   public static void main(String[] args) throws Exception
   {

      CSVReader reader = new CSVReader(new FileReader("data.csv"));

      List<String[]> allRows = reader.readAll();

      for(String[] row : allRows){
        System.out.println(Arrays.toString(row));
     }
   }
}

预期:

[Chakragaon,S.O,744112]

[Chatham,S.O,744102]

[Delanipur,S.O,744102]

[Marine Jetty,S.O,744101]

[米妮湾,S.O,744103]

[N.S.Building,S.O,744101]

实际:

[米妮湾,S.O,744103]

[N.S.Building,S.O,744101]

文件包含100,000+行。

2 个答案:

答案 0 :(得分:0)

这可能是打印问题,也可能不是。首先,应检查您实际读取的行是否多于2行。为此,我建议使用调试器(听起来像您根据标签使用eclipse的声音),并在读取行后在处放置一个断点。取得尺寸...

最重要的是,如果程序的行为与您期望的不同,没有比使用调试器更好的解决方案,逐行进行跟踪,在变量视图中查看变量,看看发生了什么事情不会按照您认为的方式进行。

答案 1 :(得分:0)

由于reader.readAll(),您正在遇到此问题-读取器具有安全防范功能,可防止您通过读取海量文件而导致内存溢出。相反,一次只能读取一行,打印,然后继续进行下一行:

CSVReader reader = new CSVReader(new FileReader("data.csv"));

for(String[] row : reader) {
    System.out.println(Arrays.toString(row));
}

for循环语法将CSVReader识别为Iterable<String[]>,因此它可以自动循环行。