2013-04-27 67 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