我正在尝试使用File.renameTo()
将一些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!
答案 0 :(得分: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);
答案 1 :(得分:0)
在尝试重命名关联文件之前,您必须关闭FileInputStream
。一般情况下,你应该关闭这些资源。
此外,您应该检查目标目录是否确实存在。
如果您使用Java 7进行编程,则应尝试使用新的java.nio.file API。这提供了一种移动方法,可以抛出异常,告诉您更多有关原因的信息,而不仅仅是返回false
。