2009-10-30 33 views
16

Có cách nào tốt để chuyển đổi giữa các tên tệp url và cửa sổ, trong Java không?Chuyển đổi giữa tên tệp URL và cửa sổ (Java)?

Tôi đang cố gắng tải xuống tệp nhưng tôi muốn tên tệp cửa sổ có thể chuyển đổi trở lại tên tệp ban đầu. Lưu ý rằng phần truy vấn của url là rất quan trọng vì tôi sẽ tải xuống các trang khác nhau chỉ khác nhau trong truy vấn.

Giải pháp hacky hiện tại của tôi là thay thế các ký tự không hợp lệ (chẳng hạn như '?') Bằng một chuỗi cụ thể (chẳng hạn như 'QQ'), nhưng điều này làm cho chuyển đổi trở lại url ít minh bạch hơn. Có cách nào tốt hơn?

+1

Một số ví dụ về những gì bạn đang cố gắng để thực hiện sẽ rất Hữu ích. –

+1

Tôi nghĩ anh ấy đang nói về việc tiết kiệm kết quả của một yêu cầu web bằng cách sử dụng URL web làm tên tệp. Điều này gặp sự cố với các ký tự như '*' và '?', Có giá trị trong URL nhưng không hợp lệ như một phần của tên tệp Windows. –

+1

tức là www.google.com/search?q=bad+urls, đây không phải là tên tệp cửa sổ hợp lệ (do dấu chấm hỏi). –

Trả lời

22

Bạn có thể làm tồi tệ hơn vì sử dụng URLEncoder để mã hóa URL:

String url = "http://172.0.0.1:80/foo/bar/baz.txt?black=white"; 
String filename = URLEncoder.encode(url, "UTF-8"); 
File file = new File(filename); 

Các tên tập tin trở thành tên win32 pháp lý:

http%3A%2F%2F172.0.0.1%3A80%2Ffoo%2Fbar%2Fbaz.txt%3Fblack%3Dwhite 

Đây là một hoạt động thể đảo ngược:

String original = URLDecoder.decode(filename, "UTF-8"); 
+0

Cảm ơn! Điều này làm việc tuyệt vời! – Paul

+0

Tính năng này có hoạt động trên các hệ thống khác (* nix) không? – chakrit

+0

% là tốt trong unix http://en.wikipedia.org/wiki/Filename – kenny

2

Lớp java.io.File có một URI & | tên tệp với tư cách là một hàm tạo, nhưng chứa các phương thức toURI() & toURL() cũng như getName() & getPath(). Tôi cho rằng đây sẽ là một chuyển đổi hợp lệ cho bạn?

0

Nếu bạn có ý nghĩa để chuyển đổi URL được mã hóa để không mã hóa, bạn có thể sử dụng:

URLDecoder

lớp Utility cho HTML hình thức giải mã. Lớp này chứa các phương thức tĩnh để giải mã một chuỗi từ định dạng MIME của ứng dụng/x-www-form-urlencoded.

Xem đó là những gì bạn cần.

+0

@Paul: Thêm một số mẫu đầu vào và ouput mong muốn để hiểu rõ hơn câu hỏi của bạn – OscarRyz

Các vấn đề liên quan