Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 试图将图像保存到目录,保存到未知位置_Java_Android - Fatal编程技术网

Java 试图将图像保存到目录,保存到未知位置

Java 试图将图像保存到目录,保存到未知位置,java,android,Java,Android,我正试图为我的论文创建一个面部/情绪检测应用程序,但遇到了阻碍我进步的障碍,我无法找出它阻止图像保存到手机目录的原因。它似乎是保存到SD卡,但我不使用SD卡在我的手机/模拟DCIM file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)+ "/" + UUID.randomUUID(), toString()+ ".jpg"); ImageReade

我正试图为我的论文创建一个面部/情绪检测应用程序,但遇到了阻碍我进步的障碍,我无法找出它阻止图像保存到手机目录的原因。它似乎是保存到SD卡,但我不使用SD卡在我的手机/模拟DCIM

file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)+ "/" + UUID.randomUUID(), toString()+ ".jpg");
            ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
                @Override
                public void onImageAvailable(ImageReader imageReader) {
                    Image image = null;
                    try {
                    image = reader.acquireLatestImage();
                        ByteBuffer buffer = image.getPlanes() [0].getBuffer();
                        byte[] bytes = new byte[buffer.capacity()];
                        buffer.get(bytes);
                        save(bytes);
                    } catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                    finally {
                        {
                            if (image != null)
                                image.close();
                        }
                    }
                }
这是我必须创建文件并保存到该位置的代码,我尝试过其他解决方案,但它们会抛出错误

File folder = new File(Environment.getExternalStorageDirectory() + "/CustomFolder");
            File file;
            if (!folder.exists()) {
                boolean success = folder.mkdir();
                if (success){
                    file = new File(folder.getPath() + "/" + UUID.randomUUID(), toString()+ ".jpg");
                }else {
                    Toast.makeText(FacialDetection.this, "Failed to save file to folder", Toast.LENGTH_SHORT).show();
                }
            }else{
                file = new File(folder.getPath() + "/" + UUID.randomUUID(), toString()+ ".jpg");
            }

            ImageReader.OnImageAvailableListener readerListener = new ImageReader.OnImageAvailableListener() {
                @Override
                public void onImageAvailable(ImageReader imageReader) {
                    Image image = null;
                    try {
                    image = reader.acquireLatestImage();
                        ByteBuffer buffer = image.getPlanes() [0].getBuffer();
                        byte[] bytes = new byte[buffer.capacity()];
                        buffer.get(bytes);
                        save(bytes);
                    } catch (IOException e)
                    {
                        e.printStackTrace();
                    }
                    finally {
                        {
                            if (image != null)
                                image.close();
                        }
                    }
                }

                private void save(byte[] bytes) throws IOException {

                    OutputStream outputStream = null;
                    try {
                        outputStream = new FileOutputStream(***file***);
                        outputStream.write(bytes);
                    }finally {
                        if (outputStream != null)
                            outputStream.close();
                    }
                }
            };

            reader.setOnImageAvailableListener(readerListener, mBackgroundHandler);
            final CameraCaptureSession.CaptureCallback captureListener = new CameraCaptureSession.CaptureCallback() {
                @Override
                public void onCaptureCompleted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, @NonNull TotalCaptureResult result) {
                    super.onCaptureCompleted(session, request, result);
                    Toast.makeText(FacialDetection.this, "Saved " + ***file***, Toast.LENGTH_SHORT).show();
                    createCameraPreview();
                }
            };
更新后的代码,粗体和斜体是引发错误的原因

您正在调用: Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u DCIM)


我推测.getExternalStoragePublicDirectory()表示获取SD卡上的目录。是否有一个内部。。。方法?

我建议您通过以下方式创建自己的自定义文件夹位置:

File folder = new File(Environment.getExternalStorageDirectory() + "/CustomFolder");
        File file;
        if (!folder.exists()) {
            boolean success = folder.mkdir();
            if (success){
                file = new File(folder.getPath() + "/" + UUID.randomUUID(), toString()+ ".jpg");
            }else {
                //Some message
            }
        }else {
            file = new File(folder.getPath() + "/" + UUID.randomUUID(), toString()+ ".jpg");
        }
//The rest of your code...

我已经更新了代码,并且出现了错误。我相信我把它加错了。两个带******的“文件”变量用红色突出显示。。它想让我把它改成finalfile,这使得所有其他文件变量都想被删除,你需要把它变成final,因为你是从一个内部类中访问它的。并将Toast更改为
…file.getPath().toString()
对不起,我很难理解Toast更改的代码行是什么?当我移除toast并添加它时,它会是什么样子?现在它会高亮显示所有黄色,类似于下面的
toast.makeText(FacialDetection.this,“Saved”+file.getPath().toString(),toast.LENGTH_SHORT).show()我将如何用当前的代码实现这一点?
//Create folder !exist
String folderPath = Environment.getExternalStorageDirectory() +"/myFoldername";
File folder = new File(folderPath);
if (!folder.exists()) {
    File wallpaperDirectory = new File(folderPath);
    wallpaperDirectory.mkdirs();
}
//create a new file
newFile = new File(folderPath, newPhoto.getName());

if (newFile != null) {
    // save image here
    Uri relativePath = Uri.fromFile(newFile);
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, relativePath);
    startActivityForResult(intent, CAMERA_REQUEST);
}