以下は私が取り組んだコードです。基本的にはフォルダをトラバースし、xmlファイルからデータを抽出してCSVファイルに出力します。これらはすべて動作します。しかし、私はプログラムを実行するたびに新しい出力csvファイルを作成したいと思います。皆さんがいくつかの例を提供したり、私が取り組んでいるコードを変更したりすることができれば幸いです。私は数時間後に解決策を見つけようとしています。Javaを使用してプログラムを実行するたびに新しいファイルを作成するには
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'ループに間違った'; 'があることは分かりますか? – EJP
はい私は最新の取り組みでwhileループを削除しました。 "is_parent"は基本的に私の "public void walk"で、子メソッドは "walk(f.getPath()、false)"です。私は、親の呼び出しが行われたときと、子の呼び出しが行われたときをチェックするフラグを作成しました。したがって、プログラムが最初に実行されるときに、この場合は "親"が呼び出され、新しいcsvファイルが作成されます。 問題: 私はプログラムを実行するたびに新しいcsvを作成することができません。新しい変更の後に、プログラムが異なるフォルダにあるxmlファイルからプログラムを取得するすべてのレコードに対して新しいcsvが作成されます。どちらが間違っていますか? –
あなたの最新の努力のための解決策が必要な場合は、最新の努力を投稿する必要があります。確かにこれは明らかですか? – EJP