AkariKamigishi
AkariKamigishi

Reputation: 277

FileNotFoundException with HttpURLConnection in Android

        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();

Exception caught: java.io.FileNotFoundException http://192.168.2.143/version.txt, where path="http://192.168.2.143/version.txt", I use browser in my device to open http://192.168.2.143/version.txt, can be opened. I have INTERNET permission in my manifest. Any idea?

Upvotes: 0

Views: 620

Answers (2)

gpiazzese
gpiazzese

Reputation: 445

It's the same problem I was having: HttpUrlConnection returns FileNotFoundException if you try to read the getInputStream() from the connection.
You should instead use getErrorStream() when the status code is higher than 400.

More than this, please be careful since it's not only 200 to be the success status code, even 201, 204, etc. are often used as success statuses.

Here is an example of how I went to manage it

... 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....

In this way, you'll be able to get the needed response in both success and error cases.

Hope this helps!

Upvotes: 1

Enrichman
Enrichman

Reputation: 11337

Try this to read file over the internet: Reading Text File From Server on Android

I'm not sure you can use File.

Upvotes: 0

Related Questions