FileNotFound за исключением случаев получения ресурса URL с Java на акценте - PullRequest
1 голос
/ 02 ноября 2010

Я получаю исключение FileNotFoundException при попытке загрузить файл http://tfob.azstarnet.com/images/authors/Alcal%C3%A1_Kathleen_small.jpg. Проблема, скорее всего, заключается в том, что в строке URL-адреса есть символ с акцентом. Как я могу справиться с этим?

Вот так я и скачиваю.

Log.d(TFOB.TAG, "Image src: " + desc.getString("image"));
productURL = new URL (desc.getString("image").trim());
prod = productURL.openConnection();
is = prod.getInputStream(); // Exception gets thrown here
bis = new BufferedInputStream(is);
bit = BitmapFactory.decodeStream(bis);

Это трассировка стека:

Image src: http://tfob.azstarnet.com/images/authors/Alcalá_Kathleen_small.jpg
java.io.FileNotFoundException: http://tfob.azstarnet.com/images/authors/Alcalá_Kathleen_small.jpg
org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:1162)

Должен ли я избежать акцента или что-то в этом роде?

Ответы [ 3 ]

2 голосов
/ 11 мая 2012

Решение (в моем случае):

В случае, когда код ответа сервера>> HTTP_BAD_REQUEST (больше 400), метод getInputStream () класса HttpURLConnectionImpl выдает исключение FileNotFoundException (поэтому вы не можете открыть поток ввода).

Даже если этот файл существует, ваш объект не даст вам входной поток, потому что код ответа сервера>> 400 - изменить код ответа на сервере или использовать другой класс для подключения.

Фрагмент исходного кода: http://www.docjar.com/html/api/org/apache/harmony/luni/internal/net/www/protocol/http/HttpURLConnectionImpl.java.html

  867       @Override
  868       public InputStream getInputStream() throws IOException {
  869           if (!doInput) {
  870               throw new ProtocolException(Messages.getString("luni.28")); //$NON-NLS-1$
  871           }
  872
  873           // connect before sending requests
  874           connect();
  875           doRequest();
  876
  ...
  883           if (responseCode >= HTTP_BAD_REQUEST) {
  884               throw new FileNotFoundException(url.toString());
  885           }
  886
  887           return uis;
  888       }
0 голосов
/ 10 июля 2016

У меня есть решение с брутальным методом:

private Drawable LoadImageFromWebOperations(String strPhotoUrl) {
    try{    
        String lnk = strPhotoUrl;
            lnk = lnk.replaceAll("à","%C3%A0");
            lnk = lnk.replaceAll("è","%C3%A8");
            lnk = lnk.replaceAll("è","%C3%A9");
            lnk = lnk.replaceAll("ì","%C3%AC");
            lnk = lnk.replaceAll("ò","%C3%B2");
            lnk = lnk.replaceAll("ù","%C3%B9");
            Log.i("Tommy", lnk+"\n");
            InputStream is = (InputStream) new URL(lnk).getContent();
            Drawable d = Drawable.createFromStream(is, "src name");
            return d;
            } catch (Exception e) {
               //System.out.println("Exc=" 2e);
                Log.i("Tommy", strPhotoUrl+"\n");
                Log.i("Tommy", e.toString() + "\n\n");
                return null;
            }
}
0 голосов
/ 02 ноября 2010

Попробуйте это:

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

1009 *

1011 *

...