2013-09-25 18 views
-2

需要刪除的字符串即虛擬主機的最後一次出現在文件中刪除字符串在文件中最後一次出現。我可以使用java,shell來完成。 文件結構是一個xml文件。我需要的是我需要將VirtualHost轉移到最後。所以我試圖刪除它,然後追加。用java /殼

Current Text: 
    </VirtualHost> 
    #Added for Patch 
    <LocationMatch ^/bea_wls_internal/> 
    RewriteOptions inherit 
    </LocationMatch> 







Desired Text: 
#Added for Patch 
<LocationMatch ^/bea_wls_internal/> 
RewriteOptions inherit 
</LocationMatch> 
</VirtualHost> 

我試圖做到這一點:

int c=1,i=1; 
    int loc[]=new int[10]; 
    //String str="</VirtualHost>"; 
    BufferedReader br= new BufferedReader (new FileReader()); 
    String line=br.readLine(); 
    FileWriter fw=new FileWriter(file_location); 
    PrintWriter pw=new PrintWriter(fw); 
    List<String> lines = new ArrayList<String>(); 

    while ((line != null)){ 
      //System.out.println(line); 
      lines.add(line); 
      c++; 
      line=br.readLine(); 
    } 
    br.close(); 
    int size=lines.size(); 
    System.out.println("size "+size); 

    while(c>i){ 
     int filesize=lines.size(); 
     System.out.println(filesize); 

     String str=lines.get(filesize-i); 
     System.out.println(str); 
     lines.remove(filesize-i); 
     if (!lines.equals("</VirtualHost>")){ 
      System.out.println("inside if"); 
      lines.add(str); 
      //break; 
     } 
     else if(lines.equals("</VirtualHost>")){ 
      break; 
     } 
     i++; 
    } 
    for (String writeLine : lines) 
      pw.println(writeLine); 


    pw.append("</VirtualHost>"); 
    pw.flush(); 
    pw.close(); 
    fw.close(); 
    System.out.println(c); 
} 

}

+0

它是一個xml文件 – user2814520

+1

作爲你的例子,你正在做2件事,移動1行並刪除一個......你想要什麼? – Rayf

+0

@Rayf加,他沒有刪除** **最後出現,但第一個'LocationMatch ....' – Kent

回答

0

你在使用Java堅持的原因嗎?

你可以使用sed做到這一點:

sed '/</VirtualHost>/,$d' filename 

這將產生整個文件的內容減去</VirtualHost>

然後,只需在您的#Added for Patch文字</VirtualHost>

0

使用XML解析器可以提供Java對象。然後遍歷從根到期望的元素,你可以執行所有的操作