2

ビットマップをファイルに保存してから、SD カードに保存しようとしています。これが私のコードです:

String path = Environment.getExternalStorageDirectory().toString();
File file = new File(path, "Jhs"+".jpg");
file.mkdir();
OutputStream fOut;
try {
    fOut = new FileOutputStream(file);
    BitmapMatrix convMatrix = new BitmapMatrix(0);
    convMatrix.result.compress(Bitmap.CompressFormat.JPEG, 100, fOut);

    fOut.flush();
    fOut.close();
} catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

また、このコードはActivityを拡張しないクラスにあります。おそらくこれに問題があると考えて、この情報を提供しています。これが私のLogCatです

05-01 18:00:22.555: W/System.err(31392): java.io.FileNotFoundException:           /mnt/sdcard/Jhs.jpg (Permission denied)
05-01 18:00:22.555: W/System.err(31392):    at org.apache.harmony.luni.platform.OSFileSystem.open(Native Method)
05-01 18:00:22.555: W/System.err(31392):    at dalvik.system.BlockGuard$WrappedFileSystem.open(BlockGuard.java:232)
05-01 18:00:22.555: W/System.err(31392):    at java.io.FileOutputStream.<init>(FileOutputStream.java:94)
05-01 18:00:22.555: W/System.err(31392):    at java.io.FileOutputStream.<init>(FileOutputStream.java:66)
05-01 18:00:22.555: W/System.err(31392):    at com.example.imageprocess.BitmapMatrix.computeConvolution3x3(BitmapMatrix.java:123)
05-01 18:00:22.555: W/System.err(31392):    at com.example.imageprocess.MainActivity.sharpen(MainActivity.java:105)
05-01 18:00:22.555: W/System.err(31392):    at com.example.imageprocess.MainActivity.onCreate(MainActivity.java:51)
05-01 18:00:22.555: W/System.err(31392):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
05-01 18:00:22.555: W/System.err(31392):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1836)
05-01 18:00:22.555: W/System.err(31392):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1893)
05-01 18:00:22.555: W/System.err(31392):    at android.app.ActivityThread.access$1500(ActivityThread.java:135)
05-01 18:00:22.555: W/System.err(31392):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1054)
05-01 18:00:22.555: W/System.err(31392):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-01 18:00:22.565: W/System.err(31392):    at android.os.Looper.loop(Looper.java:150)
05-01 18:00:22.565: W/System.err(31392):    at android.app.ActivityThread.main(ActivityThread.java:4389)
05-01 18:00:22.565: W/System.err(31392):    at java.lang.reflect.Method.invokeNative(Native Method)
05-01 18:00:22.565: W/System.err(31392):    at java.lang.reflect.Method.invoke(Method.java:507)
05-01 18:00:22.565: W/System.err(31392):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)
05-01 18:00:22.565: W/System.err(31392):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)
05-01 18:00:22.565: W/System.err(31392):    at dalvik.system.NativeStart.main(Native Method)
4

4 に答える 4

6

その logcat は、ファイルを書き込む権限がないことを示しています。宣言したことを確認してください

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Android マニフェストで。

これを追加できます:

File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath()+ "/%YOUR_FOLDER%/");
if (!(dir.exists() && dir.isDirectory())) {
    dir.mkdirs();
}

ファイルの別のフォルダーの場所を試して、それが役立つかどうかを確認する場合は、現在のコードの上にある. コードは、ファイルを作成できるディレクトリ /sdcard/Downloads/YOUR_FOLDER/ を作成します。保管場所のオプションについては、こちらを参照してください。

その後、次のことができます

File file = new File(dir, "Jhs"+".jpg");
file.createNewFile(); //CREATE THE FILE FIRST!
OutputStream fOut;
try {
    fOut = new FileOutputStream(file);
    ....
}

あなたの投稿のように。

于 2013-05-01T12:38:57.510 に答える
2

AndroidManifest.xml取得している例外を考えると、ファイルにWRITE_EXTERNAL_STORAGE許可を与える必要があります

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2013-05-01T12:38:57.137 に答える
1

java.io.FileNotFoundException: /mnt/sdcard/Jhs.jpg (許可が拒否されました)

この権限をマニフェストに追加します

   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2013-05-01T12:39:05.893 に答える
1
 java.io.FileNotFoundException: /mnt/sdcard/Jhs.jpg (Permission denied)

WRITE_EXTERNAL_STORAGE権限がないようです。

これを AndroidMANifest.xml に追加します。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
于 2013-05-01T12:40:15.847 に答える