繁体   English   中英

java.io.FileNotFoundException:/storage/emulated/0/saved_images/grub.jpg:打开失败:ENOENT(没有那个文件或目录)

[英]java.io.FileNotFoundException: /storage/emulated/0/saved_images/grub.jpg: open failed: ENOENT (No such file or directory)

正在使用以下代码将图像保存在 SD 卡中,但我不断收到以下异常

private void SaveImage(Bitmap finalBitmap,String filename) {

    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/saved_images");    
    myDir.mkdirs();

    String fname = filename;
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete (); 
    try {
           FileOutputStream out = new FileOutputStream(file);
           finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
           out.flush();
           out.close();

    } catch (Exception e) {
           e.printStackTrace();
    }
}

我在这里错过了什么吗?

修改您的代码,因为您没有创建目录:

 private void SaveImage(Bitmap finalBitmap,String filename) {

    String root = Environment.getExternalStorageDirectory().toString();
    File myDir = new File(root + "/saved_images");    
    myDir.mkdirs();

    String fname = filename;
    File file = new File (myDir, fname);
    if (file.exists ()) file.delete (); 
    file.createNewFile();
    try {
           FileOutputStream out = new FileOutputStream(file);
           finalBitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
           out.flush();
           out.close();

    } catch (Exception e) {
           e.printStackTrace();
    }
}

如果您在 Android 版本 10 中遇到此问题,请打开清单文件并将此行添加到您的应用程序标记中。

<application android:requestLegacyExternalStorage="true" .....>

这个问题是因为在 Android 10 中引入了作用域存储。并确保您在清单中添加权限请求并从用户那里获取运行时权限。 在最新的 android 版本中,您需要用户的运行时权限。

这就是我在检查文本文件中的时间戳时从存储中读取文件的方式。 第 2 行可能是您的最佳选择。

File root = android.os.Environment.getExternalStorageDirectory();
File dir = new File(root.getAbsolutePath() + "/path");
dir.mkdirs();
File file = new File(dir, ".storage.txt");
Reader pr;
String line = "";
try {
    pr = new FileReader(file);
    int data = pr.read();
        while (data != -1) {
            line += (char) data;
            data = pr.read();
        }
    pr.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
//do stuff with line

从 Android 6.0.0 开始,您需要使用以下代码:

if (ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED)

确保您将权限放在清单上:

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

如果您在 Android 版本 10 中遇到此问题,请打开清单文件并将此行添加到您的应用程序标记中。

<应用程序android:requestLegacyExternalStorage="true" .....>

从 SDK 版本 30 开始,您不能扩展android:requestLegacyExternalStorage="true" 而是稍微修改您的 ImageLoader 库。 我看到你必须修改你的文件路径: File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "saved_images"); 进入类似File dir = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES), "saved_images"); . 这应该有技巧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 找不到文件异常:java.io.FileNotFoundException:/storage/emulated/0/image.jpg:打开失败:ENOENT(没有此类文件或目录) java.io.FileNotFoundException:/storage/emulated/0/user_image_name.jpg打开失败:ENOENT(无此类文件或目录)崩溃应用程序 java.io.FileNotFoundException:mounted / saved_images / Image-6999.jpg(无此类文件或目录) 无法解码流java.io.FileNotFoundException / storage / emulated / 0 open failed:ENOENT(没有这样的文件或目录 Android - java.io.FileNotFoundException: /storage/emulated/0/Notes/File.txt: open failed: ENOENT (No such file or directory) Android/Java:I/System.out:错误:java.io.FileNotFoundException:/storage/emulated/0/hermaps/...:打开失败:ENOENT(没有这样的文件或目录) java.io.FileNotFoundException: /storage/emulated/0/Notes/fact50Result.txt: open failed ENOENT (No such file or directory) java.io.FileNotFoundException:/file/path.jpg打开失败:ENOENT(没有这样的文件或目录) Android - java.io.FileNotFoundException打开失败:ENOENT(没有这样的文件或目录) java.io.FileNotFoundException:/storage/emulated/0/crash/crash-2016-09-04-15-35-25-1472974525277.log:打开失败:ENOENT(没有这样的文件或目录)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM