2013-04-28 24 views
28

Xin lỗi nếu đây là một câu hỏi rõ ràng, nhưng tôi dường như không thể nhận được nó. Tôi đang làm bài tập cho khóa học Cấu trúc dữ liệu. Nó liên quan đến việc kéo dữ liệu từ một tệp .dat đơn giản. Chúng tôi chưa bao giờ sử dụng bất kỳ tùy chọn truy cập tệp nào trong Java trước đây, vì vậy giáo sư chỉ cung cấp cho chúng tôi mã làm việc cho phần đó. Vì vậy, một lớp được gọi là 'FileReadExample' tạo ra một đối tượng người đọc đệm mới, mở một tệp, và sau đó được cho là tung ra một loạt dữ liệu về tệp đó. Nhưng tôi không thể truy cập bất kỳ dữ liệu nào cả. Trong một tệp testMain riêng biệt, tôi tạo một đối tượng FileReadExample mới có tên là fr và sau đó cố gắng in ra những thứ như fr.readLine() từ đó, nhưng nó cho tôi biết không có phương thức như vậy. Tôi chắc chắn rằng tôi đang thiếu một cái gì đó đáng kinh ngạc dễ dàng.Làm thế nào để sử dụng Bộ đọc đệm trong Java

EDIT - Các giáo sư Mã số:

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

public class FileReadExample 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("got here"); 
     try 
     { 
      BufferedReader in = new BufferedReader(new FileReader(new File("sample-file.dat"))); 
      System.out.println("File open successful!"); 

      int line = 0; 
      for (String x = in.readLine(); x != null; x = in.readLine()) 
      { 
       line++; 
       System.out.println(x); 
       if (line <= 3) 
       { 
        String[] tokens = x.split(" "); 
        System.out.println("Number of tokens in line " + line + ": " + tokens.length); 
        System.out.println("The tokens are:"); 
        for (String token : tokens) 
        { 
         System.out.println(token); 
        } 
       } 
       else 
       { 
        String[] tokens = x.split("\\|"); 
        System.out.println("Number of tokens in line " + line + ": " + tokens.length); 
        System.out.println("The tokens are:"); 
        for (String token : tokens) 
        { 
         System.out.println(token); 
        } 
        Integer[] values = new Integer[tokens.length]; 
        Integer sum = 0; 
        for (int i = 0; i < tokens.length; i++) 
        { 
         sum += Integer.parseInt(tokens[i]); 
        } 
        System.out.println("Sum: " + sum); 
       } 
      } 
     } catch (IOException e) 
     { 
      System.out.println("File I/O error!"); 
     } 
    } 
} 

tôi có thể gửi mã vị giáo sư ra, nhưng tôi không thể tìm ra cách để có được những định dạng đúng trong các bài viết. Tôi có đọc đúng là tôi phải đặt bốn dấu cách trước mỗi dòng để có được mã định dạng đúng ở đây không? Không có cách nào để chặn toàn bộ một loạt mã cùng một lúc? Một lần nữa, tôi cảm thấy như tôi đang thiếu một cái gì đó cực kỳ dễ dàng ở đó.

Cảm ơn.

+0

để thực hiện một khối mã, nhấn thanh dấu cách 8 lần và dán mã của bạn. – user2277872

+0

nếu bạn google nó ra, tôi chắc chắn bạn phải nhận được bó của các ví dụ! – sanbhat

+0

Đã bị xóa. Và YouTubed. Và tìm kiếm ở đây. Bằng mọi thứ tôi có thể thấy, nó sẽ hoạt động. Điều duy nhất mà tôi thấy rằng có thể là vấn đề là nó là tất cả chứa trong một try/catch. Nhưng tôi không chắc tại sao điều đó lại quan trọng. –

Trả lời

59

Hãy thử này để đọc một tập tin:

BufferedReader reader = null; 

try { 
    File file = new File("sample-file.dat"); 
    reader = new BufferedReader(new FileReader(file)); 

    String line; 
    while ((line = reader.readLine()) != null) { 
     System.out.println(line); 
    } 

} catch (IOException e) { 
    e.printStackTrace(); 
} finally { 
    try { 
     reader.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
+5

Bạn phải đặt mã của bạn trong khối try-catch bởi vì bạn đang đọc một tập tin và một ngoại lệ có thể được ném vào bất kỳ cơ hội –

+0

Nếu phương pháp ném một IOException bạn không cần khối try-catch. BTW câu trả lời khác cho câu hỏi này cũng thiếu khối try-catch, vì vậy đây chỉ là một ví dụ làm thế nào để đọc một tập tin. –

+0

Phương pháp của bạn ở đâu lols xem http://stackoverflow.com/a/16265790/2277645 –

1

Theo như tôi hiểu fr là đối tượng của lớp FileReadExample của bạn. Vì vậy, nó là rõ ràng nó sẽ không có bất kỳ phương pháp như fr.readLine() nếu bạn không tạo ra một mình.

thứ hai, tôi nghĩ rằng một hàm tạo đúng của lớp BufferedReader sẽ giúp bạn thực hiện nhiệm vụ của mình.

String str; 
BufferedReader buffread = new BufferedReader(new FileReader(new File("file.dat"))); 
str = buffread.readLine(); 
. 
. 
buffread.close(); 

điều này sẽ giúp bạn.

+0

Điều đó có ý nghĩa.Vì vậy, FileReader tạo đối tượng Buffered Reader của riêng nó được gọi là 'in'. Vì vậy, tôi có một đối tượng trong testMain của tôi được gọi là fr, nên có trong nó một đối tượng BufferedReader mà có thể truy cập được. Từ thử nghiệm chính, làm thế nào để tôi gọi đó? fr.in.readLine() không hoạt động. Mã mà bạn đã cung cấp ở đây phải có trong FileReader hoặc chính? Cảm ơn, và một lần nữa, xin lỗi nếu tôi thiếu một cái gì đó hiển nhiên. –

+0

cách bạn tạo một phương thức bên trong lớp FileReadExample sử dụng phương thức in.readLine() và trả về một giá trị String. Vì vậy, ví dụ như. nếu bạn tạo một phương thức gọi là String readALine() trả về str. bạn có thể sử dụng nó trong lớp testMain của bạn như thế này-> mystr = fr.readALine(); –

+0

Bùng nổ. Điều đó có nó. Phương pháp Accessor, nên có suy nghĩ về điều đó. Cảm ơn. –

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