2013-04-19 13 views
14

Oto problem. Po pewnych powiązań, może zdarza mi się mieć ciąg jak toJak uzyskać czystą bezwzględną ścieżkę do pliku w Javie, niezależnie od systemu operacyjnego?

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

lub nawet tego

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

chcę mieć jakiś kod, który będzie przekształcić taki ciąg znaków w ścieżce z jednolitymi separatorów.

Pierwsze rozwiązanie, które przychodzi na myśl, to korzystanie z new File(srcPath).getCanonicalPath(), jednak tutaj jest trudna część. Ta metoda polega na systemie, w którym uruchamiane są testy. Jednak muszę przekazać ciąg do maszyny zdalnej (węzeł siatki Selenium z przeglądarką tam), a systemy tu i tam są odpowiednio Linux i Windows. Dlatego próba zrobienia new File("C:/shared_resources/samples\\import_packages\\catalog.zip").getCanonicalPath() daje w rezultacie coś takiego jak "/home/username/ourproject/C:/shared_resources/samples/import_packages/catalog.zip". A użycie tępej wersji regex nie wydaje się zbyt dobrym rozwiązaniem.

Czy istnieje sposób, aby przycinać ścieżkę i czynić rozgraniczniki jednolite (i ewentualnie rozdzielać ..) bez próby absolutnej absolutyzacji?

+1

Spróbuj coś takiego .. 'f = new File File (” C:/shared_resources/samples \\ import_packages \\ catalog.zip "); \t System.out.println (f.toURI(). ToURL()); ' –

Odpowiedz

-1

na przykład tutaj jest ścieżka:

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

Spróbuj z tym:

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

Pozostawia w tym miejscu' .': '.' pobiera' D: \ git-reositories \ winery \ winery \ .' zamiast z 'D: \ git-reositories \ winery \ winery'. Dodanie 'normalize()' na końcu również usuwa końcowe '.'. – koppor

Powiązane problemy