在Java/Jython中读取CSV

在Java/Jython中读取CSV,java,csv,jython,Java,Csv,Jython,这里有一个简单的问题: public static double[] stringsToDoubles(String[] inputArr) { double[] nums = new double[inputArr.length]; for (int i = 0; i < nums.length; i++) { nums[i] = Double.parseDouble(inputArr[i]); } return nums; } publ

这里有一个简单的问题:

public static double[] stringsToDoubles(String[] inputArr) {
    double[] nums = new double[inputArr.length];
    for (int i = 0; i < nums.length; i++) {
        nums[i] = Double.parseDouble(inputArr[i]);
    }
    return nums;
}

public static double[][] readPointCloudFile(String filename, int n) {
    double[][] points = new double[n][];
    String delimiter = ",";
    Scanner sc = new Scanner(filename);
    for (int i = 0; i < n; i++) {
        String line = sc.nextLine();
        points[i] = stringsToDoubles(line.split(delimiter));
    }
    return points;
}
这就产生了错误

    java.lang.NumberFormatException: java.lang.NumberFormatException: For input string: "points.txt"

你从来没有读过这个文件。您将文件名传递给扫描仪,并假定此字符串是您的csv数据,但它只是文件名。 使用Java 8时,可以按如下方式读取文件:

import java.nio.file.Files;
import java.nio.file.Paths;
[...]

public static double[][] readPointCloudFile(String filename, int n) {
  double[][] points = new double[n][];
  String delimiter = ",";
  String filecontent = new String(Files.readAllBytes(Paths.get(filename)));
  Scanner sc = new Scanner(filecontent);
  for (int i = 0; i < n; i++) {
      String line = sc.nextLine();
      points[i] = stringsToDoubles(line.split(delimiter));
  }
  return points;
}
导入java.nio.file.Files;
导入java.nio.file.path;
[...]
公共静态双[][]readPointCloudFile(字符串文件名,int n){
双精度[]点=新的双精度[n][];
字符串分隔符=“,”;
String filecontent=新字符串(Files.readAllBytes(path.get(filename));
Scanner sc=新扫描仪(文件内容);
对于(int i=0;i
本着解决您自己问题的精神,这里是我的解决方案,但我会把它归功于其他人,因为其他解决方案可能更好

 public static double[] stringsToDoubles(String[] inputArr){
     double[] nums = new double[inputArr.length];
     for(int i = 0; i < nums.length; i++){
         nums[i] = Double.parseDouble(inputArr[i]);
     }
     return nums;
 }

 public static double[][] readPointCloudFile(String filename, int n) throws FileNotFoundException{
     double[][] points = new double[n][];
     String delimiter = ",";
     try{
         Scanner sc = new Scanner(new File(filename));
         for(int i = 0; i < n; i++){
             String line = sc.nextLine();
             points[i] = stringsToDoubles(line.split(delimiter));
         }
     } catch (FileNotFoundException e){
         System.err.println(e.getMessage());
     } finally {
         return points;
     }
 }
publicstaticdouble[]stringsToDoubles(String[]inputArr){
double[]nums=新的双精度[inputArr.length];
对于(int i=0;i
您从未读取过该文件。您将文件名传递给扫描仪,并假设此字符串是您的csv数据,但它只是文件名。是的,我认为我需要执行一些操作,例如新建文件(文件名)或其他操作。顺便说一句,库可以帮助您阅读csv文件。这比我的回答更简单。我从不使用
扫描仪
,也不知道它需要
文件
参数。祝你今后工作顺利:)
 public static double[] stringsToDoubles(String[] inputArr){
     double[] nums = new double[inputArr.length];
     for(int i = 0; i < nums.length; i++){
         nums[i] = Double.parseDouble(inputArr[i]);
     }
     return nums;
 }

 public static double[][] readPointCloudFile(String filename, int n) throws FileNotFoundException{
     double[][] points = new double[n][];
     String delimiter = ",";
     try{
         Scanner sc = new Scanner(new File(filename));
         for(int i = 0; i < n; i++){
             String line = sc.nextLine();
             points[i] = stringsToDoubles(line.split(delimiter));
         }
     } catch (FileNotFoundException e){
         System.err.println(e.getMessage());
     } finally {
         return points;
     }
 }