update:
this version also moves the assets into 3 different directories if you create the directories first.
I also learned I was worried for no reason since some unreferenced files were left over in the directories so mgalaxy doesn't seem to be too eager to delete files after all
package mGalaxyListSplitter;
import org.w3c.dom.*;
import javax.xml.parsers.*;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
public class Splitter {
public static void writeXml(Node n, OutputStream os) throws TransformerException {
TransformerFactory tf = TransformerFactory.newInstance();
// identity
Transformer t = tf.newTransformer();
t.setOutputProperty(OutputKeys.INDENT, "yes");
t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
t.transform(new DOMSource(n), new StreamResult(os));
}
public static void main(String[] args) throws Throwable {
List<Node> rom70 = new ArrayList<Node>();
List<Node> rom80 = new ArrayList<Node>();
List<Node> rom90 = new ArrayList<Node>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new File(
"C:\\Program Files (x86)\\mGalaxy\\Data - Kopie\\UserSystems\\Multi-system [MAME]-I2zbZe7o\\xmlout.xml"));
Element root = document.getDocumentElement();
for (int i = 0; i < root.getChildNodes().getLength(); i++) {
Node node = root.getChildNodes().item(i);
if (node.getAttributes() == null) {
continue;
}
Element elt = (Element) node;
String yearString = elt.getElementsByTagName("release").item(0).getTextContent();
int year = Integer.parseInt(yearString.replaceAll("\\?", "0").replaceAll("X", "0"));
if (year < 1981) {
rom70.add(node);
} else if (year < 1988) {
rom80.add(node);
} else {
rom90.add(node);
}
}
FileOutputStream stream = new FileOutputStream("70.xml");
for (Node node : rom70) {
Element elt = (Element) node;
moveAssets(elt, 7);
writeXml(node, stream);
}
stream.flush();
stream.close();
stream = new FileOutputStream("80.xml");
for (Node node : rom80) {
Element elt = (Element) node;
moveAssets(elt, 8);
writeXml(node, stream);
}
stream.flush();
stream.close();
stream = new FileOutputStream("90.xml");
for (Node node : rom90) {
Element elt = (Element) node;
moveAssets(elt, 9);
writeXml(node, stream);
}
stream.flush();
stream.close();
}
private static void moveAssets(Element elt, int year) {
String name = elt.getAttributes().getNamedItem("name").getNodeValue();
Path temp;
try {
temp = Files.move(Paths.get("H:\\mgalaxy\\logos\\" + name + ".png"),
Paths.get("H:\\mgalaxy\\logos" + year + "\\" + name + ".png"));
} catch(NoSuchFileException a){}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
temp = Files.move(Paths.get("H:\\mgalaxy\\screenshots\\" + name + ".png"),
Paths.get("H:\\mgalaxy\\screenshots" + year + "\\" + name + ".png"));
} catch(NoSuchFileException a){}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
temp = Files.move(Paths.get("H:\\mgalaxy\\covers\\" + name + ".png"),
Paths.get("H:\\mgalaxy\\covers" + year + "\\" + name + ".png"));
} catch(NoSuchFileException a){}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
temp = Files.move(Paths.get("H:\\mgalaxy\\videos\\" + name + ".mp4"),
Paths.get("H:\\mgalaxy\\videos" + year + "\\" + name + ".mp4"));
} catch(NoSuchFileException a){}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
temp = Files.move(Paths.get("H:\\mgalaxy\\arts\\" + name + ".png"),
Paths.get("H:\\mgalaxy\\arts" + year + "\\" + name + ".png"));
}
catch(NoSuchFileException a){}
catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}