当前位置: 移动技术网 > IT编程>开发语言>Java > Java文件批量重命名批量提取特定类型文件

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

2019年07月22日  | 移动技术网IT编程  | 我要评论

原因:

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

  因为老师发的课件中,文件夹太多,想把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文件批量重命名批量提取特定类型文件,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网