Java - как читать из файла, когда я использовал PrintWriter, BufferedWriter и FileWriter для записи?

у меня есть метод, который записывает данные в файл. Я использую PrintWriter, BufferedWriter и FileWriter как показано ниже

public void writeToFile(String FileName){
    PrintWriter pw = null;
    try {
        pw = new PrintWriter(new BufferedWriter(new FileWriter(FileName)));
        for(Cars car : list){
            pw.println(car.getType());
            pw.println(car.getMaxSpeed());
            pw.println(car.getOwner());
            pw.println();
            pw.flush();
        }
        pw.close();
    }
    catch(IOException ex){
        System.err.println(ex);
    }
}

теперь, как я могу прочитать данные из файла? Я пытался использовать InputStreamReader, BufferedReader и FileInputStream, но мой NetBeans показывает мне сообщение об ошибке

    public void readFromFile() throws IOException {
        InputStreamReader fr = null;
        try {
            fr = new InputStreamReader(new BufferedReader(new FileInputStream(new FileReader("c:cars.txt"))));
            System.out.println(fr.read());
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        } finally {
            fr.close();
        }
    }  

что не так с этим методом?

3 ответов


BufferedReader in = new BufferedReader(new FileReader("file.in"));
FileWriter fstream = new FileWriter("file.out");
BufferedWriter out = new BufferedWriter(fstream);

String line = in.readLine(); // <-- read whole line
StringTokenizer tk = new StringTokenizer(line);
int a = Integer.parseInt(tk.nextToken()); // <-- read single word on line and parse to int

out.write(""+a);
out.flush();

в вашем коде есть несколько проблем:

1) InputStreamReader принимает InputStream в качестве аргумента, а не читателя. См.http://docs.oracle.com/javase/6/docs/api/java/io/InputStreamReader.html.

2) FileInputStream также не принимает Reader в качестве аргумента (он принимает файл, FileDescriptor или строку). Смотри:http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html

3) A Командой bufferedreader считывает файл линии обычно линия. Метод read() считывает только один символ.

возможным решением может быть:

fr = new BufferedReader(new InputStreamReader(new FileInputStream(new File("c:\cars.txt"))));
String line = "";
while((line = fr.readLine()) != null) {
    System.out.println(line);
}

Btw: другим было бы легче помочь вам, если вы предоставите точное сообщение об ошибке или даже лучше StackTrace.


ошибки: не удается разрешить конструктор FileInputStream (java.Ио.FileReader)', требуемый конструктор не существует в API.

у вас оригинальный код был:

new PrintWriter(new BufferedWriter(new FileWriter(FileName)));

так что для чтения вам нужно

new PrintReader(new BufferedReader(new FileReader(FileName)));

но PrintReader не нужен (не существует), поэтому все, что вам нужно, это:

new BufferedReader(new FileReader(FileName))

PrinterWriter печатает форматированные представления объектов в поток вывода текста, но при чтении текст всегда форматируется, поэтому PrinterReader не существовать.

вы пишете строку за строкой, поэтому Читайте также строку за строкой:) пример:

public void readFromFile() throws IOException {
    BufferedReader bufferedReader = null;
    try {
        String sCurrentLine;
        bufferedReader = new BufferedReader(new FileReader("c:\cars.txt"));
        while ((sCurrentLine = bufferedReader.readLine()) != null) {
            System.out.println(sCurrentLine);
        }
    } catch (Exception ex) {
        System.out.println(ex.getMessage());
    } finally {
        bufferedReader.close();
    }
}

или лучше (JDK7)

void readFromFile() throws IOException {
    Path path = Paths.get("c:\cars.txt");
    try (BufferedReader reader = Files.newBufferedReader(path, Charset.defaultCharset())){
        String line = null;
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
        }

    }
}