2013-04-19 30 views
14

Đây là vấn đề. Sau khi một số concatenations Tôi có thể xảy ra để có một chuỗi như thế nàyLàm thế nào để có được một đường dẫn tệp sạch tuyệt đối trong Java bất kể hệ điều hành?

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

hoặc ngay cả điều này

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

Tôi muốn có một số mã mà sẽ chuyển đổi chuỗi đó vào một con đường có dải phân cách thống nhất.

Giải pháp đầu tiên mà bạn nghĩ đến là sử dụng new File(srcPath).getCanonicalPath(), tuy nhiên, đây là phần khó khăn. Phương thức này dựa trên hệ thống mà các phép thử được gọi. Tuy nhiên, tôi cần truyền chuỗi này đến một máy từ xa (nút Selenium Grid với trình duyệt ở đó), và các hệ thống ở đây và có Linux và Windows tương ứng. Do đó, hãy thử thực hiện new File("C:/shared_resources/samples\\import_packages\\catalog.zip").getCanonicalPath() kết quả như sau: "/home/username/ourproject/C:/shared_resources/samples/import_packages/catalog.zip". Và sử dụng thay thế regex blunt không có vẻ là một giải pháp rất tốt quá.

Có cách nào chỉ để cắt tỉa đường dẫn và tạo dấu phân cách đồng nhất (và có thể giải quyết ..) mà không cố gắng ngầm hoàn toàn không?

+1

Hãy thử một cái gì đó giống như .. file 'f = new File (" C:/shared_resources/samples \\ import_packages \\ catalog.zip "); \t \t System.out.println (f.toURI(). ToURL()); ' –

Trả lời

-1

ví dụ ở đây là con đường của bạn:

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

Hãy thử với điều này:

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

Điều này để lại' .' trong đó: '.' được' D: \ git-repositories \ winery \ winery \ .' thay vào đó của 'D: \ git-repositories \ winery \ winery'. Việc thêm 'normalize()' vào cuối cũng sẽ loại bỏ '.' cuối cùng. – koppor