diff --git a/src/main/java/com/zhangmeng/tools/controller/BatchUpdateFileNameController.java b/src/main/java/com/zhangmeng/tools/controller/BatchUpdateFileNameController.java new file mode 100644 index 0000000..1f20794 --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/controller/BatchUpdateFileNameController.java @@ -0,0 +1,150 @@ +package com.zhangmeng.tools.controller; + +import com.zhangmeng.tools.utils.AlertUtils; +import javafx.beans.value.ChangeListener; +import javafx.beans.value.ObservableValue; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import lombok.extern.slf4j.Slf4j; + +import java.io.File; +import java.io.IOException; +import java.nio.file.*; +import java.nio.file.attribute.BasicFileAttributes; +import java.util.concurrent.atomic.AtomicInteger; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-04-27 10:24 + */ +@Slf4j +public class BatchUpdateFileNameController { + + @FXML + public TextField dir; + + @FXML + public TextArea result_show; + + @FXML + public Button replace_button; + + @FXML + public TextField replace_str; + + @FXML + public TextField replace_after; + + @FXML + public void initialize() { + + dir.textProperty().addListener((observable, oldValue, newValue) -> { + if (newValue != null) { + getFileInfos(newValue); + } + }); + + replace_button.setOnAction(event -> { + if (dir.getText().length() == 0) { + AlertUtils.alert_warning("请选择替换的文件夹"); + return; + } + if (replace_str.getText().length() == 0) { + AlertUtils.alert_warning("请输入替换的文字"); + return; + } + + if (replace_after.getText().length() == 0) { + replace_after.setText(""); + } + getFileInfos(dir.getText(), replace_str.getText(), replace_after.getText()); + }); + } + + public void getFileInfos(String path_name) { + Path path = Paths.get(path_name); + AtomicInteger dirCount = new AtomicInteger(); + AtomicInteger fileCount = new AtomicInteger(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(System.lineSeparator()); + try { + Files.walkFileTree(path, new SimpleFileVisitor() { + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + stringBuilder.append(dir); + stringBuilder.append(System.lineSeparator()); + dirCount.incrementAndGet(); + return super.preVisitDirectory(dir, attrs); + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + stringBuilder.append(file); + stringBuilder.append(System.lineSeparator()); + fileCount.incrementAndGet(); + return super.visitFile(file, attrs); + } + }); + } catch (IOException e) { + e.printStackTrace(); + } + stringBuilder.append("文件夹数:").append(dirCount); + stringBuilder.append(System.lineSeparator()); + stringBuilder.append("文件数:").append(fileCount); + stringBuilder.append(System.lineSeparator()); + result_show.setText(stringBuilder.toString()); + } + + public void getFileInfos(String path_name, String replace, String replace_after) { + Path path = Paths.get(path_name); + AtomicInteger dirCount = new AtomicInteger(); + AtomicInteger fileCount = new AtomicInteger(); + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(System.lineSeparator()); + try { + Files.walkFileTree(path, new SimpleFileVisitor() { + @Override + public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException { + dir.toString().replace(replace, replace_after); + stringBuilder.append(dir); + stringBuilder.append(System.lineSeparator()); + dirCount.incrementAndGet(); + return super.preVisitDirectory(dir, attrs); + } + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { + String name = file.toString().replace(replace,replace_after); + copy_del_file(file,Paths.get(name)); + stringBuilder.append(name); + stringBuilder.append(System.lineSeparator()); + fileCount.incrementAndGet(); + return super.visitFile(file, attrs); + } + }); + } catch (IOException e) { + e.printStackTrace(); + } + stringBuilder.append("文件夹数:").append(dirCount); + stringBuilder.append(System.lineSeparator()); + stringBuilder.append("文件数:").append(fileCount); + stringBuilder.append(System.lineSeparator()); + result_show.setText(stringBuilder.toString()); + } + + + public void copy_del_file(Path source,Path target){ + try { + if (!Files.exists(target)){ + Files.createFile(target); + } + Files.copy(source, target,StandardCopyOption.REPLACE_EXISTING);//如果文件存在则覆盖 + Files.delete(source);//拷贝完删除源文件 + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/zhangmeng/tools/controller/HomeController.java b/src/main/java/com/zhangmeng/tools/controller/HomeController.java index 2da2282..848d329 100644 --- a/src/main/java/com/zhangmeng/tools/controller/HomeController.java +++ b/src/main/java/com/zhangmeng/tools/controller/HomeController.java @@ -542,4 +542,8 @@ public class HomeController implements Serializable { } jks_file(flag); } + + public void batch_update_file_name_menu_item(ActionEvent event) { + load_small_tools(14); + } } \ No newline at end of file diff --git a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java index 7edc153..95525cd 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java @@ -81,6 +81,7 @@ public class SmallToolsController { private AnchorPane word_ocr; private AnchorPane bar_code; private AnchorPane pdf_ocr; + private AnchorPane batch_update_file_name; @FXML private ListView listView; @@ -416,6 +417,7 @@ public class SmallToolsController { case Word_ocr -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); case Bar_Code -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); case Pdf_Ocr -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); + case BatchUpdateFileName -> new Image(ImagePath.path(ImagePath.ImagePathType.Qr_CODE)); }; } @@ -686,6 +688,16 @@ public class SmallToolsController { common_method(); } + @FXML + public void batch_update_file_name_menu_item(){ + boolean flag = false; + if (batch_update_file_name != null){ + flag = true; + } + + batch_update_file_name(flag); + } + public void pdf_ocr(boolean flag) { //默认选择第一个 listView.getSelectionModel().select(13); @@ -703,6 +715,25 @@ public class SmallToolsController { common_method(); } + //batch_update_file_name + @FXML + public void batch_update_file_name(boolean flag) { + //默认选择第一个 + listView.getSelectionModel().select(14); + + if (!flag) { + try { + root = FXMLLoader.load(ResourcesUtils.getResource("batch_update_file_name")); + } catch (IOException e) { + e.printStackTrace(); + } + batch_update_file_name = root; + } else { + root = batch_update_file_name; + } + common_method(); + } + private void common_method() { splitPane.getItems().remove(1); @@ -820,11 +851,11 @@ public class SmallToolsController { ListView listView = (ListView) fx.lookup("#listView"); listView.getSelectionModel().select(index); } - + @FXML public void socket_server_menu_item(ActionEvent event) { load_server_tools(3); } - + @FXML public void telephone_menu_item(ActionEvent event) { boolean flag = false; if (telephone != null){ @@ -832,12 +863,12 @@ public class SmallToolsController { } telephone(flag); } - + @FXML public void mybatis_plus_gen_menu_item(ActionEvent event) { load_mysql_tools(1); } - + @FXML public void JsonView_menu_item(ActionEvent event) { boolean flag =false; if (json_view != null){ @@ -845,7 +876,7 @@ public class SmallToolsController { } json_view(flag); } - + @FXML public void maven_jar_install_menu_item(ActionEvent event) { boolean flag =false; if (maven_install_jar != null){ @@ -854,5 +885,29 @@ public class SmallToolsController { maven_install_jar(flag); } + @FXML + public void word_ocr_menu_item(ActionEvent event) { + boolean flag =false; + if (word_ocr != null){ + flag = true; + } + word_ocr(flag); + } + @FXML + public void bar_code_menu_item(ActionEvent event) { + boolean flag =false; + if (bar_code != null){ + flag = true; + } + bar_code(flag); + } + @FXML + public void pdf_menu_item(ActionEvent event) { + boolean flag =false; + if (pdf_ocr != null){ + flag = true; + } + pdf_ocr(flag); + } } diff --git a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java index fd6d11f..8b3b97f 100644 --- a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java +++ b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java @@ -128,6 +128,7 @@ public class ResourcesUtils { Word_ocr("文字识别ocr",11), Bar_Code("条形码识别",12), Pdf_Ocr("pdf识别",13), + BatchUpdateFileName("批量修改文件名",14), ; SmallTools(String title, int index) { diff --git a/src/main/resources/fxml/batch_update_file_name.fxml b/src/main/resources/fxml/batch_update_file_name.fxml new file mode 100644 index 0000000..76531e6 --- /dev/null +++ b/src/main/resources/fxml/batch_update_file_name.fxml @@ -0,0 +1,22 @@ + + + + + + + + + + + +