【问题标题】:Java. How to append text to top of file.txt [duplicate]爪哇。如何将文本附加到file.txt的顶部[重复]
【发布时间】:2013-05-15 22:22:20
【问题描述】:

我需要通过 Java 在文本文件的开头添加文本。

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

Peter
John
Alice

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

Jennifer 

应该是:

Jennifer
Peter
John
Alice

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

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

我已经尝试过了,但这只会删除文件中的所有数据而不插入任何文本:

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

感谢您的帮助。

【问题讨论】:

  • 是否需要使用ArrayList?@Rimantė Baltiejūtė
  • 我不这么认为,我只是发布了我尝试过的众多解决方案中的 1 个。
  • 阅读我的代码,看看它是否有用:D

标签: java file text append java-io


【解决方案1】:
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();

思路是全部读完,在前面加上字符串。删除旧文件。使用编辑的字符串创建新文件。

【讨论】:

  • 谢谢你的回答,但是在这行BufferedReader br = new BufferedReader(fis);我得到了错误:The Constructor BufferedReader(FileInputStream) is undefined
  • @Rimantė Baltiejūtė 抱歉遗漏了一些东西 BufferecReader(new InputStreamReader(new FileInputStream()))
  • 请使用 StingBuffer
  • 你应该把例子改成new BufferedReader(new InputStreamReader
【解决方案2】:

您可以使用RandomAccessFile寻找光标到0th 的位置,使用seek(long position) 方法,然后再开始编写。

this 线程中所述

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

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

【讨论】:

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

下面的代码对我有用。同样,它显然会替换文件开头的字节。如果您可以确定将提前完成多少字节的替换,那么您可以使用它。否则,请按照较早的答案或查看此处Writing in the beginning of a text file Java

    String str = "Jennifer";  
    byte data[] = str.getBytes();       

    try {                           
            RandomAccessFile f = new RandomAccessFile(new File("src/lt/test.txt"), "rw");
            f.getChannel().position(0);         
            f.write(data);
            f.close();
    } catch (IOException e) {       
            e.printStackTrace();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2014-01-20
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多