檔案的插入和刪除一行文字

2021-05-24 12:05:36 字數 3061 閱讀 1771

檔案中的插入一行字元目前沒找到什麼好方法,只能將資料讀出來,然後在該插入的地方插入string後再寫回去

/**

* 在檔案裡面的指定行插入一行資料

* * @param infile

* 檔案

* @param lineno

* 行號

* @param linetobeinserted

* 要插入的資料

* @throws exception

* io操作引發的異常

*/public static void insertstringinfile(file infile, int lineno,

string linetobeinserted) throws exception

// 輸出讀取到的資料

out.println(thisline);

// 行號增加

i++;

} out.flush();

out.close();

in.close();

// 刪除原始檔案

infile.delete();

// 把臨時檔案改名為原檔名

outfile.renameto(infile);

}

刪除當然也可以像上面那樣,但是如果檔案比較大,那就是個工程了。

先看看下面的關於randomaccessfile的seek

public voidseek(long pos)

throws ioexception

設定到此檔案開頭測量到的檔案指標偏移量,在該位置發生下乙個讀取或寫入操作。偏移量的設定可能會超出檔案末尾。偏移量的設定未超出檔案末尾不會改變檔案的長度。只有在偏移量的設定超出檔案末尾的情況下對檔案進行寫入才會更改其長度。

引數:pos- 從檔案開頭以位元組為單位測量的偏移量位置,在該位置設定檔案指標。

丟擲:ioexception- 如果pos小於0或者發生 i/o 錯誤。

說的很是讓人迷糊。

下面就乙個小例子說明你:

在專案目錄下建乙個test資料夾,在該資料夾中新建乙個aa.txt的檔案。在裡面寫上abcdefghijklmnopqrstuvwsyz

原始檔內容如下(main方法部分):

string basepath=system.getproperty("user.dir");

string filename="aa.txt";

system.out.println(basepath);

file file=new file(basepath+"/test", filename);

randomaccessfile accessor=new randomaccessfile(file, "rw");

system.out.println("檔案長度:"+accessor.length());

accessor.seek(accessor.length());

accessor.writebytes("[first add]");

accessor.close();

程式執行結果為:

abcdefghijklmnopqrstuvwsyz[first add]

abcdefghijklmnopqrstuvwsyz[first add]
現在修改一下程式:

string basepath=system.getproperty("user.dir");

string filename="aa.txt";

system.out.println(basepath);

file file=new file(basepath+"/test", filename);

randomaccessfile accessor=new randomaccessfile(file, "rw");

system.out.println("檔案長度:"+accessor.length());

accessor.seek(3);

accessor.writebytes("[second add]");

accessor.close();

程式執行結果為:

abc[second add]pqrstuvwsyz[first add]

abc[second add]pqrstuvwsyz[first add]
比較兩次結果我們可以得出以下的結論:

seek()方法是移動檔案操作的指標的,而其引數就是位移量。

我們第一次將位移量設定為整個檔案的長度,則指標指向了檔案的末尾,我們向檔案寫入[first add],則會出現在檔案的結尾。

第二次,我們將位移量設定為3,則檔案指標指向了第三個字元c的後面,我們向我檔案寫入[second add],則該文字出現在c的後方,同時覆蓋掉了其所佔位置的原來的字元。

這樣如果是中間的文字,可以用空格符(或者其他無意義的字元)來進行乙個替換。乙個簡單在第一行插入乙個標識字串。

public static void writeoffset(string name, string str)   

if (str == null || str.length() <= 0)

randomaccessfile rf;

try else

} catch (filenotfoundexception e) catch (ioexception e) catch (exception e)

}

參考,http://yuanpan1987.iteye.com/blog/668204

一行文字居中多行文字左對齊

lang en charset utf 8 titletitle head 當文字為一行是,則p的寬度小於div的寬度,p標籤居中顯示在盒子內,文字也就居中了 當大於一行時,p的寬度和div的寬度是一致的 文字就居左對齊了 rk box display inline block使p的寬度根據文字的寬...

一行文字中的最長單詞

問題 已知 string sentence we were her pride of 10 she named us benjamin,phoenix,the pordigal and perspicacious pacific suzanne.要求 計算sentence中有多少個單次,並指出其中最...

統計一行文字的單詞個數

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 張彤彧 浙江大學 本題目要求編寫程式統計一行字元中單詞的個數。所謂 單詞 是指連續不含空格的字串,各單詞之間用空格分隔,空格數可以是多個。輸入格式 輸入給出一行字元。輸出格式 在一行中輸出...