【问题标题】:How to print a .CSV file completely in java output console?如何在 java 输出控制台中完全打印 .CSV 文件?
【发布时间】:2019-04-26 21:30:17
【问题描述】:

我正在尝试读取一个 .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));
     }
   }
}

预期:

[查克拉冈,S.O,744112]

[查塔姆,S.O,744102]

[德拉尼普尔, S.O,744102]

[海上码头,S.O,744101]

[米妮湾,S.O,744103]

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

实际:

[米妮湾,S.O,744103]

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

该文件包含 100,000 多行。

【问题讨论】:

    标签: java eclipse csv


    【解决方案1】:

    这可能是也可能不是打印问题。首先,您应该检查您实际阅读的行数是否超过 2 行。为此,我建议使用调试器(听起来您正在使用基于标签的 eclipse)并在读取行后放置一个断点。获取尺寸...

    最重要的是,如果程序的行为与您的预期不同,没有比使用调试器更好的解决方案了,逐行跟踪它,查看变量视图中的变量,看看哪里出了问题不要走你认为他们应该走的路。

    【讨论】:

    • 我使用了调试器,它似乎正在打印所有值,但不是一次打印。
    【解决方案2】:

    由于reader.readAll(),您遇到了这个问题 - 阅读器有一个安全锁,可以防止您通过读取大量文件而导致内存溢出。相反,一次只读取一行,打印,然后移动到下一行:

    CSVReader reader = new CSVReader(new FileReader("data.csv"));
    
    for(String[] row : reader) {
        System.out.println(Arrays.toString(row));
    }
    

    for 循环语法将CSVReader 识别为Iterable&lt;String[]&gt;,因此它可以自动循环遍历行。

    【讨论】:

    • 这个方法我试过了,没用。我调试了代码,看到它逐行打印。
    • 如果您需要帮助,请解释“不起作用”的含义:)
    • 打印整个文件本身,我相信我的方法是错误的。 10万条记录的文件无法在控制台显示。
    猜你喜欢
    • 1970-01-01
    • 2021-06-05
    • 2020-04-24
    • 1970-01-01
    • 2013-04-15
    • 2022-12-04
    • 2021-12-06
    • 2020-12-22
    • 2016-11-28
    相关资源
    最近更新 更多