有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从后面编写文本

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

它必须如何工作的示例:

输入文本:

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) 个答案

  1. # 1 楼答案

    它应该在以下方面发挥作用:

    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();
            }
        }
    }
    
  2. # 2 楼答案

    您的代码未正确连接字符串。如果试图颠倒顺序,则需要将行文本添加到字符串的开头,而不是末尾

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

  3. # 3 楼答案

    将文件读取为字符串

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

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

    这是完整的程序

    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();
            }
        }
    
    }
    
  4. # 4 楼答案

    您需要一个行列表,因为您事先不知道条目的数量,所以您需要一些可以随代码增长的内容

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