BEN 發問時間: 電腦與網際網路程式設計 · 1 0 年前

JAVA取得txt檔字串位置再修改內容(20點)

我有個txt檔內容如下:

My name is David and I like sleep every night.

My favorite sport is baseball.

我現在要將內容裡的'David'改成'Ben'

還有把'baseball' 改成'softball'

但目前爬文看到的只能新增新句子再最後面

無法改寫已存在的內容

而且我目前知道可以用RandomAccessFile讀取出檔案

但是RandomAccessFile只能從固定給予的位置插入新字串

但是txt檔案內容太長時根本不知道'David'這個字串的起始位置

所以我目前就無法先取得字串起始位置後再用writeUTF()方法寫入新的字串

請各位資深的JAVA高手幫幫我解開這問題,謝謝!

已更新項目:

我要補充一下這是在同一個txt檔案下的作業

要透過程式來取的要被修改的字串(David)位置

然後再相同的位置填入新的字串(Ben)

最終結果是要新的字串(Ben)把舊的字串(David)取代掉

且完全都是要使用程式來更新內容

2 個解答

評分
  • 吉他
    Lv 5
    1 0 年前
    最佳解答

    import java.io.*;

    /**

    * 修改檔案某個字內容

    * 2010/03/28

    * @author 吉他手

    */

    public class LoadChangeTxt {

    public LoadChangeTxt() {

    }

    /**

    * 取得檔案所有內容

    * @param path 檔案路徑

    * @return 文字檔內容(String)

    */

    public String getFileText(String path){

    StringBuffer strBuf = new StringBuffer();

    try {

    BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(path),"utf8" ));

    while(br.ready()) {

    String brStr = br.readLine();

    if(brStr.length() > 0){

    //處理讀取BOM( byte-order mark )格式檔案,在讀取utf8檔案的開頭會有utf8檔案格式的標記,需略過此標記再重串內容,標記16進位EF BB BF

    int c = brStr.charAt(0);

    if(c == 65279){

    brStr = brStr.substring(1, brStr.length());

    }

    strBuf.append(brStr);

    }

    }

    br.close();

    }catch(IOException e){

    e.printStackTrace();

    }

    return strBuf.toString();

    }

    /**

    * 將 String內容寫入檔案

    * @param path 檔案路徑

    * @param txt 要寫入的文字內容

    * @return 回傳1寫檔成功 | 回傳-1 寫檔失敗

    */

    public int writeFileText(String path,String txt){

    try {

    BufferedWriter br = new BufferedWriter(new FileWriter(path));

    br.write(txt);

    br.close();

    }catch(IOException e){

    e.printStackTrace();

    return -1;

    }

    return 1;

    }

    /**

    * 改變檔案文字內容

    * @param path 檔案路徑

    * @param oldWord 要被替換的字

    * @param word 新的字

    * @return 修改過的文字內容

    */

    public String changeTxtWord(String path, String oldWord,String word){

    String txt = getFileText(path); //取得檔案內容

    txt = txt.replaceAll(oldWord, word); //換掉某個字

    writeFileText(path,txt); //將換過的檔案內容寫回去

    return txt;

    }

    /**

    * @param args

    */

    public static void main(String[] args) {

    LoadChangeTxt lct = new LoadChangeTxt(); //建立處理檔案內容物件

    lct.changeTxtWord("myTxt.txt", "David", "Ben");//將David換成Ben

    lct.changeTxtWord("myTxt.txt", "baseball", "softball");//將David換成Ben

    }

    }

    2010-03-28 04:51:57 補充:

    main裡的程式是範例,myTxt.txt是我建的文字檔,你可以改成你的文字檔檔名。

    參考資料: java吉他手
  • 1 0 年前

    import java.io.*;

    public class JavaTest{

    public static void main(String args[]){

    try{

    File f1 = new File("data.txt");

    FileReader fr = new FileReader(f1);

    BufferedReader br = new BufferedReader(fr);

    File f2 = new File("data2.txt");

    FileWriter fw = new FileWriter(f2);

    BufferedWriter bw = new BufferedWriter(fw);

    String temp;

    while((temp=br.readLine()) != null){

    bw.write(temp);

    bw.newLine();

    }

    bw.close();

    fw.close();

    bw.close();

    fr.close();

    }catch(IOException e){

    System.out.println("找不到檔案!"+e);

    }

    }

    }

還有問題?馬上發問,尋求解答。