2016-05-03 6 views
1

結合されたテキストファイルを分割しようとしています。結合されたテキストファイルには複数のxmlファイルがあります。私は<?xml version='1.0'?>に分割して、結合されたテキストファイル内のすべての新しいxmlの先頭にしたいと思います。これを行うための最良の方法は何か分かりません。現在、これは正しく分割されていないものです。結合されたXML文字列分割Java

更新されたコードの作業(引用符の問題で一定の引用はPattern.quoteを追加しました):あなたは、有効な正規表現に、あなたの区切り文字Stringをエスケープすることもできますので、

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[] 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); 
      } 
    } 
}