看来我的IntelliJ找不到我的csv文件?

问题描述

所以我做了一个类来跟踪我导入的数据:

package com.company;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
public class ImportData {
    public ImportData() {
    }
    public static ArrayList<Pizza> readData() throws IOException{
    String file = "Users/mathiaspoulsen/Desktop/SP3MarioPizza/pizzas.csv";
    ArrayList <Pizza> content = new ArrayList<>();
    try(BufferedReader br = new BufferedReader(new FileReader(file))) {
        String line = br.readLine();
        while ((line = br.readLine()) != null) {
            line = br.readLine();
            String [] lineArr = line.split(",");
            Pizza pizza = new Pizza (Integer.parseInt(lineArr[0]),lineArr[1],Double.parseDouble(lineArr[2]));
            content.add(pizza);
        }
    } catch (FileNotFoundException e) {
        //Some error logging
    }
    return content;
}

然后我尝试在main方法中运行它,以查看它是否完全加载了csv文件。像这样:

package com.company;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
public class Main {
    public static void main(String[] args) throws IOException {
    /*    int i = 0;
        String fileName = "pizzas.csv";
        Path pathToFile = Paths.get(fileName);
        System.out.println(pathToFile.toAbsolutePath());
*/
       // ArrayList<Pizza> pizzas = ImportData.readData();
        System.out.println(ImportData.readData());
    }
}

该程序的输出为:[]

为什么不显示比萨饼? CSV文件中的比萨饼结构如下:

PizzaNumber(int),PizzaName(String),价格(双精度)

1,MARGHERITA,69.00

解决方法

您多次读取了这行,这很可能是导致您的问题的原因,所以只需读取一次,并在解析之前在while语句中检查以确保其不为null。另外,最好检查一下以确保解析成功。

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

public class ImportData {
  public ImportData() {
  }

  public static ArrayList<Pizza> readData() throws IOException {
    String file = "/Users/your/path/pizza.csv";
    ArrayList<Pizza> content = new ArrayList<>();
    try (BufferedReader br = new BufferedReader(new FileReader(file))) {
      String line;
      while ((line = br.readLine()) != null) {
        String[] lineArr = line.split(",");
        content.add(new Pizza(Integer.parseInt(lineArr[0]),lineArr[1],Double.parseDouble(lineArr[2])));
      }
    } 
    catch (FileNotFoundException e) {
      System.out.println(e);
    } 
    return content;
  }
}