错误:打开失败:ENOENT(没有这样的文件或目录)

新手上路,请多包涵

我试图创建一个文件来保存相机中的照片,结果我无法创建该文件。但我真的找不到错误。你能看看它并给我一些建议吗?

     private File createImageFile(){
            File imageFile=null;
            String stamp=new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
            File dir= Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
            String imageFileName="JPEG_"+stamp+"_";
            try {
                imageFile=File.createTempFile(imageFileName,".jpg",dir);
            } catch (IOException e) {
                Log.d("YJW",e.getMessage());
            }
            return  imageFile;
        }

我已经添加了权限。

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

该方法总是给出这样的错误:

打开失败:ENOENT(没有这样的文件或目录)

原文由 Jiawei Yang 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 683
2 个回答

图片目录可能还不存在。它不能保证在那里。

getExternalStoragePublicDirectory() 的 API 文档中,代码使用 mkdirs 确保目录存在:

 File path = Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_PICTURES);
File file = new File(path, "DemoPicture.jpg");

try {
    // Make sure the Pictures directory exists.
    path.mkdirs();

…所以它可能就像在您之前将 path.mkdirs() 添加到现有代码中一样简单 createTempFile

原文由 Matt Gibson 发布,翻译遵循 CC BY-SA 3.0 许可协议

以下是我发现的修复,首先在您的 AndroidManifest 文件中添加这两行

在 setContentView 方法之后添加以下行

ActivityCompat.requestPermissions(FullImageActivity.this,
                new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
                REQUEST_CODE);

并将图像保存在图库中,请使用以下代码

private void SaveImageToGallery() {
        BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
        Bitmap bitmap = drawable.getBitmap();
        FileOutputStream outputStream = null;
        File file = Environment.getExternalStorageDirectory();
        File dir = new File(file.getAbsolutePath()+"/folderName");
        dir.mkdirs();
        String filename = String.format("%d.jpg",System.currentTimeMillis());
        File outfile = new File(dir,filename);
        try{
            outputStream = new FileOutputStream(outfile);
            bitmap.compress(Bitmap.CompressFormat.JPEG,100,outputStream);
            outputStream.flush();
            outputStream.close();
        }catch(Exception e){
            Log.d("SavingError", "SaveImageToGallery: "+e.getMessage());
        }
        Toast.makeText(this, "Image saved in folderName folder", Toast.LENGTH_SHORT).show();
    }

原文由 Waseem Khan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题