欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java快速批量移动文件的实现方法

程序员文章站 2024-02-25 21:40:21
文件移动是计算机资源管理常用的一个操作,这在操作系统中可以通过文件的剪切与复制或鼠标拖动来实现。但是在java文件的编程实现中,大多是通过复制文件到目的地,再删除所有文件来...

文件移动是计算机资源管理常用的一个操作,这在操作系统中可以通过文件的剪切与复制或鼠标拖动来实现。但是在java文件的编程实现中,大多是通过复制文件到目的地,再删除所有文件来实现的。这对于小文件来说看不出什么弊端,但是如果移动几个大的文件,则会使操作缓慢并且浪费系统资源。本实例将通过file类的renameto()方法直接实现文件的快速移动,哪怕是移动几gb的文件也不会需要等待太长时间。

思路分析:

首先是视图层。在这里有个建议,因为在某些控件的事件中,常常会访问其他控件,且控件的事件方法用到的参数几乎就是固定的actionevent类,很少传递别的参数。因此即使视图是用拖动控件自动生成的,也要在代码中把这些控件设为类的成员变量。在本实例中,要用到jpanel控件作为其他控件的容器,jlabel控件用来显示固定信息,jtextfield控件用来显示要移动的文件和目标文件夹,jbutton控件用来选择源文件夹、目标文件夹以及实现移动和关闭程序,jscrollpane用来显示条形柱,以及jtextarea控件用来显示操作记录。
然后是模型层。对于浏览按钮,要获取源文件夹中的文件名数组和目标文件夹的路径,这就需要定义一个file型数组成员变量保存文件名,再定义一个file型成员变量保存目标路径。
选择源文件的浏览按钮后,首先创建一个jfilechooser文件选择器,使用jfilechooser类的setmultiselectionenabled(true);方法设置可以多选,通过jfilechooser类的showopendialog(this);方法显示文件选择对话框,若用户确认则使用jfilechooser类的getselectedfiles()方法获取选中的文件数组并赋值给之前定义的file型数组成员变量,通过jtextfield()类的settext("")方法清空文本框以除去上一次操作的记录,新建一个stringbuilder对象,使用foreach()循环遍历文件数组,通过stringbuilder类的append()方法连接文件名称,因为最前面多了个“、”,再使用stringbuilder类的substring()方法获取所有文件名称的字符串,通过jtextfieldl类的settext()方法将文件名称字符串显示到文本框。
对于选择目标文件夹的浏览按钮,首先创建一个jfilechooser文件选择器,使用jfilechooser类的setfileselectionmode()方法设置选择器只对文件夹生效,通过jfilechooser类的showopendialog()方法显示文件打开对话框,使用jfilechooser类的getselectedfile()方法获取选择的文件夹,最后用jtextfield控件的settext()方法显示文件夹到文本框。
对于移动按钮的事件处理方法,首先使用数组的length属性判断文件数组有无元素,若有则使用foreach()循环遍历文件数组,对数组中的每一个文件元素创建移动目标文件,通过jtextarea控件的append()方法显示移动记录,使用file类的renameto()方法实现文件移动,最后使用jtextarea控件的append()方法显示移动完成信息。
对于关闭按钮的事件处理方法,使用system类的exit()方法退出程序。
代码如下:

复制代码 代码如下:

import java.awt.eventqueue;

public class quickmovefiles extends jframe {

    /**
     *
     */
    private static final long serialversionuid = -666045931923008374l;
    private jpanel contentpane;
    private jtextarea infoarea;
    private jtextfield sourcefolderfield;
    private jtextfield targetfolderfield;
    private file[] files;
    private file dir;

    /**
     * launch the application.
     */
    public static void main(string[] args) {
        eventqueue.invokelater(new runnable() {
            public void run() {
                try {
                    quickmovefiles frame = new quickmovefiles();
                    frame.setvisible(true);
                } catch (exception e) {
                    e.printstacktrace();
                }
            }
        });
    }

