Как прочитать файл от конца до начала? - PullRequest
0 голосов
/ 28 декабря 2011

Как прочитать файл из конца в начало моего кода,

  try                
   {
      String strpath="/var/date.log";
      FileReader fr = new FileReader(strpath);
      BufferedReader br = new BufferedReader(fr);
      String ch;
      String[] Arr;
      do 
      {
        ch = br.readLine();
        if (ch != null)
        out.print(ch+"<br/>");   
      } 
      while (ch != null);
      fr.close();
    }
    catch(IOException e){
    out.print(e.getMessage());
  }

Ответы [ 3 ]

3 голосов
/ 28 декабря 2011

Вы можете использовать класс RandomAccessFile.Либо просто читайте в цикле от длины файла до 0, либо используйте удобные сторонние переносы, такие как http://mattfleming.com/node/11

1 голос
/ 28 декабря 2011

Если вам нужно напечатать строки в обратном порядке:

  1. Прочитать все строки в списке
  2. Перевернуть их
  3. Написать их обратно

код:

List<String> lines = new ArrayList<String>();
String curLine;
while ( (curLine= br.readLine()) != null) {
  lines.add(curLine);
}
Collections.reverse(lines);
for (String line : lines) {
  System.out.println(line);
}
0 голосов
/ 28 декабря 2011

Если вы не хотите использовать временные данные (для обращения к файлу), вам следует использовать RandomAccessFile class.

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

List<String> data = new LinkedList<String>();

Если вам нужны строки в обратном порядке, введите:

out.print(ch+"<br/>");

сделать

data.add(ch);

И после прочтения всего файла вы можете использовать

Collections.reverse(data);

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

P.S. Для печати (например, в системный поток вывода) вы должны выполнять итерации по каждому элементу в коллекции.

for (String line : data) {
   out.println(line);
}

Если вы используете просто out.print(data), это вызовет метод data.toString() и распечатает его результат. Стандартная реализация toString() не будет работать так, как вы ожидали. Он вернет что-то вроде типа объекта и номера.

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