2013-04-21 10 views
7

Mam metodę, która zapisuje niektóre dane do pliku. Używam PrintWriter, BufferedWriter i FileWriter jak pokazano poniżejJava - jak odczytać z pliku, gdy użyłem PrintWriter, BufferedWriter i FileWriter do napisania?

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); 
    } 
} 

Teraz jak czytam te dane z pliku? Próbowałem użyć InputStreamReader, BufferedReader i FileInputStream, ale moi NetBeans pokazuje mi się komunikat o błędzie

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(); 
     } 
    } 

Co jest nie tak z tą metodą?

Odpowiedz

14
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(); 
2

Istnieje kilka problemów w kodzie:

1) InputStreamReader bierze InputStream jako argumentu nie czytniku. Zobacz http://docs.oracle.com/javase/6/docs/api/java/io/InputStreamReader.html.

2) FileInputStream nie przyjmuje również argumentu Reader as (pobiera Plik, FileDescriptor lub String). Zobacz: http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html

3) BufferedReader czyta normalnie wiersz pliku wiersz po linii. Metoda read() czyta tylko jeden znak.

Możliwym rozwiązaniem mogłoby być:

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

Btw: Byłoby łatwiej dla innych, aby ci pomóc, jeśli podasz dokładnie Komunikat błędu lub nawet lepiej StackTrace.

+0

Dziękuję bardzo. Teraz działa idealnie ... :) – marek

0

Błąd prosty: Nie można rozwiązać konstruktora "FileInputStream (java.io.FileReader)", wymagany konstruktor nie istnieje w interfejsie API.

Państwo oryginalny kod był:

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

więc do czytania trzeba

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

ale PrintReader nie jest potrzebne (nie istnieje), więc wszystko, czego potrzebujesz to:

new BufferedReader(new FileReader(FileName)) 

PrinterWriter drukuje sformatowane reprezentacje obiektów do strumienia wyjściowego tekstu, ale podczas odczytu tekstu zawsze jest formatt ed, więc PrinterReader nie istnieje.

Piszesz linia po linii, więc przeczytać wiersz po wierszu również :) Przykład:

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(); 
    } 
} 

lub lepsza (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); 
     } 

    } 
} 
Powiązane problemy