    /**
     * create the frame.
     */
    public quickmovefiles() {
        settitle("\u5feb\u901f\u6279\u91cf\u79fb\u52a8\u6587\u4ef6");
        setdefaultcloseoperation(jframe.exit_on_close);
        setbounds(100, 100, 507, 299);
        contentpane = new jpanel();
        contentpane.setborder(new emptyborder(5, 5, 5, 5));
        setcontentpane(contentpane);
        gridbaglayout gbl_contentpane = new gridbaglayout();
        gbl_contentpane.columnwidths = new int[] { 0, 178, 0, 0, 0, 0 };
        gbl_contentpane.rowheights = new int[] { 0, 0, 169, 0, 0 };
        gbl_contentpane.columnweights = new double[] { 0.0, 1.0, 0.0, 0.0, 0.0,
                double.min_value };
        gbl_contentpane.rowweights = new double[] { 0.0, 0.0, 1.0, 0.0,
                double.min_value };
        contentpane.setlayout(gbl_contentpane);

        jlabel label = new jlabel("\u9009\u62e9\u6e90\u6587\u4ef6\uff1a");
        gridbagconstraints gbc_label = new gridbagconstraints();
        gbc_label.anchor = gridbagconstraints.east;
        gbc_label.insets = new insets(0, 0, 5, 5);
        gbc_label.gridx = 0;
        gbc_label.gridy = 0;
        contentpane.add(label, gbc_label);

        sourcefolderfield = new jtextfield();
        gridbagconstraints gbc_sourcefolderfield = new gridbagconstraints();
        gbc_sourcefolderfield.gridwidth = 3;
        gbc_sourcefolderfield.insets = new insets(0, 0, 5, 5);
        gbc_sourcefolderfield.fill = gridbagconstraints.horizontal;
        gbc_sourcefolderfield.gridx = 1;
        gbc_sourcefolderfield.gridy = 0;
        contentpane.add(sourcefolderfield, gbc_sourcefolderfield);
        sourcefolderfield.setcolumns(10);

        jbutton browserbutton1 = new jbutton("\u6d4f\u89c8");
        browserbutton1.addactionlistener(new actionlistener() {
            public void actionperformed(actionevent e) {
                do_browserbutton1_actionperformed(e);
            }
        });
        gridbagconstraints gbc_browserbutton1 = new gridbagconstraints();
        gbc_browserbutton1.insets = new insets(0, 0, 5, 0);
        gbc_browserbutton1.gridx = 4;
        gbc_browserbutton1.gridy = 0;
        contentpane.add(browserbutton1, gbc_browserbutton1);

        jlabel label_1 = new jlabel(
                "\u9009\u62e9\u76ee\u6807\u6587\u4ef6\u5939\uff1a");
        gridbagconstraints gbc_label_1 = new gridbagconstraints();
        gbc_label_1.anchor = gridbagconstraints.east;
        gbc_label_1.insets = new insets(0, 0, 5, 5);
        gbc_label_1.gridx = 0;
        gbc_label_1.gridy = 1;
        contentpane.add(label_1, gbc_label_1);

        targetfolderfield = new jtextfield();
        gridbagconstraints gbc_targetfolderfield = new gridbagconstraints();
        gbc_targetfolderfield.gridwidth = 3;
        gbc_targetfolderfield.insets = new insets(0, 0, 5, 5);
        gbc_targetfolderfield.fill = gridbagconstraints.horizontal;
        gbc_targetfolderfield.gridx = 1;
        gbc_targetfolderfield.gridy = 1;
        contentpane.add(targetfolderfield, gbc_targetfolderfield);
        targetfolderfield.setcolumns(10);

        jbutton browserbutton2 = new jbutton("\u6d4f\u89c8");
        browserbutton2.addactionlistener(new actionlistener() {
            public void actionperformed(actionevent e) {
                do_browserbutton2_actionperformed(e);
            }
        });
        gridbagconstraints gbc_browserbutton2 = new gridbagconstraints();
        gbc_browserbutton2.insets = new insets(0, 0, 5, 0);
        gbc_browserbutton2.gridx = 4;
        gbc_browserbutton2.gridy = 1;
        contentpane.add(browserbutton2, gbc_browserbutton2);

        jlabel label_2 = new jlabel("\u64cd\u4f5c\u8bb0\u5f55\uff1a");
        gridbagconstraints gbc_label_2 = new gridbagconstraints();
        gbc_label_2.anchor = gridbagconstraints.east;
        gbc_label_2.insets = new insets(0, 0, 5, 5);
        gbc_label_2.gridx = 0;
        gbc_label_2.gridy = 2;
        contentpane.add(label_2, gbc_label_2);

        jscrollpane scrollpane = new jscrollpane();
        gridbagconstraints gbc_scrollpane = new gridbagconstraints();
        gbc_scrollpane.gridwidth = 4;
        gbc_scrollpane.insets = new insets(0, 0, 5, 0);
        gbc_scrollpane.fill = gridbagconstraints.both;
        gbc_scrollpane.gridx = 1;
        gbc_scrollpane.gridy = 2;
        contentpane.add(scrollpane, gbc_scrollpane);

        infoarea = new jtextarea();
        scrollpane.setviewportview(infoarea);

        jbutton movebutton = new jbutton("\u79fb\u52a8");
        movebutton.addactionlistener(new actionlistener() {
            public void actionperformed(actionevent e) {
                do_movebutton_actionperformed(e);
            }
        });
        gridbagconstraints gbc_movebutton = new gridbagconstraints();
        gbc_movebutton.insets = new insets(0, 0, 0, 5);
        gbc_movebutton.gridx = 1;
        gbc_movebutton.gridy = 3;
        contentpane.add(movebutton, gbc_movebutton);

        jbutton closebutton = new jbutton("\u5173\u95ed");
        closebutton.addactionlistener(new actionlistener() {
            public void actionperformed(actionevent e) {
                do_closebutton_actionperformed(e);
            }
        });
        gridbagconstraints gbc_closebutton = new gridbagconstraints();
        gbc_closebutton.insets = new insets(0, 0, 0, 5);
        gbc_closebutton.gridx = 2;
        gbc_closebutton.gridy = 3;
        contentpane.add(closebutton, gbc_closebutton);
    }

