2013-04-19 12 views
14

Hier ist das Problem. Nach einigen Verkettungen kann ich wie diesesWie bekomme ich einen sauberen absoluten Dateipfad in Java unabhängig vom Betriebssystem?

"C:/shared_resources/samples\\import_packages\\catalog.zip" 

einen String haben, passieren oder auch dieses

"C:/shared_resources/samples/subfolder/..\\import_packages\\catalog.zip" 

ich einen Code haben wollen, die eine solche Zeichenfolge in einen Pfad mit einheitlichen Separatoren konvertieren.

Die erste Lösung, die in den Sinn kommt, ist die Verwendung new File(srcPath).getCanonicalPath(), aber hier ist der knifflige Teil. Diese Methode basiert auf dem System, auf dem die Tests aufgerufen werden. Allerdings muss ich die Zeichenfolge an eine Remote-Maschine übergeben (Selenium Grid-Knoten mit einem Browser dort), und die Systeme hier und da sind Linux bzw. Windows. Daher führt der Versuch, new File("C:/shared_resources/samples\\import_packages\\catalog.zip").getCanonicalPath() zu tun, zu etwas wie "/home/username/ourproject/C:/shared_resources/samples/import_packages/catalog.zip". Und mit stumpfen Regex Ersatz scheint auch keine sehr gute Lösung.

Gibt es eine Möglichkeit, nur den Pfad zu beschneiden und Trennzeichen einheitlich zu machen (und möglicherweise ..'s aufzulösen), ohne es implizit zu verabsolutieren?

+1

Probieren Sie etwas wie .. 'Datei f = new File (“ C:/shared_resources/Beispiele \\ import_packages \\ catalog.zip "); \t \t System.out.println (f.toURI(). ToURL()); ' –

Antwort

-1

zum Beispiel hier ist Ihr Weg:

String jarName = "C:/shared_resources/samples\\import_packages\\catalog.zip" 
jarName.replaceAll("/", "\\"); 
jarName.replaceAll("..", "/"); 
12

mit Try this:

import java.io.IOException; 
import java.nio.file.Path; 
import java.nio.file.Paths; 

public class Main { 
    public static void main(String[] args) throws IOException { 
     Path path = Paths.get("myFile.txt"); 
     Path absolutePath = path.toAbsolutePath(); 

     System.out.println(absolutePath.toString()); 
    } 
} 
+1

Damit ist ein' .' drin: '.' ruft stattdessen' D: \ git-repositories \ winery \ winery \ von 'D: \ Git-Repositories \ Weingut \ Weingut'. Das Hinzufügen von 'normalize()' am Ende entfernt auch das abschließende '.'. – koppor

Verwandte Themen