在Android中保存文件:java.io.FileNotFoundException。打开失败:enoint(没有这样的文件或目录)

在Android中保存文件:java.io.FileNotFoundException。打开失败:enoint(没有这样的文件或目录),java,android,Java,Android,我还有一个问题。。。我在源代码上搜索了答案,但没有找到好答案 java.io.FileNotFoundException: /mounted/EmailClient/side-corner.png: open failed: ENOENT (No such file or directory) at libcore.io.IoBridge.open(IoBridge.java:453) at java.io.FileOutputStream.<init>(FileOutputStre

我还有一个问题。。。我在源代码上搜索了答案,但没有找到好答案

java.io.FileNotFoundException: /mounted/EmailClient/side-corner.png: open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:453)
at java.io.FileOutputStream.<init>(FileOutputStream.
at java.io.FileOutputStream.<init>(FileOutputStream.java:73) etc
使用此代码

File folder = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/EmailClient/");

folder.mkdirs();
File file = new File(folder,filename);
file.createNewFile();

我想你是想把文件保存在“DIRECTORY\u DOWNLOADS”目录下,。因此,您应该遵循以下代码。 下一行给出了目录

   path = Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOWNLOADS);
如果您想在该路径内创建特定文件夹“Email\u Client”,请写这行

   File folder = new File(Environment.getExternalStoragePublicDirectory(
   Environment.DIRECTORY_DOWNLOADS)+"/Email_Client/");
您应该声明权限“写入外部存储”

请参考以下网址:

如果您正在构建目标版本API级别大于27的应用程序,则默认情况下将禁用存储访问。如果要快速启用它,请在
AndroidManifest.xml
文件中添加以下行

<manifest ... >
  <application 
       android:requestLegacyExternalStorage="true"   //add this line 
       ... >
    ...
  </application>
</manifest>

...

文件夹和文件已创建,但文件大小为0。mkdirs()和createNewFile()返回false…但根据异常,错误为未找到文件,但字节[]附件=[B@428943b8@PawneshwerGupta file.mkdirs()将创建目录,因此结果将是目录而不是您可以写入的文件。因此FileNotFoundException此解决方案不适用于Android 10(三星设备).您能详细说明需要注意的任何特定更改吗?我尝试了这个。不起作用。我使用MVP模式,不使用上下文。谢谢您,先生。这节省了我的时间。谢谢您Ganesan的宝贵意见
String fileName="myfile.txt";
            String input="Hello World";
            String path = Environment.getExternalStorageState();
            File file=null;
            if (Environment.MEDIA_MOUNTED.equals(path)) {
                try {
                    byte[] attachment = input.getBytes();

      File folder = new File(Environment.getExternalStoragePublicDirectory(
       Environment.DIRECTORY_DOWNLOADS)+"/Email_Client/");
       folder.mkdirs();


                         file=new File(folder,fileName);
          //Automatically creates the new empty file specified by the name,   if it is not exist.
                         file.createNewFile();
                        Log.i("EmailClient", "saveFile: Dir created");
                    FileOutputStream out = new FileOutputStream(file); 
                    out.write(attachment);

                    out.close();


                } catch (IOException e) {
                    Log.e("EmailClient", "saveFile: File not saved", e);;
                }
            }
<manifest ... >
  <application 
       android:requestLegacyExternalStorage="true"   //add this line 
       ... >
    ...
  </application>
</manifest>