Java快速批量移动文件的实现方法
发布时间:2021-06-15 16:58:56
文件移动是计算机资源管理常用的一个操作,这在操作系统中可以通过文件的剪切与复制或鼠标拖动来实现。但是在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");
}
}
猜你喜欢
- 可能我们用惯了 Newtonsoft.Json.dll 等第三方的类库来实现序列化等类似的操作,但是有时只是简单的用一下,感觉没必要那么费事
- 其他的不多说了!我们来看看效果吧 一、实现方式一:直接引入compile方式A
- 什么是Mapping同样的,我们先讲基本概念,什么是mapping,上节给大家简要的举了一个例子,还有印象吗?mapping是es中一个比较
- SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作
- 原理比较简单,引入System.Reflection命名空间,利用反射查看某种Type下的方法,属性,字段和支持的接口等。using Sys
- 什么是JMMJMM全称Java Memory Model, 中文翻译Java内存模型,一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问
- 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。重写(Overriding)是父类与子类之间多
- 可以指定编码如:utf-8来写入和读取文件。如果文件编码未知,可以通过该方法先得到文件的编码后再指定正确的编码来读取,否则会出现文件乱码问题
- IntroC# 9 中进一步增强了模式匹配的用法,使得模式匹配更为强大,我们一起来了解一下吧SampleC# 9 中增强了模式匹配的用法,增
- 本文实例讲述了Java编程实现获取当前代码行行号的方法。分享给大家供大家参考,具体如下:最近的项目中,为了实现自定义的log类,能够输出具体
- 本文实例讲述了android打开本地图像的方法。分享给大家供大家参考。具体如下:方法一,调用手机安装的图像浏览工具浏览:Intent int
- 自然排序TreeSet集合在存储数据时有一定的顺序,它会将一些数据进行比较,比较调用的是comparaTo()方法,该方法是在Compara
- 在文件夹中,我们经常有类似s_1.txt、s_2.txt、s_10.txt、s_11.txt这样的命名方式,我们期望的排序方式是s_1.tx
- 模式虽然精妙,却难完美,比如观察者模式中观察者生命周期的问题;比如访问者模式中循环依赖的问题等等;其它很多模式也存在这样那样的一些不足之处,
- springboot pom文件project报错问题如下 解决方案情况1:maven版本要和课程保持一致,网盘直接下载。情况2:
- /// 除去所有在HTML元素中标记 public static string&nbs
- 目录前言项目环境1.线程池示例2.shutdown3.isShutdown4.isTerminated5.awaitTermination6
- 一、自带函数助手MD5加密在函数助手中找到__MD5这个函数,第一个参数是要md5加密的值,第二个参数是保存加密后值的变量在请求参数中引用该
- 今天再学习一些C#的基础知识,如对 Int Array进行排序:你可以在控制台应用程序中,创建一个类别,它属性和2个构造函数:Source
- PowerPoint幻灯片中可插入公式,用于在幻灯片放映时演示相关内容的论证、推算的依据,能有效地为演讲者提供论述的数据支撑。通过后端程序代