欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2016年08月29日 08:55:31   作者:GreatAnt  
這篇文章主要介紹了Java文件批量重命名批量提取特定類型文件的相關(guān)資料

原因:

  因為在網(wǎng)上下載視頻教程,有的名字特別長,一般都是機構(gòu)或者網(wǎng)站的宣傳,不方便直接看到視頻的簡介,所以做了下面的第一個功能。

  因為老師發(fā)的課件中,文件夾太多,想把docx都放在同一個文件夾下面,一個一個找出來太麻煩,所以做了第二個功能。

最近剛剛學了Java文件和流的知識,所以正好練練手,這也是自己的第一個exe程序,分享一下哈。

  (導(dǎo)出jar文件,以及用工具exe4j生成exe文件,這部分省略了哈)

用到的知識:

  用到Java中文件,流的知識,以及簡單的GUI知識。

功能:

   功能一:去除文件名字的某些關(guān)鍵字,也可以設(shè)置代替字。

   功能二:提取一個路徑下面所有特定類型的文件,然后放在一個新的文件夾下面,如果有重復(fù)的文件,則自動排序在后面加數(shù)字來區(qū)分。

先看下啟動后的界面和生成的exe文件:

第一個功能演示:

  沒有操作前的:

  操作后:把前面部分相同關(guān)鍵字全部去掉了

  還有撤回功能:

第二個功能演示:

  沒有操作前:

  操作后:

  當然,也有撤回功能

源代碼分析:

啟動類:

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() {
// 直接調(diào)用
startGui();
}
public void startGui() {
f = new BgSet();// 用來設(shè)置背景圖片
f.setLayout(new FlowLayout());
Image icon = Toolkit.getDefaultToolkit().getImage("image/4.jpg");// 設(shè)置左上角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);
// 調(diào)用事件監(jiān)聽函數(shù)
myEvent();
f.setVisible(true);
}
private void myEvent() {
// 點擊右上角×退出
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
// 點擊第一個按鈕的響應(yīng)事件
b1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
s1 = tf1.getText();
// 對文本框內(nèi)值進行判斷,如果什么也沒寫,當做空處理,以下的類似
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 {
// 啟動重命名函數(shù)
RenameFunction.sure(s1, s2, s3);
} catch (Exception e1) {
}
}
});
// 點擊第二個按鈕的響應(yīng)事件
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) {
}
}
});
// 點擊第三個按鈕的響應(yīng)事件
b3.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.exit(0); // 退出
}
});
// 點擊第四個按鈕的響應(yīng)事件
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 = "";
}
// 啟動文件搜索函數(shù)
SearchFileFunction.startCopy(s2, s3, s4);
}
});
// 點擊第五個按鈕的響應(yīng)事件
b5.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
String s2 = tf5.getText();
// 啟動撤回函數(shù)
RemoveTargetFile.startDelete(s2);
}
});
// 點擊第六個按鈕的響應(yīng)事件
b6.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
System.exit(0); // 退出
}
});
}
}

GUI背景圖片設(shè)置類:

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() {
// 設(shè)置標題
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++) {
// 判斷是不是有你想去除的關(guān)鍵字
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()) {
// 循環(huán)賦重命名后的名字
f.renameTo(new File(s1 + "/" + test[i++]));
}
}
}
}
}

文件重命名撤回函數(shù)類:

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++]));
}
}
}
}
}

文件復(fù)制類:

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) {
// 啟動循環(huán)函數(shù)
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();
// 判斷是不是文件以及是否以你想要的文件類型結(jié)尾
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 {
// 如果文件名字相同,在點前面加數(shù)字進行區(qū)分
// 注意用\\.進行分隔,而不是.
String[] arr = new_path.split("\\.");
String new_path1 = arr[0] + count + "." + arr[1];
file1.renameTo(new File(new_path1));
}
// 是文件,所以開始復(fù)制文件
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) {
}
}
}
}

文件復(fù)制撤回類:

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文件批量重命名批量提取特定類型文件,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java通過Fork/Join優(yōu)化并行計算

    Java通過Fork/Join優(yōu)化并行計算

    這篇文章主要為大家詳細介紹了Java通過Fork、Join來優(yōu)化并行計算,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 詳解java動態(tài)代理的2種實現(xiàn)方式

    詳解java動態(tài)代理的2種實現(xiàn)方式

    目前Java開發(fā)包中包含了對動態(tài)代理的支持,但是其實現(xiàn)只支持對接口的的實現(xiàn)。這篇文章主要介紹了詳解java動態(tài)代理的2種實現(xiàn)方式 ,有興趣的可以了解一下。
    2016-11-11
  • java 替換docx文件中的字符串方法實現(xiàn)

    java 替換docx文件中的字符串方法實現(xiàn)

    這篇文章主要介紹了java 替換docx文件中的字符串方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • Spring數(shù)據(jù)庫多數(shù)據(jù)源路由配置過程圖解

    Spring數(shù)據(jù)庫多數(shù)據(jù)源路由配置過程圖解

    這篇文章主要介紹了Spring數(shù)據(jù)庫多數(shù)據(jù)源路由配置過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-06-06
  • SpringCloud Gateway的熔斷限流配置實現(xiàn)方法

    SpringCloud Gateway的熔斷限流配置實現(xiàn)方法

    Spring Cloud Gateway支持通過配置熔斷和限流機制來保證服務(wù)的穩(wěn)定性和可用性,可通過Hystrix和Resilience4j兩種方式實現(xiàn)。Hystrix通過注解和配置文件實現(xiàn)熔斷限流,Resilience4j通過編程式配置實現(xiàn)
    2023-04-04
  • 一文帶你搞懂Java單例模式

    一文帶你搞懂Java單例模式

    單例就是單實例的意思,即在系統(tǒng)全局,一個類只創(chuàng)建一個對象,并且在系統(tǒng)全局都可以訪問這個對象而不用重新創(chuàng)建。本文將通過示例為大家詳細講解Java單例模式的使用,需要的可以參考一下
    2022-11-11
  • Java操作另一個Java程序使其重啟的簡單實現(xiàn)

    Java操作另一個Java程序使其重啟的簡單實現(xiàn)

    下面小編就為大家?guī)硪黄狫ava操作另一個Java程序使其重啟的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Seata分布式事務(wù)出現(xiàn)ABA問題解決

    Seata分布式事務(wù)出現(xiàn)ABA問題解決

    這篇文章主要為大家介紹了Seata分布式事務(wù)出現(xiàn)ABA問題解決方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Spring AOP中的JDK和CGLib動態(tài)代理哪個效率更高?

    Spring AOP中的JDK和CGLib動態(tài)代理哪個效率更高?

    今天小編就為大家分享一篇關(guān)于Spring AOP中的JDK和CGLib動態(tài)代理哪個效率更高?,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Druid基本配置及內(nèi)置監(jiān)控使用_動力節(jié)點Java學院整理

    Druid基本配置及內(nèi)置監(jiān)控使用_動力節(jié)點Java學院整理

    這篇文章主要介紹了Druid基本配置及內(nèi)置監(jiān)控使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論