ビットマップイメージをファイルディレクトリに挿入していたときに、ファイルが見つかりませんという例外が表示され、ディレクトリであると表示されています。
これが私のコードです:
File mFolder = new File(getFilesDir() + "/sample");
if (!mFolder.exists()) {
mFolder.mkdir();
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(mFolder);
bitmap.compress(Bitmap.CompressFormat.PNG,70, fos);
fos.flush();
fos.close();
// MediaStore.Images.Media.insertImage(getContentResolver(), b, "Screen", "screen");
}catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
Logcat:
07-12 01:08:05.434: W/System.err(8170): Java.io.FileNotFoundException: /data/data/com.sample.sam/files/sample(Is a directory)
07-12 01:08:05.434: W/System.err(8170): at org.Apache.harmony.luni.platform.OSFileSystem.open(Native Method)
07-12 01:08:05.434: W/System.err(8170): at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.Java:239)
07-12 01:08:05.444: W/System.err(8170): at Java.io.FileOutputStream.<init>(FileOutputStream.Java:101)
07-12 01:08:05.444: W/System.err(8170): at Java.io.FileOutputStream.<init>(FileOutputStream.Java:77)
ストリームに書き込む前にファイルを作成する必要があります。
File mFolder = new File(getFilesDir() + "/sample");
File imgFile = new File(mFolder.getAbsolutePath() + "/someimage.png");
if (!mFolder.exists()) {
mFolder.mkdir();
}
if (!imgFile.exists()) {
imgFile.createNewFile();
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(imgFile);
bitmap.compress(Bitmap.CompressFormat.PNG,70, fos);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
ディレクトリではなくファイルを作成する場合は、file.createNewFile()
を使用します。また、パスが存在しない場合は、mkDirs()
を使用する必要があります。
書き込み用にディレクトリ自体を開いています。これは動作しません。ディレクトリ内のファイルを指定する必要があります。例:
fos = new FileOutputStream(new File(mFolder, "myfile"));