java - 在java中读取CSV文件时出现NumberFormatException

标签 java csv arraylist

我是java初学者,有点陷入这两个问题,所以我正在尝试 让程序从 CSV 文件中逐行读取。

所以在文件中我的第一行是字符串,列是双倍的。 所以问题是,当它读取第一行时,它将标题读取为 double ,并且给我一个错误。

顺便说一句,这是 CSV 文件

我得到的错误如下 线程“main”中的异常 java.lang.NumberFormatException:对于输入字符串:“CLOSE”这是第一个错误

第二个错误 >> 在 sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecima‌​l.java:1222) –

第三个错误>>位于java.lang.Double.parseDouble(Double.java:510)

第四个错误 >>> 在 AlgorithmTrader.ReadInputData(AlgorithmTrader.java:63)

第五个错误 >> 在 AlgorithmTrader.Run(AlgorithmTrader.java:16)

最后一个错误>> SimpleAlgorithmTradingPlatform.main(SimpleAlgorithmTradingPl‌​atform.java:15)

因此文件中的第一行有 TIMESTAMP |关闭 |高|低|打开|体积,每一行下面都有 double 字,但体积有整数

您的建议将不胜感激。谢谢

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;

public class AlgorithmTrader {

    public void Run() {

        ReadInputData();
    }

    public void ReadInputData() {

        // create object of scanner class for user input
        Scanner scan = new Scanner(System.in);
        // declare file name for input file
        String inputFileName = "";

        // input from user for input file
        System.out.print("Enter Input File Name: ");
        inputFileName = scan.nextLine();
        try {
            PrintWriter pw = new PrintWriter("output.csv");// to open the file

            // create a new file
            File file = new File(inputFileName);
            // create a new scanner object to read file
            Scanner readFile = new Scanner(file);

            // for each line data
            String line = "";

            line = readFile.nextLine();//skip the first line

            while (readFile.hasNextLine()) {

                readFile.nextLine();
                // pass file to scanner again
                readFile = new Scanner(file);

                ArrayList<String> list = new ArrayList<String>();

                // read stock data line by line

                while (readFile.hasNextLine()) {
                    // read line from file
                    line = readFile.nextLine();
                    // split line data into tokens
                    String result[] = line.split(",");

                    // variables to create a Stock object

                    String timestamp = result[0];
                    double close = Double.parseDouble(result[1]);
                    double high = Double.parseDouble(result[2]);
                    double low = Double.parseDouble(result[3]);
                    double open = Double.parseDouble(result[4]);
                    int volume = Integer.parseInt(result[5]);

                    // store data into ArrayList
                    list.add(readFile.next());
                    pw.print(list.add(readFile.next()));

                    Stock stock = new Stock(timestamp, close, high, low, open, volume);
                }// end of while to read file

                //close readFile object
                readFile.close();
                pw.close();//close file
            }
        } catch (FileNotFoundException e1) {

            System.out.println(" not found.\n");
            System.exit(0);
        } catch (IOException e2) {
            System.out.println("File can't be read\n");
        }
    }
}

我有另一个文件 Stock 类

public class Stock {

    String timestamp;

    double close;
    double high;
    double low;
    double open;
    int volume;

    Stock(String t, double c, double h, double l, double o, int v) {
        timestamp = t;
        close = c;
        high = h;
        low = l;
        open = o;
        volume = v;
    }

    public void settimestamp(String t) {
        this.timestamp = t;
    }

    public void setclose(double c) {
        this.close = c;
    }

    public void sethigh(double h) {
        this.high = h;
    }

    public void setopen(double o) {
        this.open = o;
    }

    public void setvolume(int v) {
        this.volume = v;
    }

    public String gettimestamp() {
        return timestamp;
    }

    public double close() {
        return close;
    }

    public double high() {
        return high;
    }

    public int volume() {
        return volume;
    }
}

还有另一个文件中的 main 方法

import java.text.DecimalFormat;

public class SimpleAlgorithmTradingPlatform {

    public static void main(String[] args) {

        DecimalFormat fmt = new DecimalFormat("#0.00"); // to get the      DecimalFormat

        AlgorithmTrader test = new AlgorithmTrader();

        test.Run();
    }
}

最佳答案

你有 NumberFormatException 因为这里

line = readFile.nextLine();//skip the first line 

没有跳过第一行。 获取文件名后最好使用 BufferedReader 而不是 Scanner。我已经更正了您的代码。

import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;

public class AlgorithmTrader {

    public void Run() {
        ReadInputData();
    }

    public void ReadInputData() {

        // create object of scanner class for user input
        Scanner scan = new Scanner(System.in);
        // declare file name for input file
        String inputFileName = "";

        // input from user for input file
        System.out.print("Enter Input File Name: ");
        inputFileName = scan.nextLine();

        // create a new file
        File csvFile = new File(inputFileName);
        String line;
        ArrayList<Stock> list = new ArrayList<>();

        try (BufferedReader br = new BufferedReader(new FileReader(csvFile))) {

            System.out.println("Reading file " + csvFile);

            System.out.println("Skipping title of the CSV file");
            // Skip first line because it is title
            br.readLine();

            System.out.println("Converting line to Stock");

            while ((line = br.readLine()) != null) {

                String result[] = line.split(",");
                String timestamp = result[0];
                double close = Double.parseDouble(result[1]);
                double high = Double.parseDouble(result[2]);
                double low = Double.parseDouble(result[3]);
                double open = Double.parseDouble(result[4]);
                int volume = Integer.parseInt(result[5]);

                list.add(new Stock(timestamp, close, high, low, open, volume));
            }

            System.out.println("Done");

        } catch (FileNotFoundException e1) {
            System.out.println(" not found.");
            System.exit(0);
        } catch (IOException e2) {
            System.out.println("File can't be read");
        }
    }
}

关于java - 在java中读取CSV文件时出现NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47107151/

相关文章:

java - 发现多个文件具有独立于操作系统的路径 'lib/arm64-v8a/librealm-jni.so'

java - 导出/导入 Eclipse 构建路径

python - 在 Python 中访问 CSV 文件中的列数据

java - 在 Java 中复制 Arraylist 时出现异常

java - 如何在 Eclipse 中没有 'Find' 对话框的情况下在大型类中的 Java 类方法定义之间快速导航?

python - 语法错误: EOL while scanning string literal - using a unique separator

python - 将字符串(数字)增加到总计并打印

java - Android项目中ArrayList的日志列

java - 将未知的 ArrayList 类型传递给方法

Java AES 256 加密