2016-09-18 83 views
2

我有下一個問題...我搜索的來源答案,但沒有找到一個很好的答案...在Android中保存文件:java.io.FileNotFoundException。打開失敗:ENOENT(沒有這樣的文件或目錄)

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 

代碼:

private static String saveFile(String filename, InputStream input) { 
    String path = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(path)) { 
     try { 
      byte[] attachment = new byte[input.available()]; 
      input.read(attachment); 
      File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + "/EmailClient/", filename); 
      if (!file.mkdirs()) 
       Log.d("EmailClient", "saveFile: Dir not created"); 
      FileOutputStream out = new FileOutputStream(file); //PROBLEM! 
      out.write(attachment); 
      input.close(); 
      out.close(); 
      return path; 
     } catch (IOException e) { 
      Log.e("EmailClient", "saveFile: File not saved", e);; 
     } 
    } 
    return path; 
} 

回答

1

使用此代碼

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

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

文件夾和文件被創建,但文件的大小= 0 mkdirs()和createNewFile()返回false ... – Dzmitry

+0

但根據例外情況,找不到錯誤文件 – LearnPainLess

+0

但byte [] attachment = [B @ 428943b8 – Dzmitry

0

我認爲你正試圖將文件保存在「DIRECTORY_DOWNLOADS」目錄,。所以你應該遵循下面的代碼。 下面的行給出了該目錄。

path = Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_DOWNLOADS); 

如果您想要在該路徑內創建特定文件夾「Email_Client」,請寫下此行。

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

你應該申報許可 「WRITE_EXTERNAL_STORAGE」

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

請參閱以下網址: https://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String)

+0

我試過這個。不要工作。我使用MVP模式,我不使用上下文。 – Dzmitry

相關問題