Frage

Ich bin ein wenig verwirrt mit all diesen neuen Datei-I / O-Klassen in JDK7.

Lassen Sie uns sagen, ich habe eine Path und wollen die Datei umbenennen es darstellt. Wie gebe ich den neuen Namen, wenn wieder ein Path erwartet?

Path p = /* path to /home/me/file123 */;
Path name = p.getName(); /* gives me file123 */
name.moveTo(/* what now? */); /* how to rename file123 to file456? */

Hinweis: Warum benötige ich JDK7 ? Der Umgang mit symbolischen Links

Das Problem ist: Ich habe es zu tun mit Dateien, deren Namen und Orte werden zur Laufzeit bekannt. Also, was ich brauche, ist eine sicher Methode (ohne außergewöhnliche Nebenwirkungen) einen neuen Namen-Pfad eines alten Namens-Pfades zu erstellen.

Path newName(Path oldName, String newNameString){
    /* magic */ 
}
War es hilfreich?

Lösung

Sie haben einen Pfad Zeichenfolge und Sie brauchen einen Pfad Instanz zu erstellen. Sie können dies mit der getPath Methode oder lösen. Hier ist eine Möglichkeit:

Path dir = oldFile.getParent();        
Path fn = oldFile.getFileSystem().getPath(newNameString);
Path target = (dir == null) ? fn : dir.resolve(fn);        
oldFile.moveTo(target); 

Beachten Sie, dass es überprüft, ob Eltern null ist (sieht aus wie Ihre Lösung tun das nicht).

Andere Tipps

In JDK7, Files.move () zum Umbenennen von Dateien eine kurze und prägnante Syntax lautet:

Path newName(Path oldName, String newNameString) {
    return Files.move(oldName, oldName.resolveSibling(newNameString));
}

Zuerst bekommen wir den Pfad zum neuen Dateinamen mit Path.resolveSibling () und die wir verwenden Files.move () die tatsächliche Umbenennung zu tun.

OK, nachdem alles heraus versuchen, es scheint, dass ich die richtige Methode gefunden:

// my helper method
Path newName(Path oldFile, String newNameString){
    // the magic is done by Path.resolve(...)
    return oldFile.getParent().resolve(newNameString);
}

// so, renaming is done by:
oldPath.moveTo(newName(oldFile, "newName"));

Wenn Sie einen Blick auf Apache Commons IO gibt es eine Klasse namens FileNameUtils . Dies macht eine Tonne Material WRT. Dateipfadnamen und (unter anderem) zuverlässig Pfadnamen aufgeteilt usw. Ich denke, dass sollten Sie einen langen Weg zu dem, was Sie wollen.

Wenn der Zielpfad zum Quellpfad identisch ist mit Ausnahme der Namen der Datei , wird es eher umbenannt werden als verschoben.

Also für Ihr Beispiel sollte der moveto Pfad

/home/me/file456

Wenn Sie nicht Java bekommen zu tun, was Sie mit Unix Ich möchte Python-Skripte (run von Ihrem Java-Programm) empfehlen. Python hat die Unterstützung für Unix-Scripting bekommen und es ist nicht Perl :) Das klingt vielleicht unelegant dir aber wirklich in einem größeren Programm, das Sie verwenden, das richtige Werkzeug für den Job zugute kommen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top