【发布时间】:2017-09-02 09:53:25
【问题描述】:
以下是我编写的代码,它基本上遍历文件夹并从 xml 文件中提取数据并将数据输出到 CSV 文件中。所有这些都有效。但我想在每次运行程序时创建新的输出 csv 文件。如果你们能提供一些示例或修改我处理过的代码,我将不胜感激。请我从几个小时以来一直试图找出解决方案。
public class MergeCode1 {
public void walk(String path,Boolean is_parent) throws Exception {
File filePath = new File ("C:/Users/Vishvesh Savant/Desktop/Mirriad/");
System.out.println(filePath);
File root = new File(path); //Input File Path
File[] list = root.listFiles();
while(is_parent == false);
{
Random rand = new Random();
int value;
value=rand.nextInt(50)+1;
filePath = new File (("C:/Users/Vishvesh Savant/Desktop/Mirriad/"+"new_one"+value+".csv"));
}
try{
if (list == null) return;
System.out.println("2");
for (File f : list ) {
DocumentBuilderFactory dbfactory = null;
DocumentBuilder dbuilder = null;
Document doc = null;
if (f.isDirectory()) {
walk(f.getPath(),false);
System.out.println( "Dir:" + f.getAbsolutePath());
}
else {
System.out.println( "File:" + f.getAbsolutePath());
dbfactory = DocumentBuilderFactory.newInstance();
dbuilder = dbfactory.newDocumentBuilder();
doc = dbuilder.parse(f.getAbsolutePath());
doc.getDocumentElement().normalize();
NodeList list1 = doc.getElementsByTagName("product");
FileWriter fileWriter = new FileWriter(filePath, true);
// String Fileheader="uid,title";
// fileWriter.append(Fileheader.toString());
// fileWriter.append("\n");
for(int i=0; i<list1.getLength();i++){
Node node = list1.item(i);
if(node.getNodeType() == Node.ELEMENT_NODE){
Element element = (Element) node;
fileWriter.append(element.getAttribute("uid"));
System.out.println(element.getAttribute("uid"));
fileWriter.append(",");
fileWriter.append( element.getElementsByTagName("title").item(0).getTextContent());
System.out.println(element.getElementsByTagName("title").item(0).getTextContent());
fileWriter.append(",");
fileWriter.append( element.getElementsByTagName("actor").item(0).getTextContent());
System.out.println(element.getElementsByTagName("actor").item(0).getTextContent());
fileWriter.append(",");
fileWriter.append( element.getElementsByTagName("director").item(0).getTextContent());
System.out.println(element.getElementsByTagName("director").item(0).getTextContent());
fileWriter.append(",");
fileWriter.append( element.getElementsByTagName("country").item(0).getTextContent());
System.out.println(element.getElementsByTagName("country").item(0).getTextContent());
fileWriter.append(",");
fileWriter.append( element.getElementsByTagName("format").item(0).getTextContent());
System.out.println(element.getElementsByTagName("format").item(0).getTextContent());
fileWriter.append(",");
fileWriter.append( element.getElementsByTagName("bitrate").item(0).getTextContent());
System.out.println(element.getElementsByTagName("bitrate").item(0).getTextContent());
fileWriter.append(",");
fileWriter.append( element.getElementsByTagName("fps").item(0).getTextContent());
System.out.println(element.getElementsByTagName("fps").item(0).getTextContent());
fileWriter.append(",");
fileWriter.append( element.getElementsByTagName("aspect").item(0).getTextContent());
System.out.println(element.getElementsByTagName("aspect").item(0).getTextContent());
fileWriter.append(",");
fileWriter.append( element.getElementsByTagName("width").item(0).getTextContent());
System.out.println(element.getElementsByTagName("width").item(0).getTextContent());
fileWriter.append(",");
fileWriter.append(element.getBaseURI());
fileWriter.append(element.getAttribute("uid"));
fileWriter.append(element.getElementsByTagName("format").item(0).getTextContent());
fileWriter.append("\n");
//fileWriter.flush();
fileWriter.close();
}
}
}
}
}
catch (Exception e) {
System.out.println("Error!!!");
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
MergeCode1 fw = new MergeCode1();
fw.walk("C:/Users/Vishvesh Savant/Desktop/Mirriad/Test",true);
}
}
【问题讨论】:
-
什么是
is_parent?您当前的代码以何种方式不满足要求?您是否意识到您的while循环中有错误的;? -
是的,我在最近的努力中删除了 while 循环。 “is_parent”基本上是我的“public void walk”,子方法是“walk(f.getPath(),false)”。我创建了一个标志来检查何时进行父调用以及何时进行子调用。因此,当程序第一次运行时,将调用“父级”,在这种情况下,将创建一个新的 csv 文件。问题:我无法在每次运行程序时创建一个新的 csv,在我进行新的更改后,会为程序从位于不同文件夹中的 xml 文件中检索的每条记录创建一个新的 csv。这是不正确的。
-
如果你想为你最近的工作找到一个解决方案,你必须发布你的最新工作。这肯定很明显吗?