原因:

  因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能。
  因为老师发的课件中,文件夹太多,想把docx都放在同一个文件夹下面,一个一个找出来太麻烦,所以做了第二个功能。

      最近刚刚学了Java文件和流的知识,所以正好练练手,这也是自己的第一个exe程序,分享一下哈。

  (导出jar文件,以及用工具exe4j生成exe文件,这部分省略了哈)

用到的知识:

  用到Java中文件,流的知识,以及简单的GUI知识。

功能:

   功能一去除文件名字的某些关键字,也可以设置代替字。

   功能二:提取一个路径下面所有特定类型的文件,然后放在一个新的文件夹下面,如果有重复的文件,则自动排序在后面加数字来区分。

先看下启动后的界面和生成的exe文件:

第一个功能演示:

  没有操作前的:

  操作后:把前面部分相同关键字全部去掉了

  还有撤回功能:

第二个功能演示:

  没有操作前:

  操作后:

  当然,也有撤回功能

源代码分析:

启动类:

  1. package guuze;
  2.  
  3. public class Test {
  4.  
  5. public static void main(String[] args) {
  6. //启动GUI,即用户界面
  7. new ShowGui();
  8. }
  9. }

 显示GUI类:

  1. package guuze;
  2.  
  3. import java.awt.Dimension;
  4. import java.awt.FlowLayout;
  5. import java.awt.Font;
  6. import java.awt.Image;
  7. import java.awt.Toolkit;
  8. import java.awt.event.MouseAdapter;
  9. import java.awt.event.MouseEvent;
  10. import java.awt.event.WindowAdapter;
  11. import java.awt.event.WindowEvent;
  12. import java.io.File;
  13. import javax.swing.JButton;
  14. import javax.swing.JFrame;
  15. import javax.swing.JTextField;
  16.  
  17. public class ShowGui {
  18. private JFrame f;
  19. private JButton b1;
  20. private JButton b2;
  21. private JButton b3;
  22. private JTextField tf1;
  23. private JTextField tf2;
  24. private JTextField tf3;
  25.  
  26. private JButton b4;
  27. private JButton b5;
  28. private JButton b6;
  29. private JTextField tf4;
  30. private JTextField tf5;
  31. private JTextField tf6;
  32.  
  33. private static String s1;
  34.  
  35. public ShowGui() {
  36. // 直接调用
  37. startGui();
  38. }
  39.  
  40. public void startGui() {
  41. f = new BgSet();// 用来设置背景图片
  42. f.setLayout(new FlowLayout());
  43. Image icon = Toolkit.getDefaultToolkit().getImage("image/4.jpg");// 设置左上角logo图标
  44. f.setIconImage(icon);
  45. // 6个按钮
  46. b1 = new JButton("开始");
  47. b2 = new JButton("撤回");
  48. b3 = new JButton("退出");
  49. b4 = new JButton("一键提取");
  50. b5 = new JButton("撤回");
  51. b6 = new JButton("退出");
  52. // 6个按钮的大小
  53. b1.setPreferredSize(new Dimension(89, 39));
  54. b2.setPreferredSize(new Dimension(89, 39));
  55. b3.setPreferredSize(new Dimension(89, 39));
  56.  
  57. b4.setPreferredSize(new Dimension(89, 39));
  58. b5.setPreferredSize(new Dimension(89, 39));
  59. b6.setPreferredSize(new Dimension(89, 39));
  60. // 6个 文本框的大小以及输入字体的属性
  61. tf1 = new JTextField("Please input absolute_path", 40);
  62. tf1.setFont(new Font("宋体", Font.PLAIN, 25));
  63. tf1.setBounds(200, 15, 550, 126);
  64.  
  65. tf2 = new JTextField("Please input keyWords", 40);
  66. tf2.setFont(new Font("宋体", Font.PLAIN, 25));
  67. tf2.setBounds(200, 15, 550, 126);
  68.  
  69. tf3 = new JTextField("Please input replaceWords", 40);
  70. tf3.setFont(new Font("宋体", Font.PLAIN, 25));
  71. tf3.setBounds(200, 15, 550, 126);
  72.  
  73. tf4 = new JTextField("Please input absolute_path", 40);
  74. tf4.setFont(new Font("宋体", Font.PLAIN, 25));
  75. tf4.setBounds(200, 15, 550, 126);
  76.  
  77. tf5 = new JTextField("Please input target_path", 40);
  78. tf5.setFont(new Font("宋体", Font.PLAIN, 25));
  79. tf5.setBounds(200, 15, 550, 126);
  80.  
  81. tf6 = new JTextField("Please input filetype", 40);
  82. tf6.setFont(new Font("宋体", Font.PLAIN, 25));
  83. tf6.setBounds(200, 15, 550, 126);
  84. // 把按钮和文本框添加上
  85. f.add(tf1);
  86. f.add(tf2);
  87. f.add(tf3);
  88. f.add(b1);
  89. f.add(b2);
  90. f.add(b3);
  91.  
  92. f.add(tf4);
  93. f.add(tf5);
  94. f.add(tf6);
  95. f.add(b4);
  96. f.add(b5);
  97. f.add(b6);
  98. // 调用事件监听函数
  99. myEvent();
  100. f.setVisible(true);
  101. }
  102.  
  103. private void myEvent() {
  104. // 点击右上角×退出
  105. f.addWindowListener(new WindowAdapter() {
  106. public void windowClosing(WindowEvent e) {
  107. System.exit(0);
  108. }
  109. });
  110. // 点击第一个按钮的响应事件
  111. b1.addMouseListener(new MouseAdapter() {
  112. public void mouseClicked(MouseEvent e) {
  113. s1 = tf1.getText();
  114. // 对文本框内值进行判断,如果什么也没写,当做空处理,以下的类似
  115. if (s1.equals("Please input path")) {
  116. s1 = "";
  117. }
  118. File file = new File(s1);
  119. String test[];
  120. test = file.list();
  121. RenameFunction.test1 = test;
  122. String s2 = tf2.getText();
  123. if (s2.equals("Please input replaceWords")) {
  124. s2 = "";
  125. }
  126. String s3 = tf3.getText();
  127. if (s3.equals("Please input replaceWords")) {
  128. s3 = "";
  129. }
  130. try {
  131. // 启动重命名函数
  132. RenameFunction.sure(s1, s2, s3);
  133. } catch (Exception e1) {
  134. }
  135. }
  136. });
  137. // 点击第二个按钮的响应事件
  138. b2.addMouseListener(new MouseAdapter() {
  139. public void mouseClicked(MouseEvent e) {
  140. try {
  141. try {
  142. if (!s1.equals("Please input path")) {
  143. // 启动撤回
  144. RevokeRename.revoke(s1);
  145. }
  146. } catch (Exception e2) {
  147. }
  148. } catch (Exception e1) {
  149. }
  150. }
  151. });
  152. // 点击第三个按钮的响应事件
  153. b3.addMouseListener(new MouseAdapter() {
  154. public void mouseClicked(MouseEvent e) {
  155. System.exit(0); // 退出
  156. }
  157. });
  158. // 点击第四个按钮的响应事件
  159. b4.addMouseListener(new MouseAdapter() {
  160. public void mouseClicked(MouseEvent e) {
  161.  
  162. String s2 = tf4.getText();
  163. String s3 = tf5.getText();
  164. String s4 = tf6.getText();
  165.  
  166. if (s2.equals("Please input absolute_path")) {
  167. s2 = "";
  168. }
  169. if (s3.equals("Please input target_path")) {
  170. s3 = "";
  171. }
  172. if (s4.equals("Please input filetype")) {
  173. s4 = "";
  174. }
  175. // 启动文件搜索函数
  176. SearchFileFunction.startCopy(s2, s3, s4);
  177. }
  178. });
  179. // 点击第五个按钮的响应事件
  180. b5.addMouseListener(new MouseAdapter() {
  181. public void mouseClicked(MouseEvent e) {
  182. String s2 = tf5.getText();
  183. // 启动撤回函数
  184. RemoveTargetFile.startDelete(s2);
  185. }
  186. });
  187. // 点击第六个按钮的响应事件
  188. b6.addMouseListener(new MouseAdapter() {
  189. public void mouseClicked(MouseEvent e) {
  190. System.exit(0); // 退出
  191. }
  192. });
  193. }
  194. }

 GUI背景图片设置类:

  1. package guuze;
  2.  
  3. import javax.swing.ImageIcon;
  4. import javax.swing.JFrame;
  5. import javax.swing.JLabel;
  6. import javax.swing.JPanel;
  7.  
  8. public class BgSet extends JFrame {
  9. private static final long serialVersionUID = 1L;
  10.  
  11. public BgSet() {
  12. // 设置标题
  13. super("GreatFish");
  14. setBounds(100, 100, 600, 600);
  15. // 背景图片的路径。
  16. String path = "image/3.jpg";
  17. ImageIcon background = new ImageIcon(path);
  18. JLabel label = new JLabel(background);
  19. label.setBounds(0, 0, this.getWidth(), this.getHeight());
  20. JPanel imagePanel = (JPanel) this.getContentPane();
  21. imagePanel.setOpaque(false);
  22. this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
  23. }
  24. }

 文件重命名类:

  1. package guuze;
  2.  
  3. import java.io.File;
  4. import java.util.Scanner;
  5.  
  6. public class RenameFunction {
  7. static Scanner input = new Scanner(System.in);
  8. public static String test1[];
  9.  
  10. public static void sure(String s1, String s2, String s3) throws Exception {
  11. File file = new File(s1);
  12. String test[];
  13. test = file.list();
  14. // 遍历文件的名字
  15. for (int i = 0; i < test.length; i++) {
  16. // 判断是不是有你想去除的关键字
  17. if (test[i].indexOf(s2) != -1) {
  18. // 保存重命名后的文件名
  19. test[i] = test[i].replace(s2, s3);
  20. }
  21. }
  22.  
  23. File[] files = file.listFiles();
  24. for (int i = 0; i < test.length;) {
  25. for (File f : files) {
  26. if (f.isFile()) {
  27. // 循环赋重命名后的名字
  28. f.renameTo(new File(s1 + "/" + test[i++]));
  29. }
  30. }
  31. }
  32. }
  33. }

