2009-06-05 1 views
1

Сначала я приведу крошечный фрагмент кода здесь:В Java, как я могу избежать HTTP 404 получения файла: // URL со специальными символами в нем?

String path = "".equals(url.getPath()) ? "/" : url.getPath(); 
java.io.File f = new java.io.File(path); 

if (!f.exists()) { 
    this.code = 404; // http Not Found 
    return; 
} 

Здесь введите URL-адрес является java.net.URL, и его значение имеет следующий формат:

file:///directory1/directory2.../filename 

выше код работает 90% когда он обрабатывает общие URL-адреса, но он терпит неудачу, когда в имени файла есть специальные символы. Например:

/tmp/Marissafolli/Receptionist/Administrative Assistant/Marissa's Resume.txt.txt 

URL-адреса, подобные этому, будут сообщать код «404», даже если они существуют. Следующая версия будет работать для тех особых случаев:

java.io.File f = new java.io.File(url.toURI()); 

Но url.toURI() только в J2SE 1.5.0. Поэтому мне нужно использовать первую версию. Как я могу заставить его работать?

+0

Откуда берутся оригинальные url? – objects

ответ

2

Это не ошибка, это факт, что это не действительный URL.

Вам необходимо установить escape эти пробелы в% 20, для начала. Я не знаю, что вы делаете с апострофом. This blog предполагает, что он должен стать% 27. Попробуй и посмотри.

или просто попробуйте java.net.URLEncoder, чтобы увидеть, что он подарит вам.

+0

Я не верю, что вы можете использовать URLEncoder, поскольку он будет кодировать * все *, включая символы:: //. Сама Java не имеет класса для выполнения необходимой кодировки. – Eddie

+0

Возможно, вы правы, Эдди. Я сам не пробовал. Я просто болел за что-то в API, которое могло бы помочь. Возможно, это была не очень хорошая идея. – duffymo

0

Почему бы не сначала создать URI, а затем вызвать метод toURL(). Больше информации here.

[UPDATE] Или даже лучше, почему бы не использовать URI непосредственно в конструкторе Файла, так как класс URI позаботится о кодировке для вас.