Подтвердить что ты не робот

Ява. Как добавить текст в начало файла file.txt

Мне нужно добавить текст в начало текстового файла через 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);
        }
    }

Благодарим вас за помощь.

4b9b3361

Ответ 1

Вы можете использовать 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();

Изменить: Как указано ниже многими комментариями, это решение перезаписывает содержимое файла с самого начала. Чтобы полностью заменить содержимое, файл, возможно, придется удалить и переписать.

Ответ 2

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

Идея читается всем, добавьте строку спереди. Удалить старый файл. Создайте новый файл с выделенной строкой.

Ответ 3

Следующий код работал у меня. Снова он, очевидно, заменит байты в начале файла. Если вы можете определить, сколько байтов замены будет сделано заранее, вы можете использовать это. В противном случае следуйте более ранним ответам или посмотрите здесь Написание в начале текстового файла 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();
    }