-2

如标题所示,我想从后面写我的文本并输入到文本文件中。首先,我从文本文件中读取文本,接下来我想将其保存在文本文件中,但在末尾写入。我不知道如何修复我的代码。我的代码读取文本文件,并写入文本文件,但顺序相同,从头到尾。

示例它必须如何工作:

输入文本:

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

4 回答 4

1

您将需要一个行列表,因为您事先不知道条目的数量,因此您需要一些可以随着您的代码增长的东西。

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();
}
于 2013-01-03T23:03:21.777 回答
1

读取文件到字符串

从末尾开始将字符串数据写入文件。

对于行,使用字符串数组存储文件中的数据,然后从数组的末尾遍历到开头。

这是完整的程序。

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();
        }
    }

}
于 2013-01-03T23:01:00.920 回答
1

您的代码错误地连接了字符串。如果您试图颠倒顺序,它需要将行文本添加到字符串的开头而不是末尾。

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 方法更接近您已有的方法。

于 2013-01-03T23:24:26.350 回答
0

它应该工作:

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();
        }
    }
}
于 2013-01-03T23:16:51.747 回答