Мой конструктор для пути к файлу не работает, JAVA

Если я использую путь к файлу непосредственно в классе CtoJ, он работает. Если я передам его через конструктор, он даст мне нулевой указатель. Ну, я не знаю, что я мог бы добавить, чтобы сделать мою проблему более ясной. Хорошо, если я использую 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/,"





У вас есть гигантский кусок кода без метода.

Dave Newton 09.04.2022 21:05
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
1
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы получаете ошибку, потому что вы случайно использовали блок инициализатора экземпляра в своем коде. То есть

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.

Другие вопросы по теме