【问题标题】:how can I parse CSV(excel,not separated by comma) file in Java ?如何在 Java 中解析 CSV(excel,不以逗号分隔)文件?
【发布时间】:2012-11-20 15:45:24
【问题描述】:

我有一个 CSV 文件 (excel),其中包含数据,我需要使用 java 解析数据。 这些文件中的数据不使用逗号分隔,CSV 文件的列数和行数(每个单元格都有数据)写入所有数据。 我需要遍历所有文件,直到到达每个文件的 EOF(文件结尾)并解析数据。 文件中还包含空行,因此空行不是停止解析的标准,我认为只有 EOF 会表明我已经到达特定文件的末尾。

非常感谢。

【问题讨论】:

  • 如果您不告诉我们您已经尝试过什么,这将很难提供帮助?如果文件不是逗号分隔,那么由哪个其他字符?";" “标签”等?
  • 请编辑您的帖子并添加一些示例输入(缩进 4 个空格以使其固定宽度)
  • 我尝试将其转换为 excel 文件 (xls),然后解析 is。每个单元格中都有一个数字。它没有被任何东西分隔 - 它不是一个字符串。试图加载图片,但该网站不允许我。谢谢
  • @user1864229 尝试在记事本中打开 CSV 文件。如果你从 xls 转到 csv,它应该用 ';' 分隔值

标签: java excel parsing csv


【解决方案1】:

您可以使用 opencsv 来解析 excel CSV。我自己用过这个,你需要做的就是在';'上分开。空单元格也会被解析。

你可以在这里找到信息:http://opencsv.sourceforge.net/

要解析 excelCSV,您可以这样做:

 CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), ';');

【讨论】:

  • Rafael,我如何加载从 sourceforge 下载的源(库)?谢谢
  • @user1864229 就像你想要任何图书馆一样?将它放在该项目的库文件夹中。
  • 我需要使用特定的文件/文件夹吗?
  • @user1864229 您的项目中需要一个“lib”文件夹
【解决方案2】:

请有一个流对象来读取 CSV 文件。

FileInputStream fis = new FileInputStream("FileName.CSV");

BufferedInputStream bis = new BufferedInputStream(fis); InputStreamReader isr = new InputStreamReader(bis);

读取一个输入流对象并将文件存储在字符串对象中。

然后使用带有 ,[comma] 作为分隔符的 StringTokenizer -->您将获得令牌 请操作令牌以获取值。

String str = "This is String , split by StringTokenizer, created by mkyong";

StringTokenizer st = new StringTokenizer(str);

    System.out.println("---- Split by space ------");
    while (st.hasMoreElements()) {
        System.out.println(st.nextElement());
    }

    System.out.println("---- Split by comma ',' ------");
    StringTokenizer st2 = new StringTokenizer(str, ",");

    while (st2.hasMoreElements()) {
        System.out.println(st2.nextElement());
    }

谢谢,

帕万

【讨论】:

  • 来自StringTokenizer: StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
【解决方案3】:

除了其他建议,我会提供Jackson CSV module。 Jackson 具有非常强大的数据绑定功能,并且 CSV 模块允许读取/写入 CSV 作为 JSON(或 XML、YAML 和其他支持的格式)的替代方案。因此,除了强大的 CSV-to/from-POJO 绑定之外,您还可以在其他数据格式之间进行转换。

【讨论】:

    【解决方案4】:

    假设你有一个字符串形式的 csv 文件内容:

    String fileContent;
    

    一般情况下,CSV文件的内容都会被解析成List>。

    final List<String> rows = new ArrayList<String>(Lists.newArraysList(fileContent.split("[\\r\\n]+")));
    

    将文件拆分为行列表。 然后使用 OpenCSV 的 CSVParser 并将逗号分隔的行解析为 List

    final CSVParser parser = new CSVParser();
    final List<List<String>> csvDetails = new ArrayList<List<String>>();
        rows.forEach(t -> {
            try {
                csvDetails.add(Lists.newArrayList(parser.parseLine(t)));
                } catch (Exception e) {
                    throw new RunTimeException("Exception occurred while parsing the data");
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 2010-11-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-22
      相关资源
      最近更新 更多