2013-06-14 3 views
0
 URL url = new URL(path); 
     HttpURLConnection c = (HttpURLConnection) url.openConnection(); 
     c.setRequestMethod("GET"); 
     c.setDoOutput(true); 
     c.connect(); 

     String PATH = "/mnt/sdcard/Android/"; 
     File file = new File(PATH); 
     file.mkdirs(); 
     File outputFile = new File(file, "version.txt"); 
     if(outputFile.exists()){ 
      outputFile.delete(); 
     } 
     FileOutputStream fos = new FileOutputStream(outputFile);   
     InputStream is = c.getInputStream(); 

     byte[] buffer = new byte[1024]; 
     int len1 = 0; 
     while ((len1 = is.read(buffer)) != -1) { 
      fos.write(buffer, 0, len1); 
     } 
     fos.close(); 
     is.close(); 

Исключение пойманной: java.io.FileNotFoundException http://192.168.2.143/version.txt, где путь = "http://192.168.2.143/version.txt", я использую браузер в устройстве, чтобы открыть http://192.168.2.143/version.txt, может быть открыт. У меня есть разрешение INTERNET в моем манифесте. Есть идеи?FileNotFoundException с HttpURLConnection в Android

+1

У вас есть разрешение на запись в манифесте? не используйте жестко закодированные значения пути. Файл файла = \t новый файл (android.os.Environment.getExternalStorageDirectory(), «Android»); – Raghunandan

+0

Да У меня есть разрешение WRITE_EXTERNAL_STORAGE, и я думаю, что проблема не возникает из outputFile, это должен быть входной поток? – AkariKamigishi

+0

http://192.168.2.143/version.txt не открывается в моем браузере если у пользователя нет ошибок. – Raghunandan

ответ

0

Это та самая проблема, с которой я столкнулся: HttpUrlConnection возвращает FileNotFoundException, если вы попытаетесь прочитать getInputStream() из соединения.
Вы должны использовать вместо getErrorStream(), когда код состояния выше, чем 400.

Более того, пожалуйста, будьте осторожны, так как это не только 200, чтобы быть код статуса успеха, даже 201, 204 и т.д., часто используются как статусы успеха.

Вот пример того, как я пошел, чтобы управлять его

... connection code code code ... 

// Get the response code 
int statusCode = connection.getResponseCode(); 

InputStream is = null; 

if (statusCode >= 200 && statusCode < 400) { 
    // Create an InputStream in order to extract the response object 
    is = connection.getInputStream(); 
} 
else { 
    is = connection.getErrorStream(); 
} 

... callback/response to your handler.... 

Таким образом, вы будете иметь возможность получить необходимую реакцию как успех и ошибок случаях.

Надеюсь, это поможет!

Смежные вопросы