2016-06-06 19 views
-2

Ich versuche, ein sehr einfaches Feature zu einem Java-Programm hinzuzufügen. Die Funktion, die ich hinzufügen möchte, verschiebt einfach alle Dateien von zwei Ordnern in einen dritten "Archiv" -Ordner. Der Code ist einfach und ich verstehe es 100% das Problem ist, nur einer der Inhalte des Ordners wird verschoben. Ich habe den Code mit einem feinen Zahnkamm durchgegangen und habe versucht, das Verzeichnis mehrmals zu wiederholen, nichts scheint zu funktionieren. Wenn jemand mir helfen könnte herauszufinden, warum der Inhalt meines zweiten Ordners nicht bewegt wird, würde ich es wirklich zu schätzen wissen.Unerwartete Ergebnisse Verschieben von Dateien zwischen Ordnern

FYI, um diesen Code zu testen, müssen Sie ein paar Ordner zu "Eigene Dateien" hinzufügen. "Pain008Files", "Camt54-Dateien" und "Archiv". Außerdem müssen Sie dem Pain008- und Camt5-Ordner nur eine Art Textdatei hinzufügen, es kann nur einen zufälligen Buchstaben haben, der nur verschoben werden kann.

Zur Laufzeit werden im Ordner Pain008Files alle Dateien korrekt in den Archivordner verschoben. Die Camt54-Dateien nicht. Das einzige Problem, das mir einfällt, ist, dass vielleicht der Platz im Camt54 Files-Namen ein Problem verursacht, aber das macht keinen Sinn, also dachte ich, ich würde es verschieben, bis ich Hilfe bekomme. Danke im Voraus!

Hauptklasse

package fileHandling; 

public class moveTestMain 

{ 

    public static void main(String args[]){ 

     GetUser gUser = new GetUser(); 
     gUser.getUser(); 

     MoveFiles mFiles = new MoveFiles(); 
     mFiles.moveCamtFiles(); 
     mFiles.movePainFiles(); 

    } 

} 

erhält der Benutzer-Name Klasse

package fileHandling; 

public class GetUser 

{ 

    public static String currentUser = null; 

    public void getUser(){ 

     currentUser = System.getProperty("user.name"); 

    } 

} 

Verschieben Sie die Dateien Klasse

package fileHandling; 

import java.io.File; 
import java.nio.file.Files; 
import java.util.ArrayList; 
import java.util.Arrays; 

public class MoveFiles 

{ 

    public static ArrayList<File> pain008Files; 
    public static ArrayList<File> camt54Files;; 

    public void movePainFiles(){ 

     File pain008File = new File("C:\\Users\\"+GetUser.currentUser+"\\Documents\\Pain008Files"); 
     pain008Files = new ArrayList<File>(Arrays.asList(pain008File.listFiles())); 

     System.out.println(pain008Files); 

     for(int i = 0; i < pain008Files.size(); i++){ 

      System.out.println("Test"); 

      int cutAmount = GetUser.currentUser.length(); 

      String fileName = pain008Files.get(i).toString().substring(33+cutAmount,pain008Files.get(i).toString().length()); 

      System.out.println(fileName); 


      System.out.println(pain008Files.get(i).toString()); 

      pain008Files.get(i).renameTo(new File("C:\\Users\\"+GetUser.currentUser+"\\Documents\\archive\\"+ 
      "archivedPain_"+fileName)); 


    } 

    } 

    public void moveCamtFiles(){ 

     File camt54File = new File("C:\\Users\\"+GetUser.currentUser+"\\Documents\\Camt54 Files"); 

     camt54Files = new ArrayList<File>(Arrays.asList(camt54File.listFiles())); 

     for(int i = 0; i < camt54Files.size(); i++){ 

      int cutAmount = GetUser.currentUser.length(); 

      String fileName = camt54Files.get(i).toString().substring(32+cutAmount,camt54Files.get(i).toString().length()); 

      camt54Files.get(i).renameTo(new File("C:\\Users\\"+GetUser.currentUser+"\\Documents\\archive\\"+ 
      "archivedCamt_"+fileName)); 

     } 

    } 
+1

Versuchen Sie, den Raum zu ersetzen: 'Camt54% 32% Files'. Sehen Sie, ob das hilft –

+1

Was passiert, wenn Sie den Code durchlaufen? Erhalten Sie irgendwelche Fehler? Eine Sache, die anders ist, ist das Vorhandensein eines Platzes in einem Verzeichnisnamen, der Probleme verursachen könnte. –

+0

Sie können die Probleme beheben, indem Sie [Files.move] (http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#move-java. nio.file.Path-java.nio.file.Path-java.nio.file.CopyOption ...-). Dann müssen Sie den Zieldateinamen nicht manuell mit einem Teilzeichenfolgenkonstrukt erstellen. – SubOptimal

Antwort

1

kurze Antwort:

Ihr Code hat einige Tippfehler in Routen oder irgendwo ...


LONG ANTWORT:

ich es lokale Prüfung in meinem Computer angepasst und funktioniert einwandfrei.

public void movePainFiles() { 

    File pain008File = new File("C:\\tmp\\pain"); 
    pain008Files = new ArrayList<File>(Arrays.asList(pain008File.listFiles())); 

    System.out.println(pain008Files); 

    for (int i = 0; i < pain008Files.size(); i++) { 

     System.out.println(pain008Files.get(i).toString()); 

     pain008Files.get(i).renameTo(new File("C:\\tmp\\archive\\" + "archivedPain_" + pain008Files.get(i).getName())); 

    } 

} 

public void moveCamtFiles() { 

    File camt54File = new File("C:\\tmp\\camt"); 

    camt54Files = new ArrayList<File>(Arrays.asList(camt54File.listFiles())); 

    for (int i = 0; i < camt54Files.size(); i++) { 

     System.out.println(camt54Files.get(i).toString()); 
     camt54Files.get(i).renameTo(new File("C:\\tmp\\archive\\" + "archivedCamt_" + camt54Files.get(i).getName())); 

    } 

} 

OUTPUT:

C:\tmp\camt\xxx.pdf 
C:\tmp\camt\yyy.pdf 
C:\tmp\camt\zzz.pdf 
[C:\tmp\pain\Q37024973.txt, C:\tmp\pain\Q37545784.txt] 
C:\tmp\pain\Q37024973.txt 
C:\tmp\pain\Q37545784.txt 
+1

Obwohl du meine Frage nicht explizit beantwortet hast, haben mir die Kommentare und dein Beispiel geholfen, es herauszufinden. Es war tatsächlich der Raum, der das Problem verursachte. Ich habe die% 32% ausprobiert, aber einen Null-Zeiger bekommen, also habe ich es erneut versucht, ohne Leerzeichen wie du und es hat gut funktioniert. Danke an alle. – jesric1029

+0

Warum erstellen Sie eine Liste aus dem von 'listFiles()' zurückgegebenen Array und erstellen dann erneut eine Liste aus dieser Liste? 'pain008Files' könnte sogar als' File [] 'beibehalten werden. – SubOptimal

+0

Ich bin nicht OP tut ... Ich habe nicht Code überarbeitet, solange gearbeitet –

Verwandte Themen