原因:

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

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

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

用到的知识:

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

功能:

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

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

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

第一个功能演示:

  没有操作前的:

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

  还有撤回功能:

第二个功能演示:

  没有操作前:

  操作后:

  当然,也有撤回功能

源代码分析:

启动类:

package guuze;

public class Test {

    public static void main(String[] args) {
        //启动GUI,即用户界面
        new ShowGui();
    }
}

 显示GUI类:

package guuze;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class ShowGui {
    private JFrame f;
    private JButton b1;
    private JButton b2;
    private JButton b3;
    private JTextField tf1;
    private JTextField tf2;
    private JTextField tf3;

    private JButton b4;
    private JButton b5;
    private JButton b6;
    private JTextField tf4;
    private JTextField tf5;
    private JTextField tf6;

    private static String s1;

    public ShowGui() {
        // 直接调用
        startGui();
    }

    public void startGui() {
        f = new BgSet();// 用来设置背景图片
        f.setLayout(new FlowLayout());
        Image icon = Toolkit.getDefaultToolkit().getImage("image/4.jpg");// 设置左上角logo图标
        f.setIconImage(icon);
        // 6个按钮
        b1 = new JButton("开始");
        b2 = new JButton("撤回");
        b3 = new JButton("退出");
        b4 = new JButton("一键提取");
        b5 = new JButton("撤回");
        b6 = new JButton("退出");
        // 6个按钮的大小
        b1.setPreferredSize(new Dimension(89, 39));
        b2.setPreferredSize(new Dimension(89, 39));
        b3.setPreferredSize(new Dimension(89, 39));

        b4.setPreferredSize(new Dimension(89, 39));
        b5.setPreferredSize(new Dimension(89, 39));
        b6.setPreferredSize(new Dimension(89, 39));
        // 6个 文本框的大小以及输入字体的属性
        tf1 = new JTextField("Please input absolute_path", 40);
        tf1.setFont(new Font("宋体", Font.PLAIN, 25));
        tf1.setBounds(200, 15, 550, 126);

        tf2 = new JTextField("Please input keyWords", 40);
        tf2.setFont(new Font("宋体", Font.PLAIN, 25));
        tf2.setBounds(200, 15, 550, 126);

        tf3 = new JTextField("Please input replaceWords", 40);
        tf3.setFont(new Font("宋体", Font.PLAIN, 25));
        tf3.setBounds(200, 15, 550, 126);

        tf4 = new JTextField("Please input absolute_path", 40);
        tf4.setFont(new Font("宋体", Font.PLAIN, 25));
        tf4.setBounds(200, 15, 550, 126);

        tf5 = new JTextField("Please input target_path", 40);
        tf5.setFont(new Font("宋体", Font.PLAIN, 25));
        tf5.setBounds(200, 15, 550, 126);

        tf6 = new JTextField("Please input filetype", 40);
        tf6.setFont(new Font("宋体", Font.PLAIN, 25));
        tf6.setBounds(200, 15, 550, 126);
        // 把按钮和文本框添加上
        f.add(tf1);
        f.add(tf2);
        f.add(tf3);
        f.add(b1);
        f.add(b2);
        f.add(b3);

        f.add(tf4);
        f.add(tf5);
        f.add(tf6);
        f.add(b4);
        f.add(b5);
        f.add(b6);
        // 调用事件监听函数
        myEvent();
        f.setVisible(true);
    }

    private void myEvent() {
        // 点击右上角×退出
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        // 点击第一个按钮的响应事件
        b1.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                s1 = tf1.getText();
                // 对文本框内值进行判断,如果什么也没写,当做空处理,以下的类似
                if (s1.equals("Please input path")) {
                    s1 = "";
                }
                File file = new File(s1);
                String test[];
                test = file.list();
                RenameFunction.test1 = test;
                String s2 = tf2.getText();
                if (s2.equals("Please input replaceWords")) {
                    s2 = "";
                }
                String s3 = tf3.getText();
                if (s3.equals("Please input replaceWords")) {
                    s3 = "";
                }
                try {
                    // 启动重命名函数
                    RenameFunction.sure(s1, s2, s3);
                } catch (Exception e1) {
                }
            }
        });
        // 点击第二个按钮的响应事件
        b2.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                try {
                    try {
                        if (!s1.equals("Please input path")) {
                            // 启动撤回
                            RevokeRename.revoke(s1);
                        }
                    } catch (Exception e2) {
                    }
                } catch (Exception e1) {
                }
            }
        });
        // 点击第三个按钮的响应事件
        b3.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                System.exit(0); // 退出
            }
        });
        // 点击第四个按钮的响应事件
        b4.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {

                String s2 = tf4.getText();
                String s3 = tf5.getText();
                String s4 = tf6.getText();

                if (s2.equals("Please input absolute_path")) {
                    s2 = "";
                }
                if (s3.equals("Please input target_path")) {
                    s3 = "";
                }
                if (s4.equals("Please input filetype")) {
                    s4 = "";
                }
                // 启动文件搜索函数
                SearchFileFunction.startCopy(s2, s3, s4);
            }
        });
        // 点击第五个按钮的响应事件
        b5.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                String s2 = tf5.getText();
                // 启动撤回函数
                RemoveTargetFile.startDelete(s2);
            }
        });
        // 点击第六个按钮的响应事件
        b6.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                System.exit(0); // 退出
            }
        });
    }
}

 GUI背景图片设置类:

