2013-04-27 74 views
0

我想通過首先選擇文件使用選擇器檢索文件的路徑,如「mnt/sdcard/file.png」來編輯設備上的現有文件。然後,我將它傳遞給讀者讀取現有文件,然後通過移動每個字符的Ascii來修改它。然後再次覆蓋它以替換舊的。在Android中編輯現有文件

我已經在PC文件上測試了桌面應用程序上的代碼,它工作完美,但不能用作Android應用程序。它的工作我的設備上一次,但沒有再工作

我所做的:

1)外部源權限添加寫在Mainafest文件 2)選擇文件的權利和檢索路徑 3)閱讀原始文件的文件內容真實

 File file = f; 
     FileInputStream fin; 
     fin = new FileInputStream(file); 
     byte fileContent[] = new byte[(int)file.length()]; 
     fin.read(fileContent); 

4)修改文件的字節 5)回寫(覆蓋)

 FileOutputStream fos = new FileOutputStream(f.getAbsolutePath()); 
     fos.write(enc_msg); 
     fos.write((byte)seed); 
     fin.close(); 
     fos.close(); 

6)設置文件爲空再次 7)調用完成()在onClickListner

由於提前

+0

@FoamyGuy。它不會引發任何異常,但文件不會被修改雖然當我檢查文件詳細信息時,我發現修改日期已升級到執行時間。 – 2013-04-27 02:47:34

+1

爲什麼你不記錄你的catch塊中的所有異常並在你的querstion中發佈logcat? – 2013-04-27 02:48:44

+0

在創建文件輸出流之前,請先關閉文件輸入流。 – FoamyGuy 2013-04-27 02:49:42

回答

0

大量的工作後,我已經達到了最終的解決方案:

1)使用公用-IO庫 http://commons.apache.org/proper/commons-io/download_io.cgi

2)寫這個簡單的行僅導入後共同-io的

FileUtils.writeByteArrayToFile(new File(file.getAbsolutePath()), myByteArray, false); 

用於覆蓋該文件的最後一個屬性(FASLE)..附加標誌

1
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 

但是,該設備必須從USB斷開。否則,您需要拔下並重新插入設備以查看更改。

+0

把這段代碼放在哪裏?它有什麼作用? – 2013-04-27 03:08:00

+1

關閉輸出流後。這是因爲在HC和更高版本中實施的變更,通過MTP而不是大容量存儲的文件訪問。這意味着您的MTP應該知道更改某些內容以刷新數據。 – 2013-04-27 03:55:25

+0

應該「」file://「+ Environment.getExternalStorageDirectory()」是否等價於我的文件路徑?我知道我們使用「file://」+ Environment.getExternalStorageDirectory()「從SDCard獲取文件的情況下。從根節點獲得什麼? – 2013-04-27 03:59:43