2013-04-21 27 views
7

Tôi có phương pháp ghi một số dữ liệu vào tệp. Tôi sử dụng PrintWriter, BufferedWriterFileWriter như hình dưới đâyJava - làm thế nào để đọc từ tập tin khi tôi sử dụng PrintWriter, BufferedWriter và FileWriter để viết?

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

Bây giờ làm thế nào tôi có thể đọc dữ liệu này từ tập tin? Tôi cố gắng để sử dụng InputStreamReader, BufferedReaderFileInputStream, nhưng NetBeans của tôi chỉ cho tôi một thông báo lỗi

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

Điều gì là sai với phương pháp này?

Trả lời

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

Có một số sự cố trong mã của bạn:

1) InputStreamReader lấy InputStream làm đối số chứ không phải Reader. Xem http://docs.oracle.com/javase/6/docs/api/java/io/InputStreamReader.html.

2) FileInputStream không chấp nhận một Reader làm đối số nữa (phải mất một Tệp, một FileDescriptor hoặc một Chuỗi). Xem: http://docs.oracle.com/javase/6/docs/api/java/io/FileInputStream.html

3) BufferedReader đọc dòng Tệp theo dòng bình thường. Phương thức read() chỉ đọc một ký tự đơn.

Một giải pháp khả thi có thể là:

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

Btw: Sẽ dễ dàng hơn cho những người khác để giúp bạn, nếu bạn cung cấp chính xác lỗi tin nhắn hoặc thậm chí tốt hơn các StackTrace.

+0

Thank you very much. Bây giờ nó hoạt động hoàn hảo ... :) – marek

0

Lỗi đơn giản: Không thể giải quyết hàm tạo 'FileInputStream (java.io.FileReader)', hàm tạo yêu cầu không tồn tại trong API.

Bạn mã ban đầu là:

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

để cho việc đọc bạn cần

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

nhưng PrintReader là không cần thiết (không tồn tại), vì vậy tất cả bạn cần là:

new BufferedReader(new FileReader(FileName)) 

PrinterWriter in các biểu diễn được định dạng của các đối tượng thành luồng văn bản-đầu ra, nhưng khi đọc văn bản luôn luôn là formatt ed, do đó PrinterReader không tồn tại.

Bạn đang viết từng dòng, dòng nên đọc bởi dòng cũng :) Ví dụ:

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

hoặc tốt hơn (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); 
     } 

    } 
} 
Các vấn đề liên quan