package guuze;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class BgSet extends JFrame {
    private static final long serialVersionUID = 1L;

    public BgSet() {
        // 设置标题
        super("GreatFish");
        setBounds(100, 100, 600, 600);
        // 背景图片的路径。
        String path = "image/3.jpg";
        ImageIcon background = new ImageIcon(path);
        JLabel label = new JLabel(background);
        label.setBounds(0, 0, this.getWidth(), this.getHeight());
        JPanel imagePanel = (JPanel) this.getContentPane();
        imagePanel.setOpaque(false);
        this.getLayeredPane().add(label, new Integer(Integer.MIN_VALUE));
    }
}

 文件重命名类:

package guuze;

import java.io.File;
import java.util.Scanner;

public class RenameFunction {
    static Scanner input = new Scanner(System.in);
    public static String test1[];

    public static void sure(String s1, String s2, String s3) throws Exception {
        File file = new File(s1);
        String test[];
        test = file.list();
        // 遍历文件的名字
        for (int i = 0; i < test.length; i++) {
            // 判断是不是有你想去除的关键字
            if (test[i].indexOf(s2) != -1) {
                // 保存重命名后的文件名
                test[i] = test[i].replace(s2, s3);
            }
        }

        File[] files = file.listFiles();
        for (int i = 0; i < test.length;) {
            for (File f : files) {
                if (f.isFile()) {
                    // 循环赋重命名后的名字
                    f.renameTo(new File(s1 + "/" + test[i++]));
                }
            }
        }
    }
}

文件重命名撤回函数类:

package guuze;

import java.io.File;

public class RevokeRename {
    public static void revoke(String s1) throws Exception {
        // 重新赋回原来的名字
        File file = new File(s1);
        File[] files = file.listFiles();
        for (int i = 0; i < RenameFunction.test1.length;) {
            for (File f : files) {
                if (f.isFile()) {
                    // 注意是test1
                    f.renameTo(new File(s1 + "/" + RenameFunction.test1[i++]));
                }
            }
        }
    }
}

文件复制类:

package guuze;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class SearchFileFunction {
    static int count = 1;

    public static void startCopy(String source_path, String target_path,
            String file_Type) {
        // 启动循环函数
        xunHuan(source_path, target_path, file_Type);
    }

    public static void xunHuan(String source_path, String target_path,
            String file_Type) {
        File file = new File(source_path);
        String names[] = file.list();
        // 判断是不是文件以及是否以你想要的文件类型结尾
        if (file.isFile() && file.getAbsolutePath().endsWith(file_Type)) {
            String new_path = target_path + "/" + file.getName();
            File file1 = new File(new_path);
            if (!file1.exists()) {
                try {
                    file1.createNewFile();
                } catch (IOException e) {
                }
            } else {
                // 如果文件名字相同,在点前面加数字进行区分
                // 注意用\\.进行分隔,而不是.
                String[] arr = new_path.split("\\.");
                String new_path1 = arr[0] + count + "." + arr[1];
                file1.renameTo(new File(new_path1));
            }
            // 是文件,所以开始复制文件
            fileCopyByBufferStreamArray(file.getAbsolutePath(), new_path);
        }

        else if (file.isFile() && !file.getAbsolutePath().endsWith(file_Type)) {
            // 注意这个方法体中什么都不写,就是不做处理
        } else {
            for (int i = 0; i < names.length; i++) {
                // 不是文件,进行迭代
                xunHuan(file.getAbsolutePath() + "/" + names[i], target_path,
                        file_Type);
            }
        }
    }

    public static void fileCopyByBufferStreamArray(String srcFile,
            String targetFile) {
        // 用流的知识进行写文件
        File file = new File(srcFile);
        File file1 = new File(targetFile);
        FileInputStream fis = null;
        FileOutputStream fos = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            fis = new FileInputStream(file);
            fos = new FileOutputStream(file1);
            bis = new BufferedInputStream(fis);
            bos = new BufferedOutputStream(fos);
            int len = 0;
            byte[] b = new byte[10];
            while ((len = bis.read(b)) != -1) {
                bos.write(b, 0, len);
            }
            bos.flush();
        } catch (IOException e) {
        } finally {
            try {
                fis.close();
                fos.close();
                bis.close();
                bos.close();
            } catch (IOException e) {
            }
        }
    }
}

