Hallo, ich habe ein Problem mit einigen Legacy-Code. Ich brauche einen Weg, um die geänderte Datei von der parseFile() -Methode bis zur aufrufenden doWithFileList() -Methode zu bekommen.Java Update Dateireferenz nach dem Umbenennen
public static void main(String[] args) throws IOException {
File file1 = File.createTempFile("file1", ".tmp");
File file2 = File.createTempFile("file2", ".tmp");
ArrayList<File> fileList = new ArrayList<File>();
fileList.add(file1);
fileList.add(file2);
doWithFileList(fileList);
}
static void doWithFileList(List<File> fileList) {
for (File file : fileList) {
String result = parseFile(file);
}
//Do something with the (now incorrect) file objects
for (File file : fileList) {
// always false here
if (!file.exists()) {
System.out.println("File does not exist anymore");
}
}
}
private static String parseFile(File file) {
//1. Get information from the File
//2. Use this information to load an object from the Database
//3. return some property of this object
//4. depending on another property of the DB object rename the file
file.renameTo(new File(file.getAbsoluteFile() + ".renamed"));
return "valueParsedFromFile";
}
Ich weiß, dass Dateiobjekte unveränderlich sind. Das Problem ist in meiner realen Welt Problem die ParseFile() -Methode im Moment nur Schritte Schritt 1-3, aber ich muss Schritt 4 hinzufügen. Die Umbenennung ist kein Problem, aber ich muss den neuen Dateinamen irgendwie bekommen zu der aufrufenden Methode. im realen Leben gibt es größere Stack-Trace über mehrere Objekte zwischen diesen Methoden.
Was wäre der beste Weg, um den geänderten Namen der Datei an den Anfang der Aufrufhierarchie zurück zu bekommen, wo ich das Objekt in der Liste ändern kann. Meine beste Schätzung im Moment wäre es, ein ReturnObject zu erstellen, das sowohl den zurückzugebenden String als auch das neue File-Objekt enthält. Aber dann muss ich eine Reihe von Methoden auf meinem Weg nach oben umgestalten, so dass ich eine Menge verschiedener Rückgabeobjekte erstellen müsste.
Die 3 ist die einzige VALID-Lösung. 1 und 2 sind nur böse Dinge, die man in jedem professionellen Programm vermeiden sollte! Es ist unzuverlässig, schwer zu pflegen und lächerlich. Und die Arbeit auf dem größeren Stapel ist in allen Fällen gleich. Es versteht diese Antwort nicht ... –