BufferedReader инициализирован, но readLine возвращает null?

У меня есть класс measurementFile, его конструктор размещен ниже. и в классе File_IO_03, который имеет метод main, я создаю экземпляр объекта вышеупомянутого класса, но когда я пытаюсь readLine использовать mf.getbR.readLine, консоль отображает null.

Обратите внимание: mf — это объект ранее упомянутого класса, а getbR() — это метод в этом классе, который должен возвращать инициализированное bufferedReader object.

Ниже моя попытка прочитать строку из файла, используя bufferedReader

Код:

**File_IO_03**:

    File f = new File(path);
    MeasurementFile mf = new MeasurementFile(f, MeasurementFile.ENCODING_ISO_8859_1);

    if ( (mf.getiS() == null) || (mf.getbR() == null) ) {
        System.out.println("either iS or bR is null");
    }else {
        System.out.println("both iS or bR are initialised"); // successful
        System.out.println("path: " + mf.getFile().getAbsolutePath());// displayed
        System.out.println("" + mf.getbR().readLine()); // this returns null
        System.out.println("total lines in the file: " + mf.getTotalLines());// successful
        readLines(mf, 4);
        //readLines(mf, 6);
        //continueReading(mf);
    }

    private static void readLines(MeasurementFile mf, int lines) throws IOException {
    // TODO Auto-generated method stub
    /*InputStream is = new FileInputStream(mf.getFile());
    mf.setiS(is);
    BufferedReader br = new BufferedReader(new InputStreamReader(mf.getiS()));
    mf.setbR(br);*/

    String line;
    int linecounter = 0;

    while ((line = mf.getbR().readLine()) != null) {
        System.out.println("current line read: " + line);
        if (++linecounter == lines) {
            mf.getbR().mark(0);
            System.out.println("mark set at linecounter: " + linecounter + "lines: " + lines);
            break;
        }
    }
}

Конструктор класса MeasurementFile:

    public MeasurementFile(File file, Charset encoding) throws IOException {
    this.setFile(file);

    //if (this.myFile.setReadOnly()) 
    this.getFile().setReadable(true);
    this.getFile().setWritable(true);

    if (this.getiS() == null) {
        this.iS = new FileInputStream(this.getFile());
        this.setiS(this.iS);
    }
    if (this.getbR() == null) {
        this.bR = new BufferedReader(new InputStreamReader(this.getiS()));
        this.setbR(this.bR);
    }

    this.totalLines = countTotalLines();

    if (this.getTotalLines() > 0) {
        this.fileToHash();
        this.splitFileIntoPages();
    }else 
        System.out.println("@MeasurementFile(): The file is empty can not create more data");
}

person rmaik    schedule 19.12.2014    source источник
comment
поскольку ваш bufferedReader инициализирован, а метод .readLine() возвращает NULL, тогда либо файл пуст, либо BuferedReader.readLine() достиг конца файла, и больше нет строк для отображения   -  person user2121    schedule 19.12.2014


Ответы (1)


если ваш файл пуст, он вернет null, потому что файл пуст. Вы можете использовать методы File.isEmpty() или BufferedReader.isEmpty(), чтобы определить, пуст ли файл. Например,

File f= new File("Foo.txt");
if (f.isEmpty){
    continue;
}
BufferedReader reader = new BufferedReader(new FileReader(f));
String line = reader.readLine();

Я думаю, что вы также должны сделать, возможно, проверить, если reader.readLine().length ‹ 0. Например:

String line = reader.readLine();
if(line.length < 0){
    // File is empty
    continue;
}else{
    // File is not empty
}

Это позволит убедиться, что ваш файл содержит что-то, когда вы его записываете.

person JD9999    schedule 06.01.2016