【问题标题】:Editing existing file in Android在 Android 中编辑现有文件
【发布时间】:2013-04-27 02:38:20
【问题描述】:

我正在尝试编辑设备上的现有文件-首先-使用检索文件路径的选择器选择文件,如“mnt/sdcard/file.png”。然后我将它传递给阅读器以读取现有文件,然后通过移动每个字符的 Ascii 来修改它。然后再次覆盖它以替换旧的。

我已经在 PC 文件的桌面应用程序上测试了代码,它运行良好,但不能作为 Android 应用程序运行。它曾经在我的设备上运行过,但再次无法运行

关于我所做的:

1)在Mainafest文件中增加对External source Permission的写法 2)选择正确的文件并检索它的路径 3)读取文件内容真

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

4)修改文件字节 5)在原文件中写回(Overwrite)

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

6) 再次将文件设置为空 7)在onClickListner中调用finish()

提前致谢

【问题讨论】:

  • @FoamyGuy ..它没有抛出任何异常,但是文件没有被修改,虽然当我检查文件详细信息时,我发现修改日期升级到执行时间。
  • 为什么不在你的 catch 块中记录所有异常并在你的问题中发布 logcat?
  • 在制作文件输出流之前尝试关闭文件输入流。
  • @PradeepPati .. 我已经这样做了,没有发现任何异常
  • 看看我更新的答案

标签: java android file file-io


【解决方案1】:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));

但是,设备必须从 USB 断开。否则,您需要拔下并重新插入设备才能看到更改。

【讨论】:

  • 关闭输出流后。这是因为在 HC 和更高版本中实施的更改,通过 MTP 而不是大容量存储的文件访问。这意味着您的 MTP 应该知道某些更改以刷新数据。
  • 应该 ""file://" + Environment.getExternalStorageDirectory()" 等同于我的文件路径吗?我知道我们使用 "file://" + Environment.getExternalStorageDirectory()" 以防从 SDCard 获取文件..从根目录获取文件怎么样?
  • 这里我们需要了解的是,我们正在发送一个挂载外部媒体的广播,而您的文件不是媒体,是SD卡。 MTP 程序将接收此广播并刷新其缓存,可能与接收此广播的其他程序一起。
【解决方案2】:

经过大量工作,我得出了最终的解决方案:

1)使用Common-io库 http://commons.apache.org/proper/commons-io/download_io.cgi

2)只有在import common-io之后才写这个简单的行

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

用于覆盖文件的最后一个属性 (Fasle) .. 附加标志

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    相关资源
    最近更新 更多