gpt4 book ai didi

java - 无法访问 0 以外的索引

转载 作者:行者123 更新时间:2023-12-02 13:08:30 25 4
gpt4 key购买 nike

我正在尝试编写一个程序来快速重命名文件夹中的某些文件。

文件的命名如下:

C:\Users\user\Documents\Reports\Report 名字 姓氏文件扩展名

我想像这样重命名它们:

C:\Users\user\Documents\Reports\Report 姓氏 名字文件扩展名

这是我到目前为止的代码:

public class FileRenamer {

public static void main(String[] args) {

List<String> filePaths = new ArrayList<String>();

try(Stream<Path> paths = Files.walk(Paths.get(args[0]))) {
paths.forEach(filePath -> {
filePaths.add(filePath.toString());
});
} catch (IOException e) {
e.printStackTrace();
}

filePaths.forEach(filePath -> {

String[] splitPath = filePath.split(" ");
String fileNameExtension = splitPath[2].split(".")[1];
splitPath[2] = splitPath[2].split(".")[0];

String newFilePath = splitPath[0] + " " + splitPath[2] + " " +
splitPath[1] + "." + fileNameExtension;

new File(filePath).renameTo(new File(newFilePath));

});

}

}

我的问题是它不断抛出 splitPath 数组的 ArrayIndexOutOfBoundsException 。但是当我运行 for 循环来输出从 0 到 2 的索引时,它不会抛出异常。我做错了什么?

编辑:这是工作 for 循环

for(int i = 0; i < splitPath.length; i++) {
System.out.println(i + ": " + splitPath[i]);
}

它将其输出到控制台:

0: C:\Users\user\Documents\Reports\Report
1: FirstName
2: LastName.FileNameExtension

最佳答案

Files.walk() 不仅打印目录中的常规文件,还打印目录本身和任何隐藏文件。这些可能不适合您的模式。

Files.walk(Paths.get("/home/joost"), 1).forEach(p -> System.out.println(p.toString()));

/home/joost
/home/joost/someRegularFile.jpg
/home/joost/.profile
...

此外,Path::toString() 给出完整路径,而不仅仅是文件名。因此,如果路径中的任何目录中有空格,您将得到意想不到的结果。

关于java - 无法访问 0 以外的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44045140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com