Преобразовать между URL и имя файла Windows (Java)? - PullRequest
16 голосов
/ 31 октября 2009

Существует ли стандартный / хороший способ конвертации между URL-адресами и именами файлов Windows в Java?

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

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

Ответы [ 4 ]

23 голосов
/ 31 октября 2009

Вы можете сделать хуже, чем использовать 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 голосов
/ 16 октября 2016

Но возможно ли вообще кодировать URL в имя файла? Я имею в виду, может ли быть 100% правильное решение? Я думаю, что преобразование URL-адреса в имя файла вообще является неправильной идеей из-за различных ограничений, установленных для URL-адресов и имен файлов:

Максимальная длина имени файла (файловая система NTFS, Unicode, с использованием кодировки UTF-16) - 255

Максимальная длина URL (с использованием кодировки UTF-8?) - 2000 символов

2 голосов
/ 31 октября 2009

Класс java.io.File принимает URI & | имя файла в качестве конструктора, но содержит методы toURI() & toURL(), а также getName() & getPath(). Я полагаю, это будет правильное преобразование для вас?

0 голосов
/ 31 октября 2009

Если вы хотите преобразовать URL, закодированный в не кодировщик, вы можете использовать:

* раскодирования URL-адресов 1004 *

Класс утилит для декодирования HTML-форм. Этот класс содержит статические методы для декодирования строки из формата MIME application / x-www-form-urlencoded.

Посмотри, если это то, что тебе нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...