Написание текста со спины
Как и в заголовке, я хочу написать свой текст со спины и войти в текстовый файл. Во-первых, я читаю текст из текстового файла, затем я хочу сохранить его в текстовом файле, но пишу к концу. У меня нет идей, как исправить мой код. Мой код читает текстовый файл и пишет текстовый файл, но в том же порядке, от начала до конца.
Пример того, как это должно работать:
ввод текста:
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();
}
}
}