文件复制撤回类:

package guuze;

import java.io.File;

public class RemoveTargetFile {

    public static void startDelete(String path) {
        File file = new File(path);
        deleteFile(file);
    }

    private static void deleteFile(File file) {
        // 记住不要把路径的那个文件夹删掉了
        if (file.exists()) {
            if (file.isFile()) {
                // 是文件,直接删除
                file.delete();
            } else if (file.isDirectory()) {
                File[] files = file.listFiles();
                for (int i = 0; i < files.length; i++) {
                    // 如果不是文件,进行迭代
                    deleteFile(files[i]);
                }
            }
        }
    }
}

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. jQuery-强大的jQuery选择器 (详解)[转]

      1. 基础选择器 Basics 名称 说明 举例 #id 根据元素Id选择 $("divId") 选择ID为divId的元素 element 根据元素的名称选择, $(&quo ...

  2. windows下nginx的启动关闭

    Windows下Nginx的启动.停止等命令 在Windows下使用Nginx,我们需要掌握一些基本的操作命令,比如:启动.停止Nginx服务,重新载入Nginx等,下面我就进行一些简单的介绍. .启 ...

  3. Swift基础语法(二)

    操作符 swift中运算符基本基础于c,下面我就给大家白话白话那些被优化过的运算符们 //加号减号的妙用 var a= var b= -a//此时b=-1 var c = +b//此时 c=-1 va ...

  4. Ubuntu 16.04 启动错误 "a start job is running for hold until boot process finishes up"

    老司机也差点翻船... 升级16.04的时候,将默认启动管理器(default display manager)选为gm3(gnome3)了(应该使用默认的lightgm)如果改成gm3,好像是nvi ...

  5. Oracle中rownum和rowid的理解(转)

    本文转自地址http://www.linuxidc.com/Linux/2012-04/58300.htm rownum,rowid都叫伪列. 但是,rownum是逻辑上的编号,且其值总是从1开始,每 ...

  6. VMware克隆虚拟机,克隆机网卡启动不了解决方案

    Shutting down loopback interface: [ OK ] Bringing up loopback interface: [ OK ] Bringing up interfac ...

  7. IPv4头部结构

    2.2 IPv4头部结构 2.2.1 IPv4头部结构 IPv4的头部结构如图2-1所示.其长度通常为20字节,除非含有可变长的选项部分. 4位版本号(version)指定IP协议的版本.对IPv4来 ...

  8. office中通过宏添加快捷键

    把“Microsoft 公式 3.0”作为一个按钮放在 2013中的快速访问工具栏的方法 在使用office办公软件的过程中,因为有的人还在使用office2003版本,所以在使用高版本的office ...

  9. 天气预报API(一):全国城市代码列表(“旧编码”)

    说明 2016-12-09 补充 (后来)偶然发现中国天气网已经有城市ID列表的网页... 还发现城市编码有两种,暂且称中国天气网这些编码为旧标准 "旧编码"的特征是 9个字符长度 ...

  10. 《Linux内核分析》期中总结

    两个月Linux内核的学习,让我理解了Linux内核的基本工作原理,包括进程管理.内存管理.设备驱动.文件系统,从分析内核到了解整个系统是如何工作的.如何控制管理资源分配.进程切换并执行.各种策略和结 ...