    /**
     * 选择源文件的浏览按钮
     *
     * @param e
     */
    protected void do_browserbutton1_actionperformed(actionevent e) {
        jfilechooser chooser = new jfilechooser();// 创建文件选择器
        chooser.setmultiselectionenabled(true);// 设置文件多选
        int option = chooser.showopendialog(this);// 显示文件打开对话框
        if (option == jfilechooser.approve_option) {
            files = chooser.getselectedfiles();// 获取选择的文件数组
            sourcefolderfield.settext("");// 清空文本框
            stringbuilder filesstr = new stringbuilder();
            for (file file : files) {// 遍历文件数组
                filesstr.append("、" + file.getname());// 连接文件名称
            }
            string str = filesstr.substring(1);// 获取所有文件名称的字符串
            sourcefolderfield.settext(str);// 设置文件名称信息到文本框
        } else {
            files = new file[0];
            sourcefolderfield.settext("");// 清空文本框
        }
    }

    /**
     * 选择目标文件夹的浏览按钮
     *
     * @param e
     */
    protected void do_browserbutton2_actionperformed(actionevent e) {
        jfilechooser chooser = new jfilechooser();// 创建文件选择器
        // 设置选择器只针对文件夹生效
        chooser.setfileselectionmode(jfilechooser.directories_only);
        int option = chooser.showopendialog(this);// 显示文件打开对话框
        if (option == jfilechooser.approve_option) {
            dir = chooser.getselectedfile();// 获取选择的文件夹
            targetfolderfield.settext(dir.tostring());// 显示文件夹到文本框
        } else {
            dir = null;
            targetfolderfield.settext("");
        }
    }

    /**
     * 关闭按钮的事件处理方法
     *
     * @param e
     */
    protected void do_closebutton_actionperformed(actionevent e) {
        system.exit(0);
    }

    /**
     * 移动按钮的事件处理方法
     *
     * @param e
     */
    protected void do_movebutton_actionperformed(actionevent e) {
        if (files.length <= 0 || dir == null)// 判断文件数组有无元素
            return;
        for (file file : files) {// 遍历文件数组
            file newfile = new file(dir, file.getname());// 创建移动目标文件
            infoarea.append(file.getname() + "\t移动到\t" + dir);// 显示移动记录
            file.renameto(newfile);// 文件移动
            infoarea.append("------完成\n");// 显示移动完成信息
        }
        // 显示操作完成
        infoarea.append("##################操作完成###################\n");
    }
}

效果如图:
Java快速批量移动文件的实现方法