Написание текста со спины

Как и в заголовке, я хочу написать свой текст со спины и войти в текстовый файл. Во-первых, я читаю текст из текстового файла, затем я хочу сохранить его в текстовом файле, но пишу к концу. У меня нет идей, как исправить мой код. Мой код читает текстовый файл и пишет текстовый файл, но в том же порядке, от начала до конца.

Пример того, как это должно работать:

ввод текста:

aaaaa
bbbb
ccc
dd
f

вывод текста:

f
dd
ccc
bbbb
aaaaa

Мой код:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;

public class Loading {

    public static void main(String[] args) {
        try {

            BufferedReader br = new BufferedReader(new FileReader(
                    "file.txt.txt"));
            String line, txt = "";
            String[] splittedLine;
            while ((line = br.readLine()) != null) {
                txt += linia + "\n";
                splittedLine = line.split(" ");
            }
            System.out.println(txt);
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter("file2"));
            bw.write(txt);
            bw.newLine();
            bw.close();

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

}

4 ответа

Решение

Читать файл в строку

Записать строковые данные в файл, начиная с конца.

Для строк используйте массив String для хранения данных из файла и затем переходите от конца к началу массива.

Вот полная программа.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

public class Loading {

    public static void main(String[] args) {
        try {

            BufferedReader br = new BufferedReader(new FileReader(
                    "DB.xml"));
            String line, txt = "";
            List<String> lines = new ArrayList<String>();
            while ((line = br.readLine()) != null) {
                lines.add(line);
            }
            System.out.println(txt);
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter("file2"));
            for(int i=lines.size()-1; i>=0; i--){
            bw.write(lines.get(i));
            bw.newLine();
            }
            bw.close();

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

}

Вам понадобится список строк, так как вы не знаете заранее количество записей, поэтому вам нужно что-то, что может расти вместе с вашим кодом.

List<String> lines = new ArrayList<String>();

И добавьте все свои строки к нему

while ((line = br.readLine()) != null) {
    lines.add(line);
}

Затем запишите их в свой файл в обратном порядке:

for(int i = lines.size() - 1; i >= 0; i--) {
    bw.write(lines.get(i));
    bw.newLine();
}

Ваш код объединяет строку неправильно. Нужно добавить текст строки в начало строки, а не в конец, если вы пытаетесь изменить порядок.

txt = line + txt + "\n";  //original: txt += linia + "\n"

Но было бы лучше использовать объект StringBuilder для обработки конкатенации за вас. Что-то вроде...

StringBuilder txt = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
    txt.insert(0, line + "\n");
}
System.out.println(txt.toString());

Я согласен с тем, что подход с использованием массива в других ответах также будет работать, и, вероятно, его будет немного легче читать и поддерживать. Но подход StringBuilder ближе к тому, что у вас уже есть.

Он должен работать:

package test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;

/**
 *
 * @author 
 */
public class Read {
        public static void main(String[] args) {
        try {

            BufferedReader br = new BufferedReader(new FileReader(
                    "D:/file.txt"));
            String line, txt = "";
            ArrayList<String> lines = new ArrayList<String>();

            while ((line = br.readLine()) != null) {
                lines.add(line);
            }



            System.out.println(txt);
            br.close();

            BufferedWriter bw = new BufferedWriter(new FileWriter("D:/file2.txt"));
            for(int i = lines.size()-1; i>=0; i--){
                bw.write(lines.get(i));
                bw.newLine();
            }
            bw.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
Другие вопросы по тегам