1

Webサービスを通じて提供されたURLを使用して、サーバーからファイルをダウンロードしています。デバイスのすべてのバージョンで成功しましたが、OS4.1デバイスで例外が発生します。私は以下のコードを使用しています:

public static Boolean DownloadFile(String fileURL, File directory) {
                try {

                        FileOutputStream f = new FileOutputStream(directory);
                        URL u = new URL(fileURL);
                        HttpURLConnection c = (HttpURLConnection) u.openConnection();
                        c.setRequestMethod("GET");
                        c.setDoOutput(true);
                        c.connect();

                        InputStream in = c.getInputStream();

                        byte[] buffer = new byte[1024];
                        int len1 = 0;
                        while ((len1 = in.read(buffer)) > 0) {
                                f.write(buffer, 0, len1);
                        }
                        f.close();
                        return true;
                } catch (Exception e) {
                        e.printStackTrace();
                        return false;
                }
        }

c.getInputStream();行でjava.io.FileNotFoundExceptionが発生しています。 この問題を解決するために私に提案してください。

内部メモリを使用する予定ですが、ユーザーが内部メモリにアクセスできないためです。

4

2 に答える 2

7

このコードを試してください:ファイルを作成するCONTEXTがActivity / ApplicationContext/etcである可能性があることに注意してください

public boolean downloadFile(final String path) {
    try {
        URL url = new URL(path);

        URLConnection ucon = url.openConnection();
        ucon.setReadTimeout(5000);
        ucon.setConnectTimeout(10000);

        InputStream is = ucon.getInputStream();
        BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5);

        File file = new File(CONTEXT.getDir("filesdir", Context.MODE_PRIVATE) + "/yourfile.png");

        if (file.exists()) {
            file.delete();
        }
        file.createNewFile();

        FileOutputStream outStream = new FileOutputStream(file);
        byte[] buff = new byte[5 * 1024];

        int len;
        while ((len = inStream.read(buff)) != -1) {
            outStream.write(buff, 0, len);
        }

        outStream.flush();
        outStream.close();
        inStream.close();

    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }

    return true;
}
于 2012-09-25T16:30:03.980 に答える
-2

このコードを試してください:

String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/saved_images");
myDir.mkdirs();
Random generator = new Random();
int n = 10000;
n = generator.nextInt(n);
String fname = "Image-" + n + ".jpg";
File file = new File(myDir, fname);

if (file.exists()) file.delete();

try {
  FileOutputStream out = new FileOutputStream(file);
  finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
  out.flush();
  out.close();
} catch (Exception e) {
  e.printStackTrace();
}

マニフェストを追加します。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
于 2012-09-25T14:45:20.797 に答える