2011-12-14 41 views
1

我寫了下面的代碼部分,但我無法綁定數組列表搜索並替換 ,所以我的csv文件如下所示 1/1/1; 7/6/1 1/1/2; 7/7/1搜索並使用arraylist替換文件,Java

我想搜索1/1/1的文件1.cfg並將其更改爲7/6/1和1/1/2改爲7/7/1,並且如此。

謝謝大家提前

它現在只是在一個新的文件只打印出舊文件的最後一行

import java.io.*; 
import java.util.ArrayList; 
import java.util.List; 

public class ChangeConfiguration { 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) 
    { 
     try{ 
       // Open the file that is the first 
       // command line parameter 
       FileInputStream degistirilecek = new FileInputStream("c:/Config_Changer.csv"); 
       FileInputStream config = new FileInputStream("c:/1.cfg"); 
       // Get the object of DataInputStream 
       DataInputStream in = new DataInputStream(config); 
       DataInputStream degistir = new DataInputStream(degistirilecek); 
       BufferedReader br = new BufferedReader(new InputStreamReader(in)); 
       BufferedReader brdegis = new BufferedReader(new InputStreamReader(degistir)); 
       List<Object> arrayLines = new ArrayList<Object>(); 
       Object contents; 
      while ((contents = brdegis.readLine()) != null) 
       { 
       arrayLines.add(contents); 
       } 
       System.out.println(arrayLines + "\n"); 
       String strLine; 
       //Read File Line By Line 
       while ((strLine = br.readLine()) != null) { 
       //Couldn't modify this part error is here :(
        BufferedWriter out = new BufferedWriter(new FileWriter("c:/1_new.cfg")); 
        out.write(strLine); 
        out.close(); 
       } 
         in.close(); 
       degistir.close(); 
       }catch (Exception e){//Catch exception if any 
       System.err.println("Error: " + e.getMessage()); 
       } 
       } 
} 
+2

什麼是`功能替換(arrayName,replaceTo,replaceWith)`?這不會在Java中編譯。 – 2011-12-14 17:48:23

+0

那麼,首先如果你想修改一個文件,你需要寫入它。你不能寫入`Reader`或`InputStream`,你需要一個`Writer`或`OutputStream`。 – 2011-12-14 17:49:02

+0

opps是的,功能部分是我的問題,我無法寫出那部分java收集數組中的字符串,並將其替換。 – ahmet 2011-12-14 17:58:35

回答

2

您正在打開的文件進行讀取時聲明:

BufferedReader br = new BufferedReader(new InputStreamReader(in)); 

如果您知道整個文件將適合內存,我建議您執行以下操作:

  • 打開文件並將其內容讀入一個巨大的字符串中,然後關閉該文件。
  • 將你的替換一次性應用到巨型字符串。
  • 打開文件並寫入(例如使用BufferedWriter)大字符串的內容,然後關閉文件。

作爲一個方面說明,您發佈的代碼將不會編譯。您收到的回覆質量與問題質量相關。總是包括一個SCCE與您的問題,以增加獲得您的問題的確切答案的機會。

0

你能詳細說明程序的目的嗎?

如果它是文件中的簡單內容替換。

然後只讀一行並將其存儲在一個字符串中。然後使用字符串替換方法替換字符串中的文本。

例如:

newStrog = oldString.replace(oldVlue,NEWVALUE);