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

思路分析:

  1. 首先是视图层。在这里有个建议,因为在某些控件的事件中,常常会访问其他控件,且控件的事件方法用到的参数几乎就是固定的ActionEvent类,很少传递别的参数。因此即使视图是用拖动控件自动生成的,也要在代码中把这些控件设为类的成员变量。在本实例中,要用到JPanel控件作为其他控件的容器,JLabel控件用来显示固定信息,JTextField控件用来显示要移动的文件和目标文件夹,JButton控件用来选择源文件夹、目标文件夹以及实现移动和关闭程序,JScrollPane用来显示条形柱,以及JTextArea控件用来显示操作记录。
  2. 然后是模型层。对于浏览按钮,要获取源文件夹中的文件名数组和目标文件夹的路径,这就需要定义一个File型数组成员变量保存文件名,再定义一个File型成员变量保存目标路径。
  3. 选择源文件的浏览按钮后,首先创建一个JFileChooser文件选择器,使用JFileChooser类的setMultiSelectionEnabled(true);方法设置可以多选,通过JFileChooser类的showOpenDialog(this);方法显示文件选择对话框,若用户确认则使用JFileChooser类的getSelectedFiles()方法获取选中的文件数组并赋值给之前定义的File型数组成员变量,通过JTextField()类的setText("")方法清空文本框以除去上一次操作的记录,新建一个StringBuilder对象,使用foreach()循环遍历文件数组,通过StringBuilder类的append()方法连接文件名称,因为最前面多了个“、”,再使用StringBuilder类的substring()方法获取所有文件名称的字符串,通过JTextFieldl类的setText()方法将文件名称字符串显示到文本框。
  4. 对于选择目标文件夹的浏览按钮,首先创建一个JFileChooser文件选择器,使用JFileChooser类的setFileSelectionMode()方法设置选择器只对文件夹生效,通过JFileChooser类的showOpenDialog()方法显示文件打开对话框,使用JFileChooser类的getSelectedFile()方法获取选择的文件夹,最后用JTextField控件的setText()方法显示文件夹到文本框。
  5. 对于移动按钮的事件处理方法,首先使用数组的length属性判断文件数组有无元素,若有则使用foreach()循环遍历文件数组,对数组中的每一个文件元素创建移动目标文件,通过JTextArea控件的append()方法显示移动记录,使用File类的renameTo()方法实现文件移动,最后使用JTextArea控件的append()方法显示移动完成信息。
  6. 对于关闭按钮的事件处理方法,使用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实现快速批量移动文件的更多相关文章

  1. Java实现FTP批量大文件上传下载篇1

    本文介绍了在Java中,如何使用Java现有的可用的库来编写FTP客户端代码,并开发成Applet控件,做成基于Web的批量.大文件的上传下载控件.文章在比较了一系列FTP客户库的基础上,就其中一个比 ...

  2. java使用ZipOutputStream批量压缩文件,并将文件分别放置不同文件夹压缩

    package cn.cnnho.backstage.controller;import java.util.ArrayList; import java.util.List; import java ...

  3. java nio 快速read大文件

    If you want to make your first example faster FileChannel inChannel = new FileInputStream(fileName). ...

  4. Linux命令行批量删除文件(目录)

    快速-批量删除文件或目录 1-1.快速删除大文件夹(注意目录后的结束符'/')(对于含有海量文件的目录,不能直接rm -rf删除,这样效率很慢:) rsync -a --delete blank/ t ...

  5. 使用Java中File类批量创建文件和批量修改文件名

    批量创建文件 int cont = 1; String s = "E:\\学习资料\\Java笔记-"; while(cont<100){ File f = new File ...

  6. Java实现批量修改文件名称

    import java.io.File; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; /** ...

  7. java多线程批量读取文件(七)

    新公司入职一个多月了,至今没有事情可以做,十来个新同事都一样抓狂,所以大家都自己学习一些新东西,我最近在看zookeeper,感觉蛮不错的,和微服务的zuul以及eureka功能类似,只是代码复杂了一 ...

  8. Java快速读取大文件

    Java快速读取大文件 最近公司服务器监控系统需要做一个东西来分析Java应用程序的日志. 第一步探索: 首先我想到的是使用RandomAccessFile,因为他可以很方便的去获取和设置文件指针,下 ...

  9. Java批量下载文件并zip打包

    客户需求:列表勾选需要的信息,点击批量下载文件的功能.这里分享下我们系统的解决方案:先生成要下载的文件,然后将其进行压缩,生成zip压缩文件,然后使用浏览器的下载功能即可完成批量下载的需求.以下是zi ...

随机推荐

  1. c# comboBox输出图文效果

    核心代码:重写DrawItem事件 void Event_CboDrawItem(object sender, DrawItemEventArgs e) { ) return; var cbo = s ...

  2. C/C++中near和far的区别

    C/C++中near和far的区别 关键字near和far受目标计算机体系结构的影响.目前编程中使用不多. near关键字创建一个指向可寻址内存低端部分的目标指针.这些指针占用内存的单一字节,并且他们 ...

  3. webpack2--webpack 4.X 快速创建demo

    准备工作 1.新建文件夹:webpack-demo(下面我们简称该文件夹为根目录),在根目录下面建两个文件夹,分别为src和dist. 1).src文件夹:用来存放我们编写的javascript代码, ...

  4. MYSQL查询前30条数据

    , LIMIT 接受一个或两个数字参数. 参数必须是一个整数常量. 如果给定两个参数,第一个参数指定第一个返回记录行的偏移量, 第二个参数指定返回记录行的最大数目. 初始记录行的偏移量是 (而不是 )

  5. Ubuntu上CUDA环境搭建

    1.下载CUDA:https://developer.nvidia.com/cuda-toolkit-archive (如果已经安装了N卡驱动,最好用.deb,如果没有安装,可以用.run) 2.根据 ...

  6. C++编程基础练习

    注:本文练习题均出自<Essential C++>第一章 练习1,1 从一个简单程序开始 #include<iostream> #include<string> u ...

  7. 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

    第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求 selenium模块 selenium模块为 ...

  8. WebService系列一:WebService简介

    原文链接:http://www.cnblogs.com/xdp-gacl/p/4259109.html 一.WebService是什么 WebService是一种跨编程语言和跨操作系统平台的远程调用技 ...

  9. Linq“条件排序”

    StockQuantities.OrderBy(u=>u.Status==null) 该排序先排结果为0(false)的,再排结果为1(true)的 使用场景: 一个对象有上传时间(可以为空)和 ...

  10. unity-----------------------------关于WheelCollider设置或小车运动的注意事项

    转载:Unity3d 汽车物理引擎 WheelCollider总结   WheelCollider总结 写了前面两篇文章,我想总结一下WheelCollider! 让我们能够更清晰的学会物理车的开发! ...