追加倒数第二行

时间:2014-04-30 08:44:34

标签: java android file append

我目前正在将阅读文件存储在List<String>中,将我的String添加到列表的倒数第二个位置,最后将我的列表写入原始文件。

它工作正常,因为我的文件只有20行,但我觉得这将是一个很长的过程,文件更大。

因此,我的问题是:是否有类似Append的方法来简单地选择要追加线条的位置?

1 个答案:

答案 0 :(得分:0)

只需打开带有附加模式的java.io.FileOutputStream,然后编写单个字符串。

使用此类的以下构造函数:

FileOutputStream(String name, boolean append)

这是为了追加到文件的末尾。

您可以使用java.io.RandomAccessFile在文件内的任何位置进行编辑。

编辑: 使用RandomAccessFile实现任务的示例代码。

import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.List;

public class InsertPenultimateLine {

    private static String nl = System.getProperty("line.separator");

    private static void usingRAF() throws Exception {
        String fileName = "somefile.txt";
        String myLine = "blah-blah-blah";

        RandomAccessFile raf = new RandomAccessFile(fileName, "rw");

        List<Byte> bytes = new ArrayList<Byte>();
        long len = raf.length();
        long index = len-1;
        for(;index>0;index--) {
            raf.seek(index);
            byte b = raf.readByte();
            if(b == 10) {
                break;
            }
            bytes.add(0, b);
        }

        byte[] rawBytes = new byte[bytes.size()];
        for(int j=0;j<bytes.size();j++) {
            rawBytes[j] = bytes.get(j);
        }
        String str = new String(rawBytes);
        str = myLine + nl + str;

        raf.seek(index + 1);
        raf.write(str.getBytes());

        raf.close();
    }

    public static void main(String[] args) throws Exception {
        usingRAF();
    }
}