文件重命名撤回函数类:

  1. package guuze;
  2.  
  3. import java.io.File;
  4.  
  5. public class RevokeRename {
  6. public static void revoke(String s1) throws Exception {
  7. // 重新赋回原来的名字
  8. File file = new File(s1);
  9. File[] files = file.listFiles();
  10. for (int i = 0; i < RenameFunction.test1.length;) {
  11. for (File f : files) {
  12. if (f.isFile()) {
  13. // 注意是test1
  14. f.renameTo(new File(s1 + "/" + RenameFunction.test1[i++]));
  15. }
  16. }
  17. }
  18. }
  19. }

文件复制类:

  1. package guuze;
  2.  
  3. import java.io.BufferedInputStream;
  4. import java.io.BufferedOutputStream;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9.  
  10. public class SearchFileFunction {
  11. static int count = 1;
  12.  
  13. public static void startCopy(String source_path, String target_path,
  14. String file_Type) {
  15. // 启动循环函数
  16. xunHuan(source_path, target_path, file_Type);
  17. }
  18.  
  19. public static void xunHuan(String source_path, String target_path,
  20. String file_Type) {
  21. File file = new File(source_path);
  22. String names[] = file.list();
  23. // 判断是不是文件以及是否以你想要的文件类型结尾
  24. if (file.isFile() && file.getAbsolutePath().endsWith(file_Type)) {
  25. String new_path = target_path + "/" + file.getName();
  26. File file1 = new File(new_path);
  27. if (!file1.exists()) {
  28. try {
  29. file1.createNewFile();
  30. } catch (IOException e) {
  31. }
  32. } else {
  33. // 如果文件名字相同,在点前面加数字进行区分
  34. // 注意用\\.进行分隔,而不是.
  35. String[] arr = new_path.split("\\.");
  36. String new_path1 = arr[0] + count + "." + arr[1];
  37. file1.renameTo(new File(new_path1));
  38. }
  39. // 是文件,所以开始复制文件
  40. fileCopyByBufferStreamArray(file.getAbsolutePath(), new_path);
  41. }
  42.  
  43. else if (file.isFile() && !file.getAbsolutePath().endsWith(file_Type)) {
  44. // 注意这个方法体中什么都不写,就是不做处理
  45. } else {
  46. for (int i = 0; i < names.length; i++) {
  47. // 不是文件,进行迭代
  48. xunHuan(file.getAbsolutePath() + "/" + names[i], target_path,
  49. file_Type);
  50. }
  51. }
  52. }
  53.  
  54. public static void fileCopyByBufferStreamArray(String srcFile,
  55. String targetFile) {
  56. // 用流的知识进行写文件
  57. File file = new File(srcFile);
  58. File file1 = new File(targetFile);
  59. FileInputStream fis = null;
  60. FileOutputStream fos = null;
  61. BufferedInputStream bis = null;
  62. BufferedOutputStream bos = null;
  63. try {
  64. fis = new FileInputStream(file);
  65. fos = new FileOutputStream(file1);
  66. bis = new BufferedInputStream(fis);
  67. bos = new BufferedOutputStream(fos);
  68. int len = 0;
  69. byte[] b = new byte[10];
  70. while ((len = bis.read(b)) != -1) {
  71. bos.write(b, 0, len);
  72. }
  73. bos.flush();
  74. } catch (IOException e) {
  75. } finally {
  76. try {
  77. fis.close();
  78. fos.close();
  79. bis.close();
  80. bos.close();
  81. } catch (IOException e) {
  82. }
  83. }
  84. }
  85. }

