【问题标题】:Java File object's renameTo method deletes my file instead of renaming it. Vistax64Java File 对象的 renameTo 方法删除我的文件而不是重命名它。威达仕64
【发布时间】:2011-09-06 01:50:46
【问题描述】:

试图获取一个 mp3 文件并使用字符串变量重命名它。例如,我有一个古典音乐文件夹 C:/classical,我想要一首名为 vivaldi 的歌曲重命名为 FourSeasons。我想找到初始文件 C:/classical/vivaldi.mp3 的绝对路径,然后提供一个字符串“FourSeasons.mp3”,并将文件 C:/classical/vivaldi.mp3 更改为 C:/classical /FourSeasons.mp3.

我曾想过使用 renameTo 和文件写入器,但这些都没有给我想要的结果。 RenameTo 代码:这将返回 false(重命名失败),并且往往会永久删除我的文件。

public static void main(String[] args) {
File mp3 = new File("C:/mp3.mp3");
boolean renamestatus = mp3.renameTo(new File("song.mp3"));
System.out.println(renamestatus);
}

我还尝试使用 FileReader 和 FileWriter 制作文件的精确副本,并使用新名称。此方法输出一个 mp3 文件,该文件会跳过并且听起来与输入文件相差甚远 这是我的 fileWriter 代码:

File inputFile = new File("C:/mp3.mp3");
File outputFile = new File("C:/song.mp3");
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1)
  out.write(c);
in.close();
out.close();

【问题讨论】:

  • 能否重现renameTo()删除文件的问题?您确定它不会将它移动到您不期望的地方吗?因为如果确实如此,那么这绝对是一个错误!
  • 它可以将它移动到系统文件夹或 $CLASSPATH 或 $PATH 上的某个位置,搜索它以确保它,因为 Joachim 说它不太可能被删除。
  • 为什么要将文件移动到“系统文件夹或 $CLASSPATH 或 $PATH 上的某个位置”?文件路径是相对于当前工作目录的。
  • @Joachim:如果 renameTo 返回 false,它甚至不应该将文件移动到意外的地方。
  • @jarnbjo:这也是真的。那么你能可靠地复制它吗?如果是这样,那么您可能应该将此报告为错误。

标签: java file mp3 rename filewriter


【解决方案1】:

它没有删除原始文件,它工作正常,只需给出完整路径(源文件路径+新名称)

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题,

    我使用新文件对象的绝对路径解决了它。

    所以在你的情况下:

    boolean renamestatus = mp3.renameTo(new File("song.mp3"));
    

    应该是

    boolean renamestatus = mp3.renameTo(new File("C://song.mp3"));
    

    其次,不使用绝对路径,您的文件不会被删除,而是会以新名称移动到项目的根文件夹中。

    【讨论】:

      【解决方案3】:

      使用 renameTo 时,您需要指定文件要转到的路径。例如,您使用的原始路径是“C:/mp3.mp3”,您希望 renameTo 中的路径看起来比如“C:/song.mp3”。所以你的线看起来像这样。

      boolean renamestatus = mp3.renameTo(new File("C:/song.mp3"));
      

      希望对你有帮助。

      【讨论】:

        【解决方案4】:

        试试这样:

        mp3.renameTo(new File("C:/song.mp3"));
        

        您还可以查看thisthis 的答案。

        【讨论】:

        • 它不应该改变任何主要问题。为什么调用 renameTo 方法并返回 false 时会删除原始文件?
        • @Colin 它不应该被删除,它可能只是移动到默认位置。在相对路径上创建文件也会在某处的 $PATH 上创建它。我将有时间在大约 30 分钟内对其进行测试。然而,至于返回 false,这很奇怪,但我认为需要更多信息才能找出它发生的原因。
        【解决方案5】:

        FileReaderFileWriter 仅用于处理文本数据

        您的 MP3 文件是二进制数据,应被视为二进制数据,因此您需要使用 FileInputStreamFileOutputStream 进行读取/写入。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-01-02
          • 1970-01-01
          • 2018-06-30
          • 2023-01-26
          • 2012-07-23
          • 2021-08-10
          • 2018-08-13
          • 2020-09-16
          相关资源
          最近更新 更多