Читать специфическую строку в текстовом файле на Java - PullRequest
5 голосов
/ 17 марта 2012

Файл ListeMot.txt содержит 336529 строк

Как перехватить конкретную строку.

Это мой код

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

Почему я не могу получить слово =lnr.readLine (nbr); ??

Спасибо

PS Я новичок в Java!

Ответы [ 3 ]

3 голосов
/ 17 марта 2012

Чтобы получить N-ю строку, вам нужно прочитать все строки перед ней.

Если вы делаете это более одного раза, наиболее эффективным способом может быть загрузка всех строк в память первой.


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

Кстати: параметр theWord предназначен для использования?

1 голос
/ 17 марта 2012

LineNumberReader отслеживает только количество прочитанных строк, но не дает произвольного доступа к строкам в потоке.

1 голос
/ 17 марта 2012

В Java API нет метода, подобного readLine(int lineNumber). Вы должны прочитать все предыдущие строки с определенного номера строки. Я манипулировал вашим вторым методом, взгляните на него:

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

Приведенный выше код не является безошибочным, поскольку я предполагаю, что вы знаете предел номера строки в данном текстовом файле, т.е. если мы сгенерируем случайное число, которое больше фактического номера строки, код перейдет в бесконечный петля, будь осторожен.

Еще одна проблема, номера строк начинаются с 1, поэтому я предлагаю вам изменить метод генерации случайных чисел следующим образом:

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