【问题标题】:Removing Parts of File names in Folder删除文件夹中的部分文件名
【发布时间】:2017-12-23 18:27:49
【问题描述】:

以下代码有效,但我的问题是控制台输出显示正确,例如:

3-M-ALABAMA-SUIQUARTER2
3-M-ALABAMA-SUIQUARTER2
3-M-ALABAMAW-22017
3-M-ALABAMAW-22017

上面的输出显示我的索引是 -2017 但是当文件夹中的实际文件名被更改时,一些文件名被跳过。例如

原始文件名:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140
控制台输出:3-M-ALABAMA-SUIQUARTER2
文件夹中部分文件未更改:3-M-ALABAMA-SUIQUARTER2-2017200346-CD6140

但是文件夹中的一些文件有3-M-BATTLECREEKMIW-22017-2017200346-CD619B,一些是3-M-ARLINGTONOHLOCALW-2-2017200346-CD61A8

所以我认为java对于在文件更改中进行实际更改时在哪里切断感到困惑?你能帮助我吗?

for(File file:filesInDir) {
       x++;
       String name = file.getName().substring(0, file.getName().indexOf("-2017"));
       String newName = name;
       System.out.println(newName); // prints prints to file 
       String newPath = absolutePathOne + "\\" + newName;
       file.renameTo(new File(newPath));
}

【问题讨论】:

  • 我什至使用了子字符串方法 String name = file.getName().substring(0,20);而且它仍然做同样的事情并不是文件夹中的所有文件名都被更改
  • 有没有办法克服这个问题?在这种情况下,子字符串和索引对我不起作用,
  • 您想要实现的是从原始文件名中删除 -2017xxxx- 模式?
  • 实际上我正在尝试从 -2017 中删除所有内容并返回是
  • file.renameTo 不能保证有效。如果失败,则返回布尔值 false。

标签: java file stringbuffer substring


【解决方案1】:

Okay there any other way to rename the files?

是的。使用较新的 NIO 2 类,尤其是 Files.move() 方法。

至少,将file.renameTo(new File(newPath)) 替换为:

Files.move(file.toPath(), Paths.get(newPath));

如果移动失败,这将抛出描述性异常,而不是来自 renameTo()false 布尔返回值。

您还应该更改其余代码以使用较新的类。虽然不是必需的,但建议这样做。

【讨论】:

  • 那个 File.move 是 guava 的吗?
  • @assembler 单击链接。它是内置的 Java 7+。
  • 好吧,我换行了,我在 eclipse 的 (move) 下得到了一条红线
  • @JonathanHofler 哎呀。 Files,不是File
  • 我进行了更改,但现在我得到了:由于某种原因,我在线程“main”java.nio.file.FileAlreadyExistsException 中遇到异常:C:\Users\hoflerj\Desktop\After\3- M-ALABAMA-SUIQUARTER2
猜你喜欢
  • 2015-08-24
  • 2017-04-08
  • 2017-01-13
  • 1970-01-01
  • 2017-09-16
  • 1970-01-01
  • 2014-09-27
  • 1970-01-01
相关资源
最近更新 更多