Java文件批量重命名批量提取特定类型文件_java

原因:

  因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能。

  因为老师发的课件中,文件夹太多,想把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文件批量重命名批量提取特定类型文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索批量提取txt特定文本、批量重命名、文件批量重命名、批量重命名软件、文件夹批量重命名,以便于您获取更多的相关知识。

时间: 2024-12-11 04:21:57

Java文件批量重命名批量提取特定类型文件_java的相关文章

Java 实现文件批量重命名亲测可用(精简版)_java

之前在网上下载了很多视频,解压缩后,发现里面每个文件前面都有一长串的网址,导致我根本看不清每个视频的名字到底叫什么? 网上搜了一些批量重命名的方法,可都不是我想要的,既然这样,干脆自己动手用Java写一个吧.测了一下应该没问题,现在分享出来. 先上代码: import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** * 重命名规则类 * @author ja

Java实现文件批量重命名具体实例_java

Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应的文件进行重命名.此外,还可以在重命名模板中添加特殊符号,程序会将这些特殊符号替换成重命名后的文件编号. 思路分析: 1.先看视图层,需要一些JLabel控件分别显示指示用户的信息,三个JTextField控件分别显示所选路径.输入文件名模板即输入扩展名,两个JButton控件分别用来浏览文件夹和开

关于批量重命名文件

不久前,我们软件工程系举行了全系大会.我在大会上做了简短的报告,主题是"学以致用.动手实践".报告期间我说了一个亲身经历:以前校园内U盘病毒肆虐,病毒会把U盘里所有的文本文件加上系统属性和隐藏属性,并添加".tmp"扩展名(例如原文件名为"a.txt",病毒修改为"a.txt.tmp"),然后生成一个和原文件同名的病毒文件.我不幸中招,于是用我所学的知识写了一个小程序,几秒钟就解决了. 原以为它就像插播广告一样随听随忘,不料言

win7系统下批量重命名文件的方法

  在win7下我们对于同类文件来说,如果想要以数字编号的形式命名文件的话,是无需借助第三方软件即可完成修改的,不过很多不知道如何操作,故此小编为大家带来了Win7如何同时重命名多个文件的方法,需要的用户赶快学习下吧! win7系统下批量重命名文件的方法 1.在保存文件的时候可以采用系统自动分配名字的方法,即保存的时候系统显示的什么名字,就让它默认为什么名字,这样的名字也不会重名,保存起来相当的快. 2.选中文件夹中所有需要重命名的文件,直接按组合键ctrl+a就行,然后按F2,接下来输入希望设

Win7如何批量重命名文件?

  大家在用电脑时,经常会遇到需要批量重命名文件的问题.如果文件不多还好办,不然挨个重命名是很麻烦的事.所以,掌握重命名小技巧还是非常有必要的.下面小编就向大家介绍一下这个简单实用的方法,适用于Win7/Win8.1/Win10系统. 具体步骤如下: 1.全选你想重命名的文件,如下图-- 2.在选中状态的一个文件上点右键,选择重命名,如下图-- 3.一个文件改好新名称后,其他文件依次被序号标记,如下图-- 方法很简单,只不过修改的时候要注意文件排列顺序,以及被修改的"样本文件"排序位置

文件批量重命名的另类应用小技巧

工作生活中,我们不时需要对大量文件进行重新命名,由于Windows 本身提供的批量重命名功能太弱,往往达不到要求,于是我们便到处寻找各式各样的批量重命名工具--其实,你电脑里很可能已经有了可以批量重命名的强大工具. ACDSee不仅可以看图片 还可以批量重命名 很多人电脑里都安装了ACDSee,殊不知,它也具有批量重命名文件的功能.不同的ACDSee版本会有少许差别,这里以ACDSee 5为例. 首先启动ACDSee,切换到"浏览"方式,打开图片所在的文件夹,在ACDSee的管理器窗口

Python批量重命名同一文件夹下文件的方法

  本文实例讲述了Python批量重命名同一文件夹下文件的方法.分享给大家供大家参考.具体分析如下: 朋友发了一个文件夹过来,里面的图片都以 .tmp 为后缀. 手工修改的话工作量太大.故写了一个 Python 脚本进行批量重命名. 对 Python 的标准库不熟,只能边查资料,或者 help() 边写代码. 三行代码就可以解决这一问题. 不过没有捕获异常.不能迭代同一目录下的所有文件. 代码如下: ? 1 2 3 4 import os for file in os.listdir(".&qu

Python批量重命名文件示例

  Python批量重命名文件方法很简单我们会利用listdir与rename 再加上目录遍历即可实现文件重命令了,下面整理了一些方法. 用到了os的两个接口: 1.列出文件夹中的所有文件(也包含目录) os.listdir(path) Return a list containing the names of the entries in the directory given by path. The list is in arbitrary order. It does not inclu

python对指定目录下文件进行批量重命名的方法_python

本文实例讲述了python对指定目录下文件进行批量重命名的方法.分享给大家供大家参考.具体如下: 这段python代码可对c:\temp目录下的所有文件名为"scroll_1"文件替换为"scroll_00" import os path = 'c:\\temp' for file in os.listdir(path): if os.path.isfile(os.path.join(path,file))==True: newname = file.replace