【问题标题】:Reading data from a csv file Java从 csv 文件 Java 中读取数据
【发布时间】:2019-05-03 02:35:52
【问题描述】:

我想从我的数据集 train.csv 中读取数据,并且我正在尝试使用 Java 来实现它。我的目标是获取这些原始数据,以便在 csv 文件中创建一个决策树。我有类 DAO,在其中我实现了一个名为 extractTrainingData 的方法,我正在编写代码来读取数据。该方法如下。

public static BufferedReader exTractTraningData(File datafile, String ListOfCharacteristics) throws IOException {

    try {
        //create BufferedReader to read csv file
        BufferedReader reader = new BufferedReader(new FileReader(datafile));

        String strLine = "";
        StringTokenizer st = null;

        int lineNumber = 0, tokenNumber = 0;;

        String line = reader.readLine();

        while ((strLine = line) != null) {
            lineNumber++;
            //break comma separated line using ","
            st = new StringTokenizer(strLine, ",");

            while (st.hasMoreTokens()) {
                //display csv values
                tokenNumber++;
                System.out.println("Line # " + lineNumber
                        + ", Token # " + tokenNumber
                        + ", Token : " + st.nextToken()
                         + ": " + line);
            }
            //reset token number
            tokenNumber = 0;;
        }
    } catch (Exception e) {

        System.out.println("Exception while reading csv file: " + e);
    }
    return null;
}

当我运行主类时,它会重复该行。我真的不知道我是否做得对。我尝试按照在线教程进行操作。谁能帮我吗?谢谢

【问题讨论】:

  • 如果您不使用受信任的 API,您可能会遇到更多问题。我推荐commons.apache.org/proper/commons-csv
  • 这只是一个小组项目,不是专业的,但感谢您的建议
  • 您只调用一次 readLine(),在循环之前...
  • 谢谢 终于在读取数据集了。但它也在读取一些空值。有什么方法可以忽略数据集中具有缺失值(即空值)的每一行?

标签: java file filereader decision-tree


【解决方案1】:

您的 while 循环永远不会更新,因为您永远不会更新 line

你可能想要的是

String strLine;
while ((strLine = reader.readLine()) != null) {
    ....
}

【讨论】:

  • 谢谢。是的,这是我的一个愚蠢的错误:))。
  • 终于读取数据集了。但它也在读取一些空值。有什么方法可以忽略数据集中具有缺失值(即空值)的每一行?
  • 你可以检查它是否为空? if(something == null){ /* do things differently */ }
  • 好的。例如,可以创建一个新的布尔方法来检查是否存在吗?
【解决方案2】:

问题是您的 read 调用不在 while 循环的测试范围内。

String strLine = "";

String line = reader.readLine();

while ((strLine = line) != null) {

应该是

String strLine = "";

while ((strLine = reader.readLine()) != null) {

因此,while 循环的每次迭代都对新的读取尝试的结果进行操作

【讨论】:

  • 谢谢 终于读到数据集了。但它也在读取一些空值。有什么方法可以忽略数据集中具有缺失值(即空值)的每一行?
猜你喜欢
  • 2014-01-07
  • 2019-09-17
  • 1970-01-01
  • 2020-08-01
  • 2023-03-04
  • 1970-01-01
  • 2017-11-10
相关资源
最近更新 更多