【问题标题】:What structure to use to read data from CSV file?使用什么结构从 CSV 文件中读取数据?
【发布时间】:2013-08-29 15:13:36
【问题描述】:

我仍然遇到问题创建一个数组来存储我的 CSV 文件的信息。 这是我的 csv - 文件的示例。

Time;Data0;Data1;Data2;
27.08.2013 00:00:00;nan;nan;nan;
27.08.2013 00:10:00;0;1;2;

如您所见,它们是 3 种类型。 -String : 列名(例如Time),或nan -NotANumber-。 -Double :对于Data0Data1Data2 的值。 -时间戳:Time 值。

列的名称总是在文件的第一行。 我可以有大量的行和列。

所以现在我的问题:获取这些信息并将它们存储在类似数组的形式中的最简单方法是什么? 我需要轻松访问信息,例如通过搜索名为 Data0 的字段,我希望能够访问 nan0

我做了什么:我试图将它存储到地图中,但这不是我想要的(或者显然我没有正确使用它)。此外,我仅限于两个元素,我有三个。 我也尝试在数组中这样做,但是因为数组只能在 Java 中的一种类型之后定义,所以我尝试在一个类之后进行:

public class StorageArray {
    String nameColumn;
    Double contentLine;
    Timestamp time;
}

但后来我不知道如何将不同类型存储在我的类中的不同变量中。

我是 Java 初学者,所以也许有一种简单的方法可以做我想做的事? 如果您希望我提供更多代码,我可以,但我想让问题尽可能简单。

一位朋友告诉我使用内省对象关系映射 (ORM)。但这对我来说似乎相当困难。

【问题讨论】:

  • 基本实现:使用普通的List<List<String>> csvData。您可以从 mkyong 中找到一个使用 String[] 读取每一行的示例:mkyong.com/java/how-to-read-and-parse-csv-file-in-java
  • 你可以试试 Map cvMap = new HashMap();基本都决定了键,并将 StorageArray Bean 作为映射中的值。
  • @Ankit 但是 StorageArray 应该是什么?和我的课一样吗?但是我怎样才能将元素放入正确的类型中?以及如何避免我的价值观多次使用相同的键?什么是 StorageArray Bean? :/(对不起,多个问题)
  • @LuiggiMendoza 是的,我确实找到了这个示例,但我的问题不在于解析,而更多在于存储。因为他只使用了一个简单的字符串数组,这不是我想要的:/
  • 它只是一个 java bean,如果格式总是 Time;Data0;Data1;Data2;并且您确实需要 Data0 Data1 Data2 等作为单独的列,然后最好让 HashMap 和 StorageArray 具有 String data0;字符串数据1;字符串 Data2 等。否则,如果它只是一个字符串,您可以拥有 HashMap 然后可以在此字符串上运行 String.split(";") 以破坏此字符串

标签: java csv multidimensional-array


【解决方案1】:

我认为你不需要Double contentLine

使用LinkedHashMap<String /*nameColumn*/,Timestamp /*time*/ >

在您的地图中存储的索引是您的行。

其他方式,使用Linkedlist<SomeYourClass> 其中SomeYourClass 代表你的行(我认为这很容易处理):

public class Row
{
List<String> nameColumnList;
//Double contentLine; /* you don't need it*/
Timestamp time;
// ...
}

【讨论】:

    猜你喜欢
    • 2018-07-25
    • 2022-10-12
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2019-09-17
    相关资源
    最近更新 更多