URL - Android中图像文件的FileNotFoundException

时间:2012-02-23 02:23:06

标签: java android exception

我正在尝试从特定网址获取图片,但它会抛出FileNotFoundException。如果我尝试从浏览器打开网址,我可以看到图片。请帮忙。以下是我的代码。感谢。

String fileURL = "http://sposter.smartag.my/images/KFC_Voucher.jpg";
String FILENAME = "caldophilus.jpg";
URL u = new URL(fileURL);
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
File root = Environment.getExternalStorageDirectory();
FileOutputStream f = new FileOutputStream(new File(root, FILENAME));
InputStream x=c.getInputStream();
int size=x.available();
byte b[]= new byte[size];
x.read(b);
f.write(b);
f.flush();
f.close();

6 个答案:

答案 0 :(得分:3)

试试这个:

  BufferedInputStream inputStream = null;
  OutputStream out = null;

  String fileName = null;
  String path = null;
  File savedFile = null;

  try
  {
      // Replace your URL here.
      URL fileURL = new URL("http://enter.your.url.here");
      URLConnection connection = fileURL.openConnection();
      connection.connect();

      inputStream = new java.io.BufferedInputStream(connection.getInputStream());

      // Replace your save path here.
      File fileDir = new File("path/to/save");
      fileDir.mkdirs();
      savedFile = new File("path/to/save", fileName);
      out = new FileOutputStream(savedFile);

      byte buf[] = new byte[1024];
      int len;

      long total = 0;

      while ((len = inputStream.read(buf)) != -1)
      {
        total += len;
        out.write(buf, 0, len);
      }

      out.close();
      inputStream.close();
  }
  catch (Exception)
  {

  }

答案 1 :(得分:2)

我试试这个,它的工作正常。感谢。

URL url = new URL(fileURL);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream("/sdcard/caldophilus.jpg");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();

答案 2 :(得分:1)

尝试以下代码。它应该工作!

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;


public class DownloadManager {

    public static void downLoadImage(String imageURL, String destinationFileName) throws IOException {
        URL url = new URL(imageURL);
        InputStream inputStream = url.openStream();
        OutputStream outputStream = new FileOutputStream(destinationFileName);
        byte[] byteData = new byte[2048];
        int length;
        while((length=inputStream.read(byteData))!=-1) {
            outputStream.write(byteData, 0, length);
        }
        inputStream.close();
        outputStream.close();
    }

    public static void main(String[] args) throws IOException {
        String imageURL = "http://sposter.smartag.my/images/KFC_Voucher.jpg";
        String destinationFileName = "C:/Users/sarath_sivan/Desktop/caldophilus.jpg";
        downLoadImage(imageURL, destinationFileName);
    }
}

答案 3 :(得分:0)

立即尝试 -

try {
            url = paths[0];
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            int length = connection.getContentLength();
            InputStream is = (InputStream) url.getContent();
            byte[] imageData = new byte[length];
            int buffersize = (int) Math.ceil(length / (double) 100);
            int downloaded = 0;
            int read;
            while (downloaded < length) {
                if (length < buffersize) {
                    read = is.read(imageData, downloaded, length);
                } else if ((length - downloaded) <= buffersize) {
                    read = is.read(imageData, downloaded, length
                            - downloaded);
                } else {
                    read = is.read(imageData, downloaded, buffersize);
                }
                downloaded += read;
                publishProgress((downloaded * 100) / length);
            }
            Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0,
                    length);
            if (bitmap != null) {
                Log.i(TAG, "Bitmap created");
            } else {
                Log.i(TAG, "Bitmap not created");
            }
            is.close();
            return bitmap;
        } catch (MalformedURLException e) {
            Log.e(TAG, "Malformed exception: " + e.toString());
        } catch (IOException e) {
            Log.e(TAG, "IOException: " + e.toString());
        } catch (Exception e) {
            Log.e(TAG, "Exception: " + e.toString());
        }

然后,只需看看here

答案 4 :(得分:-1)

在......

FileOutputStream f = new FileOutputStream(new File(root, FILENAME));

尝试使用fileURL替换FILENAME。 另外,抛出的是哪一行?那会有所帮助。

答案 5 :(得分:-1)

String fileURL = "http://sposter.smartag.my/images/KFC_Voucher.jpg";

String FILENAME = "caldophilus.jpg";

URL u = new URL(fileURL);

HttpURLConnection c = (HttpURLConnection) u.openConnection();

c.setRequestMethod("GET");

//c.setDoOutput(true); =========== remove this;

c.connect();