【问题标题】:Java : Cannot Read CSV file separated by ';' and line terminated by '\n'Java:无法读取由“;”分隔的 CSV 文件和以 '\n' 结尾的行
【发布时间】:2015-08-10 09:07:35
【问题描述】:
  public static void main(String[] args) throws IOException {
        String dataRow;
     BufferedReader CSVFile = 
                new BufferedReader(new FileReader("test.csv"));

          while ((dataRow = CSVFile.readLine()) != null) {
                System.out.println(dataRow.split(";")[0]);
            }
          // Close the file once all data has been read.
          CSVFile.close();

          // End the printout with a blank line.
          System.out.println("Done");

}

我尝试在普通文本视图中读取的 CSV 文件

ID;Numbers
12;234
343;233

我能打印的只是空格,没有字符串。

输出

      1. ��I
      2. 
      3. 
      4. 
      Done

文件编码只有“UNICODE”

如何在 java 中读取 Unicode 文件。 我是否必须在 FileReader java 类构造器中设置一个参数来设置文件的编码类型?

请多多指教。

【问题讨论】:

  • 可能 CSV 文件没有以您的本地机器默认编码进行编码?
  • @Ricardo 我创建了一个可以正确读取的新文件。我不明白我试图阅读的上一个文件有什么问题。
  • 我有 100 个 csv 文件,每个文件有 10000 行。但是所有文件都存在相同的问题,即即使不拆分(直接显示行)也无法读取。需要某种方法来读取 CSV 文件并处理其中的数据。
  • 行分隔符可能与系统对 \n 的期望不同。例如windows和linux系统不同。我建议手动解析文件,使用正确的行分隔符手动分割每一行:stackoverflow.com/questions/426397/… 如果你想用不同的编码处理你的文件,你可以使用 SublimeText 的'open with encoding...'选项。

标签: java csv


【解决方案1】:
public static void main(String[] args) throws IOException {
    String dataRow;
    BufferedReader CSVFile = new BufferedReader(new FileReader("F:\\csv.csv"));
    while ((dataRow = CSVFile.readLine()) != null) {
        String []data = dataRow.split(";");
        for (String d : data) {
            System.out.print(d + " ");
        }
        System.out.println();
    }
    CSVFile.close();
    System.out.println("Done");

}

结果如下图:

ID Numbers 
12 234 
343 233 
Done

文件编码获取方式如下图

用nodepad编辑器打开csv文件,然后点击file -> save as

【讨论】:

  • 我运行了你的代码,它给出了与我在问题中发布的相同的输出
  • 你的csv文件的编码可能不对,在我的机器上,csv文件是用utf-8编码的
  • 看答案,我给你截图。
  • @Javy 我在我的机器上用 gedit 文本编辑器检查了它的编码是 UTF-8。那么,编码将是问题的原因??
【解决方案2】:

如果你的文件编码是unicode,当你读取文件时,你可以传递一个文件编码参数给函数

下面的代码

    public static void main(String[] args) throws IOException {
    String dataRow;
    BufferedReader CSVFile = new BufferedReader(new InputStreamReader(new FileInputStream("F:\\csv.csv"),"unicode"));
    while ((dataRow = CSVFile.readLine()) != null) {
        String []data = dataRow.split(";");
        for (String d : data) {
            System.out.print(d + " ");
        }
        System.out.println();
    }
    CSVFile.close();
    System.out.println("Done");
}

如果不传递文件编码参数,当你读取文件内容时,编码取决于你的os

【讨论】:

    猜你喜欢
    • 2015-07-22
    • 1970-01-01
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    相关资源
    最近更新 更多