2011-04-26 88 views

回答

6

您不能將數據插入到文件中。您可以使用RandomAccessFile覆蓋特定位置的數據。但是插入需要更改後面的所有數據。對於你的情況下,嘗試這樣的事情,而不是:

File file = new File("abhishek.txt"); 
Scanner scanner = new Scanner(file).useDelimiter("\n"); 
String line = scanner.next(); 
String newLine = line.substring(0, 5) + "Abhishek" + line.substring(5); 
FileWriter writer = new FileWriter(file); 
writer.write(newLine); 
writer.close(); 
3

一般而言,您需要讀取舊文件,修改內存中的內容並將其重新寫回。

這裏有很多選擇,關於你是一次讀取文件還是一次讀取一小段文件,無論是替換現有的文件等,但這通常是使用的模式。

8

你不能將數據插入文件...文件系統(一般)根本不支持這樣的操作。通常情況下,您會打開一個文件進行讀取,另一個文件進行寫入,將文件的第一部分從一個流複製到另一個文件,寫入額外部分,然後複製文件的第二部分。

如果您要替換原始文件,則需要將其刪除並將新文件移到原位。

有時將整個文件一次讀入內存可能會更簡單 - 這取決於您想要做什麼以及文件的大小。

2

你有三種選擇:

  1. 墊的原始入口有足夠的空間,RandomAccessFile中都可以使用(你不關心一些額外的尾隨空格容易,但效用有限
  2. 使用。模板引擎(StringTemplate,Velocity等),如果你這樣做了很多,可能工作太多,如果你這樣做只是一次
  3. 編寫你自己的簡單模板引擎,將它讀入內存做一個正則表達式替換並寫入它不是特別有效,但如果你有非常簡單和有限的使用,也許是最好的妥協即
2

我設法用RandomAccessFile的做到這一點:

enter image description here

有了這個,你得到完全包含文件的預期「我阿布舍克」的內容。 即使您在第一行之後想要保留在文件中的內容(這是我最初的問題:我有一個大文件,並且必須在某個字符串之後插入一些內容),而不是寫在文件的結尾,這更容易。

相關問題