java.io.FileNotFoundException:/storage/emulated/0/saved_images/grub.jpg:open failed:ENOENT(没有这样的文件或目录)

时间:2014-12-09 06:37:51

标签: android

我使用以下代码将图像保存在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();
    }
}

我错过了什么吗?

6 个答案:

答案 0 :(得分:11)

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

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();
}

}

答案 1 :(得分:7)

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

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

此问题是由于引入了Android 10中引入的范围存储而引起的。并且确保您在清单中添加许可权请求并从用户那里获取运行时许可权。在最新的android版本中,您需要用户的运行时权限。

答案 2 :(得分:1)

这是我在检查文本文件中的时间戳时从存储中读取文件的方式。第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

答案 3 :(得分:1)

在Android 6.0.0中,您需要使用以下代码:

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

答案 4 :(得分:0)

确保您将权限放在Manifest:

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

答案 5 :(得分:0)

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