Java的.如何将文本附加到file.txt的顶部

25 java text file append java-io

我需要通过Java添加文本到文本文件的开头.

例如,我有带有数据的test.txt文件:

Peter
John
Alice
Run Code Online (Sandbox Code Playgroud)

我需要添加(到文件顶部):

Jennifer 
Run Code Online (Sandbox Code Playgroud)

它应该是:

Jennifer
Peter
John
Alice
Run Code Online (Sandbox Code Playgroud)

我有部分代码,但它将数据附加到文件末尾,我需要将文本添加到文件顶部:

    public static void irasymas(String irasymai){
        try {
         File file = new File("src/lt/test.txt");

                if (!file.exists()) {
                file.createNewFile();
            }

            FileWriter fw = new FileWriter(file.getAbsoluteFile(), true);
            BufferedWriter bw = new BufferedWriter(fw);
            bw.write(irasymai+ "\r\n");
            bw.close();
} 
       catch (IOException e) {
        e.printStackTrace();                
        }
    }
Run Code Online (Sandbox Code Playgroud)

我试过这个,但这只删除了文件中的所有数据而没有插入任何文本:

public static void main(String[] args) throws IOException {
        BufferedReader reader = null;
        BufferedWriter writer = null;
        ArrayList list = new ArrayList();

        try {
            reader = new BufferedReader(new FileReader("src/lt/test.txt"));
            String tmp;
            while ((tmp = reader.readLine()) != null)
                list.add(tmp);
            OUtil.closeReader(reader);

            list.add(0, "Start Text");
            list.add("End Text");

            writer = new BufferedWriter(new FileWriter("src/lt/test.txt"));
            for (int i = 0; i < list.size(); i++)
                writer.write(list.get(i) + "\r\n");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            OUtil.closeReader(reader);
            OUtil.closeWriter(writer);
        }
    }
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

Jef*_*Lee 5

File mFile = new File("src/lt/test.txt");
FileInputStream fis = new FileInputStream(mFile);
BufferedReader br = new BufferedReader(fis);
String result = "";
String line = "";
while( (line = br.readLine()) != null){
 result = result + line; 
}

result = "Jennifer" + result;

mFile.delete();
FileOutputStream fos = new FileOutputStream(mFile);
fos.write(result.getBytes());
fos.flush();
Run Code Online (Sandbox Code Playgroud)

念完所有内容,在前面添加字符串。删除旧文件。使用eied String创建新文件。


san*_*hat -3

在开始写入之前,您可以使用RandomAccessFile并使用方法来查找光标的0th位置。seek(long position)

正如本线程中所解释的

RandomAccessFile f = new RandomAccessFile(new File("yourFile.txt"), "rw");
f.seek(0); // to the beginning
f.write("Jennifer".getBytes());
f.close();
Run Code Online (Sandbox Code Playgroud)

编辑:正如下面许多评论所指出的,此解决方案从头开始覆盖文件内容。要完全替换内容,可能必须删除重新写入文件。

  • 覆盖第一行。 (11认同)
  • 答案是错误的!!! (9认同)
  • 答案不正确,因为 RandomAccessFile 会从 f.seek(position); 的位置覆盖文件的当前内容。最好将文件转换为字符串并进行字符串操作 (5认同)
  • 这段代码是覆盖还是插入? (3认同)
  • 这段代码不起作用。它实际上替换文件中的现有字节,而不是插入。 (3认同)