Java文件批量重命名批量提取特定类型文件
程序员文章站
2024-03-13 20:41:54
原因:
因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能。
因为老师发的课件中,文...
原因:
因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能。
因为老师发的课件中,文件夹太多,想把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文件批量重命名批量提取特定类型文件,希望对大家有所帮助