我希望能够重命名文件夹列表以删除不需要的字符(例如,点和双空格必须成为单个空格)。
单击Gui中的按钮后,您将看到一个消息框,其中显示格式正确的名称,表示格式化正确并且调用了该功能。 当我查看我创建的测试文件夹时,名称不会更改(甚至在刷新后也不会更改)。使用硬编码字符串也不起作用。
我在俯瞰什么?
public void cleanFormat() {
for (int i = 0; i < directories.size(); i++) {
File currentDirectory = directories.get(i);
for (File currentFile : currentDirectory.listFiles()) {
String formattedName = "";
formattedName = currentFile.getName().replace(".", " ");
formattedName = formattedName.replace(" ", " ");
currentFile.renameTo(new File(formattedName));
JOptionPane.showMessageDialog(null, formattedName);
}
}
}
答案 0 :(得分:7)
对于未来的浏览器:这是通过Assylias的评论修复的。您将在下面找到修复它的最终代码。
public void cleanFormat() {
for (int i = 0; i < directories.size(); i++) {
File currentDirectory = directories.get(i);
for (File currentFile : currentDirectory.listFiles()) {
String formattedName = "";
formattedName = currentFile.getName().replace(".", " ");
formattedName = formattedName.replace(" ", " ");
Path source = currentFile.toPath();
try {
Files.move(source, source.resolveSibling(formattedName));
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
答案 1 :(得分:0)
好吧,首先File.renameTo
试图在同一个文件系统上重命名文件。
以下内容来自java doc
Many aspects of the behavior of this method are inherently platform-dependent:
The rename operation might not be able to move a file from one filesystem to
another, it might not be atomic, and it might not succeed if a file with the
destination abstract pathname already exists.
答案 2 :(得分:0)
首先检查返回值,如果重命名成功,File.renameTo返回true;否则是假的。例如。您无法在Windows上将文件从c:重命名/移动到d:。 最重要的是,改为使用Java 7的java.nio.file.Files.move。
答案 3 :(得分:0)
对getName()的调用只返回文件名,而不返回任何目录信息。因此,您可能正在尝试将文件重命名为其他目录。
尝试将包含目录添加到您传递给重命名的文件对象
currentFile.renameTo(new File(currentDirectory, formattedName));
还有其他人说你应该检查renameTo的返回值,这可能是假的,或者使用Files类中的新方法,我发现这些方法可以提供非常有用的IOExceptions。