Чтение строк данных из текстовых файлов с использованием Java - PullRequest
0 голосов
/ 23 декабря 2010

У меня есть текстовый файл с количеством строк х.каждая строка содержит целое число.Когда пользователь нажимает кнопку, действие выполняется через ActionListener, где он должен перечислить все значения, как показано в текстовом файле.Тем не менее, сейчас у меня установлено значение «linenum», равное 10, а это значит, что я уже сказал коду, что он работает только с 10 строками текстового файла.Таким образом, если мой текстовый файл имеет только 3 строки / строки данных ... он будет перечислять эти строки, а для остальных 7 строк он будет выдавать «ноль».

Я помню, что есть способ использовать многоточие, чтобы программа знала, что вы не знаете точное значение, но в конце она рассчитывает его на основе предоставленной информации.Где моя приведенная информация будет количество строк с цифрами (данные).

Ниже приведена часть кода.

private class thehandler implements ActionListener{     
public void actionPerformed(ActionEvent event){
BufferedReader inputFile=null;          
try {
    FileReader freader =new FileReader("Data.txt");
    inputFile = new BufferedReader(freader); 

    String MAP = "";
    int linenum=10;
    while(linenum > 0)
        { 
    linenum=linenum-1; 
    MAP = inputFile.readLine();//read the next line until the specfic line is found 

    System.out.println(MAP);
    }

    } catch( Exception y ) {    y.printStackTrace();    } 

}}  

Ответы [ 3 ]

1 голос
/ 23 декабря 2010

Проверьте значение, которое возвращается из BufferedReader.readLine (), если это нулевая остановка цикла, например:

BufferedReader reader = new BufferedReader(new FileReader("Data.txt"));
try {
    for (String line; (line = reader.readLine()) != null;) {
        System.out.println(line);
    }
} finally {
    reader.close();
}

РЕДАКТИРОВАТЬ: забыл требование занять первые 10 строк, вы можете изменить вышекод для помещения вывода в список и возврата списка, затем вы можете отфильтровать его с помощью функции, подобной этой:

public List<String> takeFirst(int howMany, List<String> lines) {
 return lines.size() <= howMany ? lines : lines.subList(0, howMany);
}

Если файл огромен, то это, конечно, будет неэффективно, и если это имеет значениев итоге вы сделаете что-то вроде:

BufferedReader reader = new BufferedReader(new FileReader("Data.txt"));
try {
    int linesRead = 0;
    for (String line; (line = reader.readLine()) != null && linesRead < 10;) {
        System.out.println(line);
        linesRead += 1;
    }
} finally {
    reader.close();
}

, что более уродливо, но читает только те строки, которые вам нужны.

1 голос
/ 23 декабря 2010

просто поставьте вместо linenum > 0 следующую строку (MAP = inputFile.readLine()) != null и удалите следующие строки, linenum=linenum-1; MAP = inputFile.readLine();, и в следующий раз может помочь поиск в Google +) Нулевое значение последней строки не будет напечатано, потому что оно устанавливает строку в качестве текущей строки и сравнивает ее с нулевым значением, поэтому, если последняя строка является нулевой, она не будет печатать ее, а как насчет ограничения в 10 строк? Вы можете сделать это легко, вы можете просто добавить индекс в цикл for и индексировать и проверить с &&, если i ниже 10

0 голосов
/ 23 декабря 2010

Как насчет того, чтобы вы не печатали MAP, если его значение равно нулю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...