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");
    }
}

效果如图:

时间: 2014-02-26

Java实现mybatis批量插入数据到Oracle

最近项目中遇到一个问题:导入数据到后台并将数据插入到数据库中,导入的数据量有上万条数据,考虑采用批量插入数据的方式:  结合网上资料,写了个小demo,文章末尾附上demo下载地址 1.新建项目:项目目录结构如下图所示,添加相应的jar包 2.新建数据库表:ACCOUNT_INFO CREATE TABLE ACCOUNT_INFO ( "ID" NUMBER(12) NOT NULL , "USERNAME" VARCHAR2(64 BYTE) NULL , &q

Java实现文件批量重命名具体实例

Windows操作系统可以实现重命名文件操作,却不能实现批量重命名.本实例实现了批量重命名功能,可以将一个文件夹内同一类型的文件按照一定的规则批量重命名.用户可以给出重命名模板,程序可以根据模板对相应的文件进行重命名.此外,还可以在重命名模板中添加特殊符号,程序会将这些特殊符号替换成重命名后的文件编号. 思路分析: 1.先看视图层,需要一些JLabel控件分别显示指示用户的信息,三个JTextField控件分别显示所选路径.输入文件名模板即输入扩展名,两个JButton控件分别用来浏览文件夹和开

Java 批量删除html中注释内容的方法

其实删除html文本中的注释有很多方法,这里就自己随便写了一个处理方法,权当笔记,有需要的同学可以参考. html文本的注释有几个特点: 1. 成对出现,有开始就一定有结束. 2. 注释标签没有嵌套,注释开始标签(以下称为 <!--)下一个一定是其对应的结束标签(以下称为 -->). 3. 一行中可能有多个注释标签对儿. 4. 注释也可以换行. 大致有以下几种情况: 复制代码 代码如下: <html>  <!--This is a head-->  <head&g

java实现jdbc批量插入数据

首先介绍三种JDBC批量插入编程方法,进行比较,具体内容如下 JDBC批量插入主要用于数据导入和日志记录因为日志一般都是先写在文件下的等. 我用Mysql 5.1.5的JDBC driver 分别对三种比较常用的方法做了测试 方法一:使用PreparedStatement加批量的方法 try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(o_url, userName, pass

javaweb文件打包批量下载代码

本文实例为大家分享了javaweb文件打包批量下载,供大家参考,具体内容如下 // 批量下载未批改作业 @RequestMapping(value = "/downloadAllHomework", method = RequestMethod.GET) public void downloadAllHomework(HttpSession httpSession, HttpServletRequest request, HttpServletResponse response, St

实例讲解Java批量插入、更新数据

Java的批量添加数据,多个字段同时添加多条数据,我不知道你遇到过没有.今天我们就以一个具体的实例来说一下Java的批量添加数据,面向的是Oracle数据库. 前台页面: <span style="font-size:14px;"><body class="main_body" scroll="no"> <div class="employee_gun_dong"> <form nam

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

原因: 因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能. 因为老师发的课件中,文件夹太多,想把docx都放在同一个文件夹下面,一个一个找出来太麻烦,所以做了第二个功能. 最近刚刚学了Java文件和流的知识,所以正好练练手,这也是自己的第一个exe程序,分享一下哈. (导出jar文件,以及用工具exe4j生成exe文件,这部分省略了哈) 用到的知识: 用到Java中文件,流的知识,以及简单的GUI知识. 功能: 功能一:去除文

java文件重命名(文件批量重命名)实例程序代码分享

首先,查到java里文件重命名的方法为:renameTo(); 我将180张图片放在d:\\backup下,用下面的程序进行重命名: 复制代码 代码如下: public void reName(){        String dir = "D:\\backup\\";        File file = new File(dir);        String fileName[] = file.list();        int number = fileName.length

Java批量修改文件名的实例代码

复制代码 代码如下: import java.io.*; import java.util.*;public class Test { public static void main(String[] args) throws IOException {        BufferedReader br = new BufferedReader(new FileReader("output1.txt"));        List<String> newName = new

java批量修改文件名的实现方法

 java批量修改文件名的实现方法 初次学习java,被java的灵活性和简洁的思路所吸引 需求: 看到java视频在播放器列表中的文件名很长,每次都需要拉长列表才能看清全名,故写此代码批量修改该文件夹下所有文件名 实现代码: import java.io.*; class filesRename { public static void main(String[] args) throws IOException { String str1 = new String("这里是需要删除的文件名前

python批量修改文件名的实现代码

#coding:utf-8 #批量修改文件名 import os import re import datetime re_st = r'(\d+)\+\s?\((\d+)\)' #用于匹配旧的文件名,需含分组 re_match_old_file_name = re.compile(re_st) #要修改的目录 WORKING_PATH = r'F:\Gallery' #---------------------------------------------------------------

linux中批量修改文件名的脚本代码

使用 rename 命令 ======================== NAME rename - Rename files SYNOPSIS rename from to file... ======================== 复制代码 代码如下: #! /bin/sh INIFILE="./dirlist.ini" CURPATH=$(pwd) for SERVERPATH in $(cut -d: -f1 $INIFILE) do cd $SERVERPATH cd

Python实现批量修改文件名实例

本文实例讲述了Python实现批量修改文件名的方法.分享给大家供大家参考.具体如下: 下载了评书<贺龙传奇>,文件名中却都含有xxx有声下载,用脚本将其去掉.脚本涉及os.rename重命名方法,str.partition方法使用, 及正则match,search方法区别 # encoding:utf-8 ## # 文件名如: # 贺龙传奇\d+[有声下吧www.ysx8.com].mp3 ## import os,re fs=os.listdir('单田芳_贺龙传奇') for f in f

Java判断上传图片格式的实例代码

先给大家介绍下java判断上传图片格式. 由于客户上传图片将png的图片的后缀名改为jpg,所以通过后缀名判断不行,用下面这个方法可以 //判断是否是JPG格式 log.info("-1----进入JPG格式判断....."); ImageInputStream iis = ImageIO.createImageInputStream(file.getInputStream()); Iterator<ImageReader> iter = ImageIO.getImageR

PHP实现批量修改文件名的方法示例

本文实例讲述了PHP实现批量修改文件名的方法.分享给大家供大家参考,具体如下: 需求描述: 某个文件夹下有100个文件,现在需要将这个100个文件的文件名后添加字符串Abc(后缀名保持不变). 代码实现: 方法一 <?php $dir = __DIR__."\image\\"; $list = scandir($dir); foreach ($list as $item) { if(!in_array($item,['.','..'])){ $arr = explode(&quo

Java实现FTP服务器功能实例代码

FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议.在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download).FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录.列文件目录.设置传输参数及传送文件等.使用FTP可以传送所有类型的文件,如文本文件.二进制可执

java随机验证码生成实现实例代码

java随机验证码生成实现实例代码 摘要: 在项目中有很多情况下都需要使用到随机验证码,这里提供一个java的随机验证码生成方案,可以指定难度,生成的验证码可以很方便的和其他组件搭配 之前要使用一个生成随机验证码的功能,在网上找了一下,有很多的人提出了不同的解决方案,但是很多人都使用了com.sun.image.这个包或者子包里面的类,而这个包结构下面的类都是不推荐使用的,我们应该依赖于java.或者javax.这些包结构下面的类,否则将来的可移植性就很不好(比如换成IBM的JDK就不行了),但

php批量修改表结构实例

废话不多说,直接上代码 <?php set_time_limit(0); $con = mysql_connect("localhost", "root", "root"); $dbname = "db"; if ($con) { if (mysql_select_db($dbname, $con)) { $sql = "show tables like 'pre_tb_%'"; $ret = mys