我正在尝试拆分组合文本文件。组合文本文件里面有多个xml文件。我想拆分<?xml version='1.0'?>
,它是组合文本文件中每个新xml的开头。不确定最好的方法是什么。目前这是我没有正确分割的东西。
更新了代码工作(引号中的固定引号问题添加了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();
}
答案 0 :(得分:3)
split方法采用正则表达式字符串,因此您可能希望将分隔符String
转义为有效的正则表达式:
String[] xmlFiles = combinedText.split(Pattern.quote(delimiter));
请参阅Pattern.quote方法。
答案 1 :(得分:0)
还要注意,如果以这种方式继续,您将在内存中加载整个初始文件。 如果输入文件很大,流式方法会表现得更好......
答案 2 :(得分: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);
}
}
}