将我的位图保存到文件后,大小为0 KB

时间:2012-10-08 13:15:55

标签: android bitmap

我有一个Android应用程序,我有一个位图,我想将它保存到应用程序数据文件夹。该文件在执行后存在,但其0kb且没有图片在里面。

错误在哪里?

这是我的代码:

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
myBitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);

File f = new File(projDir + File.separator + newPath);
try {
    f.createNewFile();
    FileOutputStream fo = new FileOutputStream(f);
    fo.write(bytes.toByteArray());
    fo.close();
} catch (IOException e) {
    e.printStackTrace();
}

4 个答案:

答案 0 :(得分:2)

添加fo.flush()

try {
   f.createNewFile();
   FileOutputStream fo = new FileOutputStream(f);
   fo.write(bytes.toByteArray());
   fo.flush()
   fo.close();
} catch (IOException e) {
   e.printStackTrace();
}

答案 1 :(得分:0)

尝试添加fo.flush()

try {
   f.createNewFile();
   FileOutputStream fo = new FileOutputStream(f);
   fo.write(bytes.toByteArray());
   fo.flush()
   fo.close();
} catch (IOException e) {
   e.printStackTrace();
}

修改

试试这个:

File f = new File(projDir + File.separator + newPath);
FileOutputStream out = new FileOutputStream(f);
myBitmap.compress(Bitmap.CompressFormat.JPEG, 40, out);
out.flush();
out.close();

答案 2 :(得分:0)

使用FileOutputStream尝试:

try {
  FileOutputStream fos= new FileOutputStream(projDir + File.separator + newPath);
  myBitmap.compress(Bitmap.CompressFormat.JPEG, 40, fos);
} catch (Exception e) {

}

答案 3 :(得分:0)

无需调用createNewFile(),如果它不存在,将自动创建。我想因为你永远不会删除它已经存在并且因为它而没有被创建。

同样作为一个好习惯,你应该将清理相关代码放在finally块中。这样,如果在某处发生某些错误,文件将最终关闭。

ByteArrayOutputStream bytes = new ByteArrayOutputStream();
boolean success = myBitmap.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
if(!success) {
     Log.w("myApp", "cannot compress image");
}
String patg = projDir + File.separator + newPath
File f = new File(projDir + File.separator + newPath);
Log.w("myApp", "cannot compress image");
try {
    FileOutputStream fo = new FileOutputStream(f);
    fo.write(bytes.toByteArray());
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if(fo != null) {
            fo.flush();
            fo.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}