2017-02-17 41 views
0

我使用的打印作家和FileOutputStream中使用下面的函數寫在android系統異步任務文件:文件大小不顯示正確的android系統

public static void saveFileToExternalMemoryAsync(Context context,String fileName, String json)throws Exception{ 
     File AppPath = new File(Environment.getExternalStorageDirectory() + "/PDMA/DMAPPOutputs/"); 
     if (!AppPath.exists()) { 
      AppPath.mkdirs(); 
     } 
     File outputFile = new File(AppPath.getAbsolutePath() + "/" + fileName + ".dmapp"); 
     if (!outputFile.exists()) 
      outputFile.createNewFile(); 

     MediaScannerConnection.scanFile(context, new String[] {AppPath.toString(),outputFile.toString()}, null, null); 
     FileOutputStream fileOutputStream = new FileOutputStream(outputFile, true); 
     PrintWriter pw = new PrintWriter(fileOutputStream); 
     try{ 
      pw.println(json); 
      pw.flush(); 
      pw.close(); 
      fileOutputStream.flush(); 
      fileOutputStream.close(); 
     }catch (Exception e){ 
      e.printStackTrace(); 
     }finally{ 
      pw.flush(); 
      pw.close(); 
      fileOutputStream.flush(); 
      fileOutputStream.close(); 

      MediaScannerConnection.scanFile(context, new String[] {AppPath.toString(),outputFile.toString()}, null, null); 
     } 


    } 

問題是,當我試圖通過連接移動到這個文件複製電腦在mtp,它沒有完全複製。如果我右鍵單擊以查看它的大小,則它小於實際值。現在,如果在Android中,我複製並粘貼此文件在其他地方,說下載文件夾,大小是正確的,文件也是完整的。

可能是什麼問題。

UPDATE:

如果我用FileOutputStream中由一個寫一個字節,則生成的文件,但我不得不關閉應用程序從PC訪問該文件。

+0

您只應在媒體掃描器寫入文件後調用媒體掃描器一次。 – greenapps

+0

'if(!outputFile.exists()) outputFile.createNewFile();'。刪除這些線。沒用的。該文件將由新的文件輸出流創建。 – greenapps

+0

'AppPath.mkdirs();'。檢查返回值! }' – greenapps

回答

0

事實證明,在我的情況下,通過在onPostExecute()解決問題的末尾添加this.cancel(true)。

+0

這應該在評論中。 – Noorul