Подтвердить что ты не робот

Преобразовать между URL-адресом и именем файла Windows (Java)?

Есть ли стандартный/хороший способ конвертации между именами файлов url и windows в Java?

Я пытаюсь загрузить файлы, но я хочу, чтобы имя файла Windows было обратимо обратно в исходное имя файла. Обратите внимание, что часть запроса URL важна, поскольку я буду загружать разные страницы, которые отличаются только запросом.

Мое текущее хакерское решение заключается в замене незаконных символов (например, '?') на определенную строку (например, "QQ" ), но это делает преобразование обратно к URL менее прозрачным. Есть ли лучший способ?

4b9b3361

Ответ 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.

Посмотрите, что вам нужно.