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

  }

  });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值