0

我正在尝试使用 将一些 MP3 文件移动到不同的文件夹File.renameTo(),但是它一直无法正常工作,我不知道为什么。

你能告诉我我做错了什么吗?

File songsFolder = new File("songs");
File[] songsList = songsFolder.listFiles();

for (int i = 0; i < allSongs.size(); i++) {
    //allSongs is an ArrayList defined earlier
    File music = (File) songsList[i];
    FileInputStream fileMusic = new FileInputStream(music);
    int size = (int) music.length();
    fileMusic.skip(size - 128);
    byte[] last128 = new byte[128];
    fileMusic.read(last128);
    String id3 = new String(last128);
    String tag = id3.substring(0, 3);

    if (musicsList[i].isFile()) {
        File afile = songsList[i];
        if (afile.renameTo(new File("songs/" + id3.substring(33, 62).trim() + "/" + songsList[i].getName()))) {
            System.out.println("File moved successfully!");
        } else {
            System.out.println("File failed to move!");
        }
    }
}

输出是:

File failed to move!
File failed to move!
File failed to move!
File failed to move!
4

2 回答 2

1

目录是否"songs/" + id3.substring(33, 62).trim()已经存在?File.renameTo()不会为您创建目录。

尝试这样的事情:

File afile = songsList[i];
File newDir = new File("songs", id3.substring(33, 62).trim());
newDir.mkdirs();
File newName = new File(newDir, afile.getName());
afile.renameTo(newName);
于 2013-08-28T13:56:14.353 回答
0

FileInputStream在尝试重命名关联文件之前,您必须关闭s。完成后,您通常应该关闭此类资源。

此外,您应该检查目标目录是否真的存在。

如果您在 Java 7 下编程,您应该尝试新的 java.nio.file API。这提供了一个抛出异常的 move 方法,它会告诉您更多有关原因的信息,而不仅仅是返回false

于 2013-08-28T11:40:18.797 回答