0

我有一个 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

4 回答 4

2

添加fo.flush()

try {
   f.createNewFile();
   FileOutputStream fo = new FileOutputStream(f);
   fo.write(bytes.toByteArray());
   fo.flush()
   fo.close();
} catch (IOException e) {
   e.printStackTrace();
}
于 2012-10-08T13:25:08.773 回答
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();
于 2012-10-08T13:17:39.667 回答
0

用 FileOutputStream 试试:

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

}
于 2012-10-08T13:18:01.353 回答
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();
    }
}
于 2012-10-08T13:30:12.937 回答