2012-03-17 38 views
5

Tệp ListeMot.txt chứa 336529 DòngĐọc một dòng đặc biệt trong tệp txt trong Java

Cách bắt một dòng cụ thể.

này mã của tôi

int getNombre() 
{ 
    nbre = (int)(Math.random()*336529); 
    return nbre ; 
} 

public String FindWord() throws IOException{ 
    String word = null; 
    int nbr= getNombre(); 
    InputStreamReader reader = null; 
    LineNumberReader lnr = null; 
    reader = new InputStreamReader(new FileInputStream("../image/ListeMot.txt")); 
    lnr = new LineNumberReader(reader); 
    word = lnr.readLine(nbr); 
} 

Tại sao tôi không thể có được từ = lnr.readLine (NBR); ??

Cảm ơn

P.S Tôi mới sử dụng java!

+0

Tôi không thấy điểm mà bạn có thông số "theWord" nhưng thậm chí không cố gắng sử dụng nó trong mã của bạn .. – scamexdotexe

Trả lời

3

Để nhận dòng thứ N, bạn phải đọc tất cả các dòng trước nó.

Nếu bạn làm điều này nhiều lần, điều hiệu quả nhất để làm có thể là tải tất cả các dòng vào bộ nhớ trước.


private final List<String> words = new ArrayList<String>(); 
private final Random random = new Random(); 

public String randomWord() throws IOException { 
    if (words.isEmpty()) { 
     BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("../image/ListeMot.txt"))); 
     String line; 
     while ((line = br.readLine()) != null) 
      words.add(line); 
     br.close(); 
    } 
    return words.get(random.nextInt(words.size())); 
} 

BTW: Các tham số theWord có nghĩa là để được sử dụng?

+0

+1 Tôi đã sai (như đã được ghi chú) – MByD

1

Không có phương pháp nào như readLine(int lineNumber) trong API Java. Bạn nên đọc tất cả các dòng trước đó từ một số dòng cụ thể. Tôi đã thao túng phương pháp thứ 2 của bạn, hãy nhìn vào nó:

public void FindWord() throws IOException 
{ 
    String word = ""; 
    int nbr = getNombre(); 
    InputStreamReader reader = null; 
    LineNumberReader lnr = null; 
    reader = new InputStreamReader(new FileInputStream("src/a.txt")); 
    lnr = new LineNumberReader(reader); 

    while(lnr.getLineNumber() != nbr) 
     word = lnr.readLine(); 

    System.out.println(word); 
} 

Đoạn mã trên là không lỗi miễn phí kể từ khi tôi giả sử bạn biết giới hạn của số dòng trong file văn bản nhất định, tức là nếu chúng ta tạo ra một ngẫu nhiên số lớn hơn số dòng thực tế, mã sẽ đi vào vòng lặp vô hạn, hãy cẩn thận.

Một vấn đề khác, số dòng bắt đầu từ 1 vì vậy tôi đề nghị bạn thay đổi dòng ngẫu nhiên phương pháp tạo số của bạn như thế này:

int getNombre() 
{ 
    nbre = (int)(Math.random()*336529) + 1; 
    return nbre ; 
} 
1

Các LineNumberReader chỉ theo dõi số dòng đọc, nó không cho truy cập ngẫu nhiên vào các dòng trong luồng.

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