2013-04-21 132 views
7

我有寫入一些數據到文件的方法。我用PrintWriterBufferedWriterFileWriter如下圖所示Java - 如何使用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); 
    } 
} 

現在我怎樣才能從文件中讀取這些數據?我試圖用InputStreamReaderBufferedReaderFileInputStream,但我的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(); 
     } 
    } 

有什麼不對這種方法嗎?

回答

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

有在你的代碼的幾個問題:

1)的InputStreamReader獲取InputStream作爲參數不是一個閱讀器。請參閱http://docs.oracle.com/javase/6/docs/api/java/io/InputStreamReader.html

2)FileInputStream也不接受Reader作爲參數(它需要一個File,一個FileDescriptor或一個String)。請參閱:http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html

3)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:這將是更容易爲別人幫你,如果你提供確切的錯誤消息,甚至更好的堆棧跟蹤。

+0

非常感謝你。現在它完美的工作...... :) – marek 2013-04-22 14:20:49

0

簡單錯誤:無法解析構造函數'FileInputStream(java.io.FileReader)',API中不存在所需的構造函數。

你原來的代碼是:

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

所以閱讀你需要

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

但不需PrintReader(不存在),因此,所有你需要的是:

new BufferedReader(new FileReader(FileName)) 

PrinterWriter將對象的格式化表示形式打印到文本輸出流中,但在閱讀文本時始終格式化ed,所以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); 
     } 

    } 
}