2017-03-11 1 views
0

Ich versuche, POP3-Protokoll-Funktionen zu implementieren, und ich möchte das Dateisystem (Verzeichnisse und Textdateien darin) als eine Datenbank zum Speichern von E-Mails verwenden. Dazu muss ich bei jedem Zugriff auf die Datenbank die .txt-Dateien (email1.txt, email2.txt, ..) neu nummerieren, um zu überprüfen, ob eine der E-Mails gelöscht wurde. Nehmen wir an, dass email2.txt gelöscht wurde, das heißt in der nächsten Transaktion werden alle Emails neu nummeriert und email3.txt wird in email2.txt umbenannt, email4 wird email3 ans usw. und wenn keiner von ihnen gelöscht wird, sollten alle Dateien unverändert bleibenWie alle Dateien in einem Verzeichnis in Linux mit Java umbenennen?

Ich habe versucht, folgenden Code zu verwenden, aber es funktioniert nicht. Es funktioniert jedoch gut mit Windows. Ich weiß, dass das Umbenennen einer Datei vom Betriebssystem abhängig ist.

File dir = new File(absolutePath); 
    File[] filesInDir = dir.listFiles(); 
    int i = 0; 
     for(File file1:filesInDir) { 
     i++; 
     String oldName = file1.getName(); 
     oldName = absolutePath + "/" + oldName; 
     File oldFile=new File(oldName); 
     String newName = "email" + i + ".txt"; 
     newName = absolutePath + "/" + newName; 
     File newFile =new File(newName); 
     oldFile.renameTo(newFile); 
    } 
+0

Das erste, was Sie tun sollten, ist der Pfad, Pfade verwenden und Dateien Klassen der [java.nio.file] (https://docs.oracle.com/javase/8/docs/api/ java/nio/file/package-summary.html) anstelle von java.io.File. java.io.File ist eine sehr alte Klasse, die Ihnen nicht erklärt, warum eine Operation fehlgeschlagen ist. – VGR

+0

Sie müssen auch File.seprator verwenden – efekctive

Antwort

0

Hallo habe ich diese Änderung an Ihrem Code:

public static void main(String[] args) { 

    String absolutePath = "/Users/jucepho/Desktop/ReaderPaths/src/other/"; 

    File dir = new File(absolutePath); 
    File[] filesInDir = dir.listFiles(); 
    int i = 0; 
     for(File file1:filesInDir) { 
     i++; 
     String oldName = file1.getName(); 
     oldName = absolutePath + File.separator+ oldName; 
     File oldFile=new File(oldName); 
     String newName = "email" + i + ".txt"; 
     newName = absolutePath + File.separator+ newName; 
     File newFile =new File(newName); 
     oldFile.renameTo(newFile); 
    } 

} 

Es alle meine Dateien in meinem Verzeichnis umbenannt email2.txt etc .... email1.txt

es funktionieren sollte Ich testete es auf Ubuntu :)

+0

Vielen Dank für Ihre Bemühungen. Aber es wird nicht funktionieren, wenn Sie bereits email1.txt email2.txt email3.txt in Ihrem Verzeichnis haben und den Code ausführen. Es sollte unverändert bleiben, wenn sich im angegebenen Verzeichnis bereits Dateien (email1.txt, email2.txt) befinden. –

+0

Ok ich sehe, kannst du mir mehr erklären, was willst du machen? So kann ich denken, was wir machen könnten :) – Yussef

+0

Ich versuche, POP3-Protokollfunktionen zu implementieren, und ich möchte das Dateisystem (Verzeichnisse und Textdateien darin) als eine Datenbank verwenden, um E-Mails zu speichern. Dazu muss ich bei jedem Zugriff auf die Datenbank die .txt-Dateien (email1.txt, email2.txt, ..) neu nummerieren, um zu überprüfen, ob eine der E-Mails gelöscht wurde. Nehmen wir an, dass email2.txt gelöscht wurde, das heißt in der nächsten Transaktion werden alle Emails neu nummeriert und email3.txt wird in email2.txt umbenannt, email4 wird email3 ans usw. und wenn keiner von ihnen gelöscht wird, dann sollten alle Dateien unverändert bleiben. –

0

Nun, ich dachte, Sie könnten nach allen Dateien suchen und sehen, ob sie existieren und tun, was Sie wollen aussehen in etwa so: O natürlich habe ich es nicht fertig, aber vielleicht könnte es Hel p Sie =)

public static void main(String[] args) { 

     String absolutePath = "/Users/jucepho/Desktop/src/other/"; 

     File dir = new File(absolutePath); 
     File[] filesInDir = dir.listFiles(); 
     List<File> filesDirectory = Arrays.asList(filesInDir); 
     List<Integer> numbersUsed = new ArrayList<Integer>(); 

     for(File files2: filesDirectory){ 
      String nameFile = files2.getName(); 
      System.out.println(nameFile); 
      String regex = "email.\\.txt"; 
      boolean dosItMatch = nameFile.matches(regex); 
      if(dosItMatch){ 

       String number = "\\d+"; 

       numbersUsed.add(Integer.valueOf(regex.replace("email", "").replace("\\.txt", ""))); 
      } 
       System.out.println(dosItMatch); 
     } 
     System.out.println(numbersUsed); 
     int i = 0; 
      for(File file1:filesInDir) { 
      i++; 
      String oldName = file1.getName(); 
      oldName = absolutePath + File.separator+ oldName; 
      File oldFile=new File(oldName); 
      String newName = "email" + i + ".txt"; 
      newName = absolutePath + File.separator+ newName; 
      File newFile =new File(newName); 
      oldFile.renameTo(newFile); 
     } 

    } 
0

Schließlich wurde ich es los, indem Sie zuerst (filesInDir) Array zuerst sortieren.

 File dir = new File(absolutePath); 
     File[] filesInDir = dir.listFiles(); 
     Arrays.sort(filesInDir); 
     int i = 0; 
      for(File file1:filesInDir) { 
      i++; 
      String oldName = file1.getName(); 
      s.getBasicRemote().sendText("+OK "+oldName); 
      oldName = absolutePath + "/"+ oldName; 
      File oldFile=new File(oldName); 
      String newName = "email" + i + ".txt"; 
      newName = absolutePath + "/"+ newName; 
      s.getBasicRemote().sendText("+OK "+newName); 
      File newFile =new File(newName); 
      oldFile.renameTo(newFile); 
     } 
Verwandte Themen