2016-05-03 86 views
1

我想分割一個組合的文本文件。組合的文本文件裏面有多個xml文件。我想分割<?xml version='1.0'?>這是組合文本文件中每個新xml的開始。不知道什麼是最好的方式來做到這一點。目前這是我沒有正確分割的東西。Combined Xml String Split Java

更新的代碼工作(引號中的問題固定報價添加Pattern.quote):

Scanner scanner = new Scanner(new File("src/main/resources/Flume_Sample"), "UTF-8"); 
String combinedText = scanner.useDelimiter("\\A").next(); 
scanner.close(); // Put this call in a finally block 
String delimiter = "<?xml version=\"1.0\"?>"; 
String[] xmlFiles = combinedText.split("(?="+Pattern.quote(delimiter)+")"); 


for (int i = 0; i < xmlFiles.length; i++){ 
    File file = new File("src/main/resources/output_"+i); 
    FileWriter writer = new FileWriter(file); 
    writer.write(xmlFiles[i]); 
    System.out.println(xmlFiles[i]); 
    writer.close(); 
} 

回答

3

split方法接受一個正則表達式字符串,所以你可能需要您的分隔符String逃到一個有效的正則表達式:

String[] xmlFiles = combinedText.split(Pattern.quote(delimiter)); 

查看Pattern.quote方法。

0

請注意,如果按照這種方式進行操作,您將在內存中加載整個初始文件。 如果輸入文件很大,流式處理方式會更好......

0

如果您想手動解析數據,我會使用類似的方法。

public static void parseFile(File file) throws AttributeException, LineException{ 
    BufferedReader br = null; 
    String s = ""; 
    int counter = 0; 

    if(file != null){ 
     try{ 
      br = new BufferedReader(new FileReader(file)); 
      while((s = br.readLine()) != null){ 
       if(s.contains("<?xml version='1.0'?>")){ 
        //Write in new file with Stringbuffer and Filewritter. 
       } 
      } 
      br.close(); 
      }catch (IOException e){ 
       System.out.println(e); 
      } 
    } 
}