【问题标题】:Rename a file in the internal storage重命名内部存储中的文件
【发布时间】:2012-08-24 06:23:25
【问题描述】:

在应用程序的内部存储中重命名文件的最佳/最简单方法是什么?我觉得有点奇怪,有一个Context.deleteFile() 方法,但没有“移动”或“重命名”功能。我是否必须一直保存文件的内容,删除它,创建一个新文件,然后将内容复制到那个文件中?或者有没有办法在现有文件上复制文件?

更新(2012 年 8 月 30 日):

根据以下建议的解决方案,我无法开始工作:

  • 我有一个名为 shoppinglists.csv 的文件
  • 然后,我创建了一个名为 shoppinglists.tmp 的新文件,并将 shoppinglists.csv 中的内容和一些新条目复制到该文件中。 shoppinglist.tmp 文件就是 shoppinglists.csv 文件的新版本
  • 然后我删除旧的 shoppinglists.csv 文件
  • 然后我需要将 shoppinglists.tmp 文件重命名为 shoppinglists.csv

我试过了:

ctx.deleteFile("shoppinglists.csv");           <--- delete the old file
File oldfile = new File("shoppinglists.tmp");
File newfile = new File("shoppinglists.csv");
oldfile.renameTo(newfile);

但是,这不起作用。在 deleteFile() 之后,什么都没有发生,剩下的就是新的 shoppinglists.tmp 文件。

我错过了什么?

注意:LogCat 中没有错误或任何内容。

【问题讨论】:

标签: android android-context file-rename


【解决方案1】:
File file = new File("your old file/folder name");
File file2 = new File("your new file/folder name");
boolean success = file.renameTo(file2);

【讨论】:

    【解决方案2】:

    不要使用原始的File 构造函数,而是使用Context 提供的方法getFileStreamPath。也就是说,做:

    File oldfile = ctx.getFileStreamPath("shoppinglists.tmp");
    File newfile = ctx.getFileStreamPath("shoppinglists.csv");
    oldfile.renameTo(newfile);
    

    【讨论】:

    • 问题可能是new File("fred") 指的是相对于程序当前目录的名称,这可能不是,当然也不能保证是存储内部文件的目录。跨度>
    • 它不适用于内部存储文件
    【解决方案3】:

    我认为我们不能在内部存储环境中使用 File.renameTo() 方法。 在此环境中重命名文件,可以执行以下操作: - 将旧文件的内容复制到新文件。 - 删除旧文件。

    【讨论】:

      【解决方案4】:

      renameTO() 在我的环境中不起作用(Eclipse Indigo,带有 android 版本 2.3 的 AVD)。解决方案是全部跳过临时文件方法,因为它似乎无法在任何合理的时间范围内解决。

      【讨论】:

        【解决方案5】:

        您需要使用文件类的renameTo() 方法。

        File testFile = new File ( "test.txt" ); // Assuming it is in Internal Storage
        testFile.renameTo ( "newTest.txt" ); 
        

        【讨论】:

        • 我无法让它工作 - 请查看更新的问题描述(问题)。
        • 没人有什么想法吗?我在考虑权限问题,但这有点奇怪,因为应用程序既可以删除也可以创建新文件,也可以向它们添加数据。如果我找不到解决方案,我将不得不跳过临时文件,只使用 array[][] 作为临时存储,删除原始文件,创建一个新文件并将 array[][]内容。
        • 不,我不认为它的权限问题,我可能需要编码并亲自检查 remaneTo() 方法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-13
        • 2013-04-11
        • 2021-10-24
        相关资源
        最近更新 更多