在文件裡增加一行的唯一方法就是讀取原始文件,然後寫入到一個臨時文件,同時寫入要插入的數據。然後刪除原始文件,再把臨時文件改名為原始文件名。
package net.java2000.io;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
/**
* 給文件增加一行數據。
*
* @author 趙學慶,Java世紀網(java2000.net)
*
*/
public class FileInsertRow {
public static void main(String args[]) {
try {
FileInsertRow j = new FileInsertRow();
j.insertStringInFile(new File(args[0]), Integer.parseInt(args[1]), args[2]);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 在文件裡面的指定行插入一行數據
*
* @param inFile
* 文件
* @param lineno
* 行號
* @param lineToBeInserted
* 要插入的數據
* @throws Exception
* IO操作引發的異常
*/
public void insertStringInFile(File inFile, int lineno, String lineToBeInserted)
throws Exception {
// 臨時文件
File outFile = File.createTempFile("name", ".tmp");
// 輸入
FileInputStream fis = new FileInputStream(inFile);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
// 輸出
FileOutputStream fos = new FileOutputStream(outFile);
PrintWriter out = new PrintWriter(fos);
// 保存一行數據
String thisLine;
// 行號從1開始
int i = 1;
while ((thisLine = in.readLine()) != null) {
// 如果行號等於目標行,則輸出要插入的數據
if (i == lineno) {
out.println(lineToBeInserted);
}
// 輸出讀取到的數據
out.println(thisLine);
// 行號增加
i++;
}
out.flush();
out.close();
in.close();
// 刪除原始文件
inFile.delete();
// 把臨時文件改名為原文件名
outFile.renameTo(inFile);
}
}