2016-04-05 6 views
0

Ich erstelle gerade ein Paket in Java, die eine meiner Klassen enthält eine Methode, die erstellt und in Outfiles schreibt.Out-Files erstellt mit vorhanden check-in Java

Mein Ziel ist es, die Methode zu überprüfen, ob eine Outfile bereits erstellt wurde. Wenn nicht, erstellen Sie es. Wenn es so ist, dann tu nichts. Wenn ich das Outfile erstelle, möchte ich einfach die Variable sourceType, die ich in meinem conditional als Präfix angegeben habe, zum eigentlichen Dateinamen (nicht zum vollständigen Pfad) hinzufügen.

Mein Problem liegt beim letzten Satz, denn trotz meiner Prüfungen wird die Datei noch erstellt. Wenn ich es einmal ausführe, bekomme ich "/ path/to/FL_myFile" von "/ path/to/myFile". Wenn ich es zweimal ausführe, erstellt es ein anderes namens "/ Pfad/zu/FL_FL_myFile", was falsch ist.

Ich habe Programmierung non-stop für eine Weile und mein Gehirn ist ziemlich müde mich also bitte verzeihen, wenn dies ein dummer Fehler ist ...

Vielen Dank!

Hier ist mein Code:

public static void RenameFiles(File subDir) { 
    File[] files = subDir.listFiles(); 
    Path source = FileSystems.getDefault().getPath(subDir.toString()); 
    String sourceType = null; 
    if (source.toString().endsWith("Flavonoid")) { 
     sourceType = "/FL_"; 
    } else { 
     sourceType = "/SR_"; 
    } 
    for (File file : files) { 
     Path oldFilePath = FileSystems.getDefault().getPath(file.toString()); 
     Path newFilePath = FileSystems.getDefault().getPath(subDir.toString() + sourceType + file.getName()); 
     File newFile = newFilePath.toFile(); 
     if(newFile.exists()) { 
      System.out.println("Exists!!! Do nothing! : " + newFile.toString()); 
      continue; 
     } else { 
      System.out.println("Does not exist!! Make it!! " + newFile.toString()); 
      try { 
       Files.move(oldFilePath, newFilePath); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

Dank Paul Ostrowski für die Antwort. Wie zu erwarten, war es offensichtlich, aber ich sah es nicht. Eine einfache Korrektur unten hinzugefügt.

public static void RenameFiles(File subDir) { 
    File[] files = subDir.listFiles(); 
    Path source = FileSystems.getDefault().getPath(subDir.toString()); 
    String sourceType = null; 
    if (source.toString().endsWith("Flavonoid")) { 
     sourceType = "/FL_"; 
    } else { 
     sourceType = "/SR_"; 
    } 
    for (File file : files) { 
     Path oldFilePath = FileSystems.getDefault().getPath(file.toString()); 
     Path newFilePath = FileSystems.getDefault().getPath(subDir.toString() + sourceType + file.getName()); 
     File newFile = newFilePath.toFile(); 
     if(file.getName().startsWith("SR_") || file.getName().startsWith("FL_")) { 
      continue; 
     } else { 
      System.out.println("Creating outfile: " + newFile.toString()); 
      try { 
       Files.move(oldFilePath, newFilePath); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

Antwort

1

Sie haben keine Überprüfung, ob die Datei mit "FL_" oder "SR_" beginnt. Beim ersten Start wird foo.bar in FL_foo.bar umbenannt. Beim zweiten Mal wird foo.bar nicht umbenannt, aber die bereits vorhandene FL_foo.bar wird in FL_FL_foo.bar umbenannt. Sie müssen sehen, ob der Dateiname mit "FL_" oder "SR_" beginnt.