Java快速批量移动文件的实现方法_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");
    }
}

效果如图:

时间: 2024-09-24 04:36:03

Java快速批量移动文件的实现方法_java的相关文章

Java基于Socket的文件传输实现方法_java

本文实例讲述了Java基于Socket的文件传输实现方法.分享给大家供大家参考,具体如下: 1. Java代码如下: package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.Ser

电脑中快速批量新建文件夹的方法

首先开始菜单输入Powershell,注意这时候不要回车,而是在Powershell指引上单击鼠标右键,弹出菜单中选择"以管理员身份运行".     比如要在C盘的音乐文件夹里新建批量文件夹,可以先输入"cd\",切换到C盘根目录下,然后输入"cd 音乐"回车.其实这部分命令和cmd命令提示符模式下是一致的.     重点来了,输入"mkdir $(1..10 | %{"cfan$_"})",其中"

在XP系统中快速批量修改文件的好方法

在平时的工作中我们经常会遇到需要给文件重命名的情况,有的文件是因为文件格式不对,不重命名的话无法打开该文件.有的是为了方便我们日后查找.调用该文件,比如下载好的歌曲.图片等等.如果是重命名几个文件并不会花费我们太多的时间精力,可是如果是需要大量文件的修改的话,那么一个个去修改不但浪费我们的工作时间,在修改的过程中也容易出错,不记得哪些是修改过哪些是还没修改的.那么我们可不可以对文件进行大批量的修改呢?下面小编就以中关村xp纯净版系统为例,跟大家一起分享下关于批量修改文件名的方法! 方法如下: 1

利用Excel和记事本实现批量建立文件夹的方法

如果我们想批量建立很多文件夹怎么办呢,下面我来教大家一招利用http://www.aliyun.com/zixun/aggregation/16544.html">Excel和记事本实现快速批量建立文件夹的方法. 1. 首先我们新建一个Excel文档,在Excel文档中的第一行中输入我们想要建立的文件夹名称(一个文件名对应一个单元格). 2.完成第一步后我们先退出Excel并保存文件,在文件类型中选择"文本文件(制表符分隔)(*.txt)",命好文件名.选好位置,点击&

python实现批量改文件名称的方法

  本文实例讲述了python实现批量改文件名称的方法.分享给大家供大家参考.具体分析如下: 发现python中提供了大量的模块函数,有时候一些系统操作在python中非常简单 下面的文件关键是要放到要操作的目录下, 下面是把当前目录下的图片批量命名,从00开始,其中小于10 的我们在名称前面补零,或者可以利用os设置路径 ? 1 2 3 4 5 6 7 8 9 10 11 12 #-*- coding: UTF-8 -*- import os filenames = os.listdir(os

php实现批量修改文件名称的方法_php技巧

本文实例讲述了php实现批量修改文件名称的方法.分享给大家供大家参考,具体如下: <?php session_start(); set_time_limit(0); //function allfile($dir) // { // $files=array(); // if(is_file($dir)) // { // return $dir; // } // $handle = opendir($dir); // if($handle) { // while(false !== ($file

java删除指定目录下所有空文件夹的方法_java

本文实例讲述了java删除指定目录下所有空文件夹的方法.分享给大家供大家参考,具体如下: package com.func; import java.io.File; import java.util.ArrayList; import java.util.List; /** * 删除指定目录下的所有空文件夹 * * @author zdw * */ public class FileUtils { List<File> list = new ArrayList<File>();

java实现两台服务器间文件复制的方法_java

本文实例讲述了java实现两台服务器间文件复制的方法.分享给大家供大家参考.具体分析如下: 通常我们使用最多的文件复制功能就是同服务器之间的文件复制功能,这里介绍的是在普通文件复制上功能升级,可以实现两台服务器实现文件的复制,下面一起来看看代码. 1.服务器端 复制代码 代码如下: package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOut

java实现变更文件查询的方法_java

本文实例讲述了java实现变更文件查询的方法.分享给大家供大家参考.具体如下: 自己经常发布包时需要查找那些文件时上次发包后更新的数据文件,所以写了这个发布包, 拷贝输出的命令,dos窗口下执行, 为啥不直接复制文件,因为java拷贝文件会修改文件最后修改日期,所以采用dos下的拷贝. /* * * 更改所生成文件模板为 * 窗口 > 首选项 > Java > 代码生成 > 代码和注释 */ package com.cn.wangk.tools; import java.awt.B