7

特定のディレクトリのパブリック ギャラリー フォルダーに画像ファイルを書き込もうとしていますが、ディレクトリであるためファイルを開くことができないというエラーが表示され続けます。

私がこれまでに持っているものは次のとおりです

//set the file path
    String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + directory;

    File outputFile = new File(path,"testing.png");


    outputFile.mkdirs();

    FileOutputStream out = new FileOutputStream(outputFile);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out);

directory はアプリケーション名です。したがって、アプリケーションによって保存されたすべての写真はそのフォルダー/ディレクトリに移動しますが、エラーが発生し続けます

/storage/sdcard0/Pictures/appname/testing.png: open failed: EISDIR (Is a directory)

ディレクトリに入れようとせずに、変数パスをファイルとしてキャストしようとしても

File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

エラーは表示されませんが、写真はまだギャラリーに表示されません。

***回答 ディレクトリ内にファイルを作成する前にディレクトリを作成できなかったため、最初にこのコードを実行したときに、testing.png という名前のディレクトリが作成されたことが問題でした。したがって、解決策は、最初にディレクトリを作成してから、次のように別のファイルで書き込むことです

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString() + File.separator + directory;

//directory is a static string variable defined in the class

            //make a file with the directory
    File outputDir = new File(path);

            //create dir if not there
    if (!outputDir.exists()) {
         outputDir.mkdir();

    }

            //make another file with the full path AND the image this time, resized is a static string
    File outputFile = new File(path+File.separator+resized);

    FileOutputStream out = new FileOutputStream(outputFile);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out);

私が最初にしたのと同じ間違いをした場合は、ストレージに移動してディレクトリを手動で削除する必要があるかもしれないことに注意してください

4

6 に答える 6

13

ファイルではなくディレクトリに書き込もうとしています。これを試して

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + directory;   
File outputDir= new File(path);   
outputDir.mkdirs();   
File newFile = new File(path + File.separator + "test.png");
FileOutputStream out = new FileOutputStream(newFile);   
bmp.compress(Bitmap.CompressFormat.PNG, 100, out);   
于 2012-10-19T03:56:41.807 に答える
3

あなたのコードは正しいです。次のように少し変更するだけで済みます。

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + directory;

    // First Create Directory
    File outputFile = new File(path);
    outputFile.mkdirs();

    // Now Create File
    outputFile = new File(path,"testing.png");
    FileOutputStream out = new FileOutputStream(outputFile);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, out);

また、AndroidManifest.xml ファイルで WRITE_EXTERNAL_STORAGE パーミッションを付与することを忘れないでください。

于 2012-10-19T03:59:15.957 に答える
2

getExternalStoragePublicDirectory は廃止されたため、使用する必要があります

context.getExternalFilesDir(Environment.DIRECTORY_PICTURES)
于 2020-05-11T16:50:18.750 に答える
0

この方法を使用します:

bitmap.compress(CompressFormat.JPEG, 100,  new FileOutputStream("/mnt/sdcard/" + new Date().getTime() + ".jpg"));`

Path : Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + file name

于 2012-10-19T03:58:46.583 に答える