Можно ли перевернуть каждую строку файла с помощью BufferedReader?

Скажем, я импортирую файл, содержащий строки. Я хотел бы перевернуть этот файл, рекурсивно выводя хвост последовательности, за которым следует заголовок последовательности. Возможно ли это с помощью BufferedReader? Или мне сначала нужно будет импортировать эти строки в список? Я должен сделать это с рекурсией.

Так, например, у меня есть файл, содержащий следующее:

Hi
My
Name
Is
Mark

Я хотел бы, чтобы он выводился в обратном порядке в другом файле:

Mark
Is
Name
My
Hi

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

public void Reverse(BufferedReader br, PrintWriter pw) {
    try {
        String headLine = br.readLine();
        if (headLine != null) {
            Reverse(br, pw);
            pw.println(br.readLine());
        }
        pw.println(headLine);      
    } //try

person AkshaiShah    schedule 27.04.2012    source источник
comment
Не могли бы вы привести пример, чтобы мы поняли, что именно вы спрашиваете? :)   -  person Jean Logeart    schedule 27.04.2012
comment
Если это домашнее задание, пожалуйста, отметьте его как таковое   -  person D.Shawley    schedule 27.04.2012
comment
Пожалуйста, покажите часть вашего кода. Люди не будут писать это для вас.   -  person Gray    schedule 27.04.2012
comment
@Gray добавил рекурсивный метод выше.   -  person AkshaiShah    schedule 27.04.2012
comment
Пожалуйста, отредактируйте свой код и покажите нам немного Reverse или это все?   -  person Gray    schedule 27.04.2012
comment
@Gray Я добавил полный код для Reverse выше :)   -  person AkshaiShah    schedule 27.04.2012
comment
давайте продолжим это обсуждение в чате   -  person AkshaiShah    schedule 27.04.2012


Ответы (3)


Он должен использовать рекурсию

Вот рекурсивное решение:

  1. прочитать одну строку из файла;
  2. рекурсивно перевернуть оставшуюся часть файла;
  3. выпишите строку, прочитанную на шаге 1.

Так как это домашнее задание, я оставляю вам самим разобраться, как перевести это в реальный код Java.

person NPE    schedule 27.04.2012
comment
Он должен использовать рекурсию :) - person AkshaiShah; 27.04.2012
comment
Спасибо, я думаю, что у меня есть правильное представление ... просто не знаю, как рекурсивно читать хвостовую строку. Это код, который у меня есть: String headLine = input.readLine(); String currentLine; if (headLine != null) { Reverse(input, output); output.println(currentLine); }//if output.println(headLine); - person AkshaiShah; 27.04.2012
comment
@akshai5050: У тебя правильная идея. Я не уверен, что понимаю, с чем именно у вас возникают трудности. - person NPE; 27.04.2012
comment
Я не уверен, как я могу читать и выводить последнюю строку файла при каждом рекурсивном вызове, чтобы строки выводились в обратном порядке. - person AkshaiShah; 27.04.2012
comment
@akshai5050: Тебе не нужно. Достаточно того, что у вас есть (за исключением того, что headLine и currentLine должны быть одним и тем же). Я предлагаю вам попробовать поэкспериментировать с кодом, который у вас есть. - person NPE; 27.04.2012
comment
Я сделал небольшое изменение, вместо output.println(currentLine) теперь я делаю output.println(input.readLine());. Это нормально, но когда я проверяю выходной файл, он пуст. - person AkshaiShah; 27.04.2012
comment
Я пытался сделать headLine и currentLine одинаковыми, но это все равно не работает. - person AkshaiShah; 27.04.2012

Вместо того, чтобы сразу дать вам решение, вы, вероятно, не хотите думать об этом с точки зрения головы и хвоста. Подумайте об этом с точки зрения строк, а затем прочитайте ответы и обсуждения на этот ТАК вопрос. Вы можете применить ту же технику.

person D.Shawley    schedule 27.04.2012

Во что бы то ни стало прочитайте все в LinkedList, а затем добавьте к нему рекурсию. Вот только Collection Framework очень громоздка для такой работы.

person Marko Topolnik    schedule 27.04.2012