Преобразовать между URL-адресом и именем файла Windows (Java)?
Есть ли стандартный/хороший способ конвертации между именами файлов url и windows в Java?
Я пытаюсь загрузить файлы, но я хочу, чтобы имя файла Windows было обратимо обратно в исходное имя файла. Обратите внимание, что часть запроса URL важна, поскольку я буду загружать разные страницы, которые отличаются только запросом.
Мое текущее хакерское решение заключается в замене незаконных символов (например, '?') на определенную строку (например, "QQ" ), но это делает преобразование обратно к URL менее прозрачным. Есть ли лучший способ?
Ответы
Ответ 1
Вы можете сделать хуже, чем использовать URLEncoder для кодирования 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);
Имя файла становится юридическим именем win32:
http%3A%2F%2F172.0.0.1%3A80%2Ffoo%2Fbar%2Fbaz.txt%3Fblack%3Dwhite
Это обратимая операция:
String original = URLDecoder.decode(filename, "UTF-8");
Ответ 2
Класс java.io.File принимает URI & | filename как конструктор, но содержит методы toURI()
и toURL()
, а также getName()
и getPath()
. Я предполагаю, что это будет правильным преобразованием для вас?
Ответ 3
Но возможно ли вообще кодировать url для имени файла? Я имею в виду, может ли быть 100% -ное решение? Я думаю, что преобразование url в filename является неправильной идеей в целом из-за разных ограничений, установленных на URL-адресах и именах файлов:
Макс. длина имени файла (файловая система NTFS, Unicode, использующая кодировку UTF-16) - 255
Максимальная длина URL (с использованием кодировки UTF-8?) - 2000 символов
Ответ 4
Если вы хотите преобразовать URL-код, закодированный в не кодировщик, вы можете использовать:
URLDecoder
Класс полезности для декодирования формы HTML. Этот класс содержит статические методы для декодирования строки из формата MIME приложения /x -www-form-urlencoded.
Посмотрите, что вам нужно.