Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


HttpURLConnection java.io.FileNotFoundException

Actualmente utilizo el código de abajo. Soy nuevo a esta característica así que puede ser apenas algo simple pero no puedo parecer conseguir esto trabajar con mi servidor. El código abajo funciona muy bien si me conecto a parece ser servidores de Apache sin embargo cuando intento conectar con mi servidor de .Net lanza un error. Estoy adivinando que es un requisito de cabecera, pero parece que no puede tener éxito aquí no importa lo que intento.

public String Download(String Url) { String filepath=null; try { //set the download URL, a url that points to a file on the internet //this is the file to be downloaded URL url = new URL(Url); //create the new connection HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); //set up some things on the connection urlConnection.setRequestMethod("GET"); urlConnection.setDoOutput(true); //and connect! urlConnection.connect(); //set the path where we want to save the file //in this case, going to save it on the root directory of the sd card. File SDCardRoot = Environment.getExternalStorageDirectory(); //create a new file, specifying the path, and the filename //which we want to save the file as. String filename= "effortback.png"; // you can download to any type of file ex:.jpeg (image) ,.txt(text file),.mp3 (audio file) Log.i("Local filename:",""+filename); File file = new File(SDCardRoot + "/",filename); //===================================== if(file.createNewFile()) { file.createNewFile(); } //===================================== //this will be used to write the downloaded data into the file we created FileOutputStream fileOutput = new FileOutputStream(file); //this will be used in reading the data from the internet InputStream inputStream = urlConnection.getInputStream(); //===================================== //this is the total size of the file int totalSize = urlConnection.getContentLength(); //variable to store total downloaded bytes int downloadedSize = 0; //===================================== //create a buffer... byte[] buffer = new byte[2048]; int bufferLength = 0; //used to store a temporary size of the buffer //now, read through the input buffer and write the contents to the file while ( (bufferLength = inputStream.read(buffer)) > 0 ) { //add the data in the buffer to the file in the file output stream (the file on the sd card fileOutput.write(buffer, 0, bufferLength); //add up the size so we know how much is downloaded downloadedSize += bufferLength; //this is where you would do something to report the prgress, like this maybe Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ; } //close the output stream when done fileOutput.close(); if(downloadedSize==totalSize) filepath=file.getPath(); //catch some possible errors... } catch (MalformedURLException e) { e.printStackTrace(); Log.i("URL-ERROR:",e.toString()); } catch (IOException e) { filepath=null; e.printStackTrace(); Log.i("IO-ERROR:",e.toString()); } Log.i("filepath:"," "+filepath) ; return filepath; } 

Los errores van desde:

  • Android imageView: configuración de los parámetros de arrastrar y comprimir el zoom
  • Notificar una vez que el audio ha terminado de reproducir
  • Lista de palabras reservadas en Android
  • Cómo modificar la vista de la pantalla de llamadas entrantes y salientes en android
  • Notificación de 10 días de la infracción a término de desarrollador de Google Play con respecto al servicio de notificación push de OneSignal
  • ¿Podemos tener texto ineditable en edittext
  •  java.io.FileNotFoundException //I always get this with either one of the below org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1061) //or this one below libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionTmpl.java:186) 

    Parece que no importa lo que intente, no puedo conseguir que funcione. Una vez más, funciona si intento descargar una imagen de Google o de algunos otros sitios, no todos pero definitivamente no los míos (.Net). ¿Que me estoy perdiendo aqui? Por favor ayuda.

  • Enviar una aplicación con una base de datos
  • ¿Cómo hacer una pausa con DownloadManager?
  • En el emulador de Android, al intentar cargar una vista web, obtengo net :: err_cache_miss
  • Android - ¿Dónde debemos guardar el nombre de usuario y la contraseña en la memoria del dispositivo?
  • Margen dentro del texto de edición en android
  • Usar dimensiones en estilo personalizado
  • 2 Solutions collect form web for “HttpURLConnection java.io.FileNotFoundException”

    Puede obtener una FileNotFoundException de HttpUrlConnection (y OkHttpClient ) si su servidor devuelve > = HTTPStatus.BAD_REQUEST (400). Debe comprobar el código de estado primero para comprobar qué secuencia necesita leer.

     int status = connection.getResponseCode(); if(status >= HttpStatus.SC_BAD_REQUEST) in = connection.getErrorStream(); else in = connection.getInputStream(); 

    HttpStatus desaconsejado. La última sintaxis parece ser:

      InputStream inputStream; int status = urlConnection.getResponseCode(); if (status != HttpURLConnection.HTTP_OK) inputStream = urlConnection.getErrorStream(); else inputStream = urlConnection.getInputStream(); 

    Tenía el mismo problema, resuelto como dijiste:

     urlConnection.setDoOutput(false); 

    Tenga en cuenta que debe establecerlo en false porque es true de forma predeterminada.
    Tenga en cuenta que debe establecerlo en false, ya que Volley HurlStack estaba estableciendo en true.
    Cuídate 😉

    EDIT: Acabo de comprobar el código y por defecto es falso como @Abraham Philip dijo. Pero tuve que ponerlo en falso porque si llamaba getDoOutput() estaba devolviendo true . Me pareció que Volley HurlStack estaba estableciendo que a la verdad. Por lo tanto, mi conclusión es, setDoOutput a false y funcionará.

     package java.net; public abstract class URLConnection { ... /** * Specifies whether this {@code URLConnection} allows sending data. */ protected boolean doOutput; ... public boolean getDoOutput() { return doOutput; } public void setDoOutput(boolean newValue) { checkNotConnected(); this.doOutput = newValue; } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.