文件复制撤回类:

  1. package guuze;
  2. import java.io.File;
  3. public class RemoveTargetFile {
  4. public static void startDelete(String path) {
  5. File file = new File(path);
  6. deleteFile(file);
  7. }
  8. private static void deleteFile(File file) {
  9. // 记住不要把路径的那个文件夹删掉了
  10. if (file.exists()) {
  11. if (file.isFile()) {
  12. // 是文件,直接删除
  13. file.delete();
  14. } else if (file.isDirectory()) {
  15. File[] files = file.listFiles();
  16. for (int i = 0; i < files.length; i++) {
  17. // 如果不是文件,进行迭代
  18. deleteFile(files[i]);
  19. }
  20. }
  21. }
  22. }
  23. }

Java用来进行批量文件重命名,批量提取特定类型文件的更多相关文章

  1. Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量。

    myeclipse和eclipse集成编译软件,都提供了一个快捷键用来批量重命名变量:Alt+Shift+R组合键,用来在一个java文件中批量的重命名变量.扩展知识:如果想要重命名文件名,又不想手动 ...

  2. 【Java EE 学习 22 上】【文件上传】【目录打散】【文件重命名】

    1.文件上传概述 (1)使用<input type="file">的方式来声明一个文件域. (2)表单提交方式一定要是post方式才行 (3)表单属性enctype 默 ...

  3. asp.net 文件批量移动重命名

    最近闲时写了个批量移动重命名文件的工具 点击下载工具

  4. Java 文件重命名

    Java 文件重命名 /** * 重命名文件 * @param fileName * @return */ public static void renameFile(String filePath, ...

  5. python工具 - 批量文件重命名

    日常工作中经常会遇到这样的情况,需要将某个文件夹下的文件按着一定的规则进行重命名,当文件数量及其庞大的时候手工一个一个的去修需要耗费大量的时间,以下python工具可以协助批量修改文件名. 场景:某文 ...

  6. Java实现文件重命名

    最近在做一个Android上面的一个文件管理器的apk,有文件名重命名和剪切的功能. 一般的思路如下: 重命名:先新建一个文件,复制原先的文件,读写文件,最后删除原先文件 剪切:先复制原先的文件,删除 ...

  7. 利用Python批量重命名一系列文件名杂乱的文件

    假设目录下面有这样一系列命令杂乱的文件: OPENFOAM -TRAINING- PART- #1.pdf OPENFOAM - TRAINING- PART- #2.pdf OPENFOAM- TR ...

  8. python实现批量文件重命名

    本文实例为大家分享了python批量文件重命名的具体代码,供大家参考,具体内容如下 问题描述 最近遇到朋友求助,如何将大量文件名前面的某些字符删除. 即将图中文件前的编号删除. Python实现 用到 ...

  9. Python实例31[批量对目录下文件重命名]

    经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名:例如: 修改前:[大家网]Mac OS X for Uni ...

随机推荐

  1. 【转】当你在浏览器地址栏输入一个URL后回车,将会发生的事情?

    http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/ http://www.cnblogs.com/panx ...

  2. 为什么我坚持学习C语言?

    c语言令无数人头疼,有意躲避! linux操作系统有c: glibc的c运行时库有c: mysql有c: php的底层有c: nosql层有c: 甚至其他的curl.nginx等等都有c: 每当问题追 ...

  3. oracle权限语句大全

    Oracle 系统默认的几个用户: sys --------网络管理用户,具有最高数据库管理权限 system------本地管理用户,权限次于sys scott-------普通用户,默认是锁住的( ...

  4. 【九度OJ】题目1054:字符串内排序

    题目描述: 输入一个字符串,长度小于等于200,然后将输出按字符顺序升序排序后的字符串. 输入: 测试数据有多组,输入字符串. 输出: 对于每组输入,输出处理后的结果. 样例输入: bacd 样例输出 ...

  5. html 页面中显示单行省略号

    <!DOCTYPE html>   <html>   <head>   <meta charset="UTF-8">   <t ...

  6. 『TCP/IP详解——卷一:协议』读书笔记——14

    2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...

  7. java 基础题 很基础, 很有趣

    都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们, ...

  8. armv6, armv7, armv7s的区别

    ARM是微处理器行业的一家知名企业,arm处理器以体积小和高性能的优势在嵌入式设备中广泛使用,几乎所有手机都是使用它的. armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是 ...

  9. jetty9 安装部署更改端口号

    1.下载jetty 并解压到指定目录 2.更改默认端口号--在start.d中的http.ini中修改 3.启动服务 在jetty的根目录中输入命令 java -jar start.jar  服务就启 ...

  10. C2第八次解题报告

    看过题解后如果觉得还算有用,请帮忙加点我所在团队博客访问量 http://www.cnblogs.com/newbe/ http://www.cnblogs.com/newbe/p/4069834.h ...