Java In и Out - PullRequest
       37

Java In и Out

3 голосов
/ 08 апреля 2011

Я новичок в Java.У меня есть это упражнение из школы, чтобы создать класс BasicIO и класс Main для чтения и записи в файл.

Однако мой код читает только первое предложение и печатает его в бесконечном цикле.

BasicIO.java

import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class BasicIO 
{

    BasicIO()
    {
        line = null;
    }

    public void readplzthx(String filename) throws IOException
    {
        FileReader f = null;
        BufferedReader rd = null;

        f = new FileReader(filename);
        rd = new BufferedReader(f);

        line = rd.readLine();   
        rd.close();
        f.close();
    }

    public void writeplzthx(String filename)
    {

    }
    //String fn;
    String line;
}

Main.java:

import java.io.File;
import java.io.IOException;

public class Main {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException
    {
        File f = new File("test.txt");
        BasicIO io = new BasicIO();
        //io.readplzthx(f.getAbsolutePath());
        //File f = new File(args[1]);
        io.readplzthx(f.getAbsolutePath());
        do
        {
        //  io.readplzthx(f.getAbsolutePath());
            System.out.println(io.line);
        } while (io.line != null);
    }   

}

Ответы [ 5 ]

2 голосов
/ 08 апреля 2011
    do
    {
    //  io.readplzthx(f.getAbsolutePath());
        System.out.println(io.line);
    } while (io.line != null);

Это твой бесконечный цикл. io.line не изменяется внутри цикла.

Даже если это исправить, у вас все равно будет та же проблема. Вы хотите открыть файл только один раз, а затем прочитать его несколько раз.

1 голос
/ 08 апреля 2011

Причиной возникновения проблемы является то, что вы открываете файл, читаете в первой строке и закрываете его. Вы должны держать файл открытым между вызовами readplzthx и очищать себя после того, как закончите.

1 голос
/ 08 апреля 2011

Вы перезагружаете файл на каждой итерации цикла. Вы должны создать считыватель перед циклом, затем вызвать reader.readLine() в итерации цикла, чтобы ваше значение io.line не всегда было первой строкой.

1 голос
/ 08 апреля 2011

Три подсказки:

  • readplzthx не должен повторно открывать файл каждый раз, когда он вызывается;
  • вызовите readplzthx внутри цикла, чтобы вы читали новую строку на каждой итерации;
  • убедитесь, что вы правильно обрабатываете достижение конца вашего входного файла.
0 голосов
/ 08 апреля 2011

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

Вы устанавливаете приватный элемент класса line для строки, которую вы читаете из файла. Ваш цикл do-while основан на условии, что io.line не равен нулю. Это всегда будет верным. Вот почему вы находитесь в бесконечном цикле.

Итак, вот несколько советов для вашего BasicIO класса:

  • Напишите явные методы для открытия и закрытия файла / потока.
  • Напишите метод проверки состояния, который скажет вам, находитесь ли вы в конце файла, или если есть еще контент для чтения. Вы можете использовать это в цикле while.
  • Написать метод, который возвращает строку из текущего открытого файла; Вы можете использовать это внутри своей петли.

Все, что вам нужно сделать сейчас, это собрать эти три части вместе.

Удачи!

...