3

我正在尝试下载图像文件并覆盖现有文件(如果存在)。

但它不会替换现有文件。

public static String saveBitmap(String url, String fileName, Context context,
        boolean deleteExisting) {
    File cacheDir;
    if (android.os.Environment.getExternalStorageState().equals(
            android.os.Environment.MEDIA_MOUNTED))
        cacheDir = context.getDir("images", Context.MODE_PRIVATE);
    else
        cacheDir = context.getCacheDir();
    if (!cacheDir.exists())
        cacheDir.mkdirs();

    File f = new File(cacheDir, fileName + ".png");
    Bitmap bitmap = null;
    // Is the bitmap in our cache?
    if (f.exists()) {
        bitmap = BitmapFactory.decodeFile(f.getPath());
    }
    if (bitmap != null && !deleteExisting)
        return f.getPath();
    else {
        // Nope, have to download it
        try {
            InputStream input = new URL(url).openConnection().getInputStream();
            bitmap = BitmapFactory.decodeStream(new FlushedInputStream(input));
            // save bitmap to cache for later
            writeFile(bitmap, f);
            return f.getPath();
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
            return null;
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            return null;
        }
    }
}
4

2 回答 2

4

通过以下代码存储文件

private void createDirectoryAndSaveFile(Bitmap imageToSave, String fileName) {

File direct = new File(Environment.getExternalStorageDirectory() + "/DirName");

if (!direct.exists()) {
    File wallpaperDirectory = new File("/sdcard/DirName/");
    wallpaperDirectory.mkdirs();
  }

    File file = new File(new File("/sdcard/DirName/"), fileName);
    if (file.exists())
        file.delete();
    try {
        FileOutputStream out = new FileOutputStream(file);
        imageToSave.compress(Bitmap.CompressFormat.JPEG, 100, out);
        out.flush();
        out.close();

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

}
于 2013-08-06T12:48:00.153 回答
0

您是否尝试过权限,如果没有,请添加此权限manifest

  uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
于 2013-08-06T12:51:46.800 回答