我的文件路径构造函数不工作,JAVA

My Constructor for the filepath ist not working, JAVA

如果我直接在 class CtoJ 中使用文件路径,它就可以工作。 如果我通过构造函数传递它,它会给我一个 Nullpointer。 好吧,我不知道我可以添加什么来使我的问题更加清楚。 好吧,如果我使用 String path ="";它没有抛出这样的文件或目录。 构造函数似乎无法将文件路径写入路径变量?


public class CSVReader {

    public static void main(String[] args) {

        CtoJ test = new CtoJ("/Users/peterg/Desktop/test.csv");

    }
}
import org.json.CDL;
import org.json.JSONArray;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class CtoJ {

    
    private String path;
    private StringBuilder content = new StringBuilder();
    private String line;
    private String stringtoJSON;

    public CtoJ(String path) {
        this.path = path;
    }



    {


        try {

           BufferedReader reader = new BufferedReader(new FileReader(path));

            
            while ((line = reader.readLine()) != null) {
                
                content.append(removeUnnecessaryQuotes(line));
                
                content.append(System.lineSeparator());
            }

            
            stringtoJSON = content.toString();

            
            JSONArray jsonArray = CDL.toJSONArray(stringtoJSON);
            System.out.println(jsonArray);


        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }

    
    public static String removeUnnecessaryQuotes(String s) {
        String withoutQuotes;
        withoutQuotes = s.substring(0).replaceAll("\"", "");
        withoutQuotes.substring(0).replaceAll("\"\"", "\"");
        return withoutQuotes;
    }
}

这是我使用的一些数据,如果你想测试的话:

FID,OBJECTID,SHAPE,LAGE,GRILLPLATZ_ID,RESERVIERUNG,WEBLINK1,SE_ANNO_CAD_DAT
"GRILLPLATZOGD.6748,6748,POINT (16.465255884594104 48.19018769574157),""22., Donauinsel, ca. 350 Meter stromab der Steinspornbrücke (Inselmitte, Erdwall)"",15,ja,http://www.wien.gv.at/amtshelfer/umwelt/wasserbau/donauinsel/grillplatzreservierung.html,"
"GRILLPLATZOGD.6749,6749,POINT (16.48177464603615 48.183356069714286),""22., Neue Donau, linkes Ufer, zwischen Steinspornbrücke und Waluliso Brücke (bei km 5,1) (Dammbereich) "",16,ja,http://www.wien.gv.at/amtshelfer/umwelt/wasserbau/donauinsel/grillplatzreservierung.html,"
"GRILLPLATZOGD.6750,6750,POINT (16.460158556964053 48.177745677669925),""11., Donaukanal, Alberner Hafenzufahrtsstraße, Nähe Margetinstraße"",0,nein,http://www.wien.gv.at/umwelt/wald/freizeit/grillen/,"





您收到错误是因为您不小心在代码中使用了实例初始化程序块。即

class Foo {

  //constructor
  public Foo() {
    System.out.println("Constructor");
  }

  //instance initializer Block
  {
    System.out.println("Instance Initializer");
  }
}

一般来说,这是可以的,但是,初始化程序块构造函数之前执行。

在您的特定示例中

BufferedReader reader = new BufferedReader(new FileReader(path));
初始化块中的

依赖于构造函数中 path 的实例化。因此,作为快速修复,只需将代码从初始化程序移动到构造函数,你不应该得到任何 NullPointerException.