2013-08-28 48 views
0

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

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

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! 

回答

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); 
+0

该目录已存在。 但用这种方法它工作得很好。多谢,伙计 :) – undisp

0

你必须尝试重命名相关文件之前关闭FileInputStream秒。一般情况下,你应该关闭这些资源。

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

如果您在Java 7下进行编程,您应该尝试新的java.nio.file API。这提供了一种抛出异常的移动方法,告诉你更多的原因,而不是仅仅返回false

+0

好了,我之前,首先关闭的FileInputStream如果,但仍不能移动任何文件。 – undisp

+0

我扩展了答案。 – Holger

+0

我读了关于该API,它似乎很有趣,但我不知道如何使用它。我甚至不知道是否必须先安装某些东西。是的,它有点不好意思,但我只是一个有抱负的程序员。不过,我设法让我的代码工作。但是,谢谢你的建议。 – undisp

相关问题