zoukankan      html  css  js  c++  java
  • 使用JFileChooser实现在指定文件夹下批量添加根据“数字型样式”或“非数字型样式”命令的文件夹

    2018-11-05 20:57:00开始写




    Folder.java类

      1 import javax.swing.JFrame;
      2 import javax.swing.JPanel;
      3 import javax.swing.border.EmptyBorder;
      4 import javax.swing.JLabel;
      5 import javax.swing.JOptionPane;
      6 
      7 import java.awt.Font;
      8 import javax.swing.JTextField;
      9 import javax.swing.ButtonGroup;
     10 import javax.swing.JButton;
     11 import javax.swing.JFileChooser;
     12 
     13 import java.awt.event.ActionListener;
     14 import java.io.File;
     15 import java.text.DecimalFormat;
     16 import java.awt.event.ActionEvent;
     17 import javax.swing.JRadioButton;
     18 import javax.swing.SwingConstants;
     19 
     20 public class Folder extends JFrame { // 创建“文件夹”类继承JFrame
     21 
     22     private JPanel contentPane; // 内容面板
     23     private JTextField tf_Path; // 输入“文件路径”的文本框
     24     private JTextField tf_From; // “从”后面的文本框
     25     private JTextField tf_To; // “到”后面的文本框
     26     private String Path; // 文件路径
     27     private JRadioButton rdbtnNum;
     28     private JRadioButton rdbtnChar;
     29     private JLabel lblShow;
     30 
     31     public static void main(String[] args) {
     32         Folder folder = new Folder(); // 创建“文件夹”对象
     33         folder.setVisible(true); // 使得“文件夹”可视
     34     }
     35 
     36     /**
     37      * 创建窗体
     38      */
     39     public Folder() { // “文件夹”类的构造方法
     40         setResizable(false); // 不可改变窗体大小
     41         setTitle("按照模板创建文件夹"); // 设置窗体的题目
     42         setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体的关闭方式
     43         setBounds(100, 100, 424, 200); // 设定该窗体的横、纵坐标,宽、高
     44         /**
     45          * 创建内容面板,设置面板的边距,布局(绝对布局),把内容面板放到窗体中
     46          */
     47         contentPane = new JPanel();
     48         contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
     49         setContentPane(contentPane);
     50         contentPane.setLayout(null);
     51         /**
     52          * 创建“请选择文件夹”的标签,设置标签的横、纵坐标,宽、高,字体内容和样式,把该标签放到内容面板中
     53          */
     54         JLabel lb_Choose = new JLabel("请选择文件夹:");
     55         lb_Choose.setFont(new Font("宋体", Font.PLAIN, 12));
     56         lb_Choose.setBounds(10, 30, 85, 20);
     57         contentPane.add(lb_Choose);
     58         /**
     59          * 创建输入“文件路径”的文本框,设置文本框的横、纵坐标,宽、高,字体内容和样式,把该文本框放到内容面板中
     60          */
     61         tf_Path = new JTextField();
     62         tf_Path.setFont(new Font("宋体", Font.PLAIN, 12));
     63         tf_Path.setBounds(95, 30, 215, 20);
     64         contentPane.add(tf_Path);
     65         tf_Path.setColumns(10);
     66         /**
     67          * 创建“浏览”按钮,设置按钮的横、纵坐标,宽、高,字体内容和样式,把该按钮放到内容面板中
     68          */
     69         JButton btn_Search = new JButton("浏 览");
     70         btn_Search.addActionListener(new ActionListener() { // 动作事件的监听
     71             public void actionPerformed(ActionEvent e) { // 发生操作时
     72                 JFileChooser jfc = new JFileChooser(); // 创建文件选择对话框
     73                 jfc.setDialogTitle("请选择要导出目录"); // 设置对话框的标题
     74                 jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); // 设置自允许获得路径
     75                 int result = jfc.showOpenDialog(getContentPane()); // 显示文件选择对话框
     76                 File file = null; // 创建一个空的文件对象
     77                 if (JFileChooser.APPROVE_OPTION == result) { // 判断用户单击的是否为“打开”按钮
     78                     file = jfc.getSelectedFile(); // 获得选中的文件对象
     79                     Path = file.getAbsolutePath() + "\"; // 拼接编辑器识别的文件路径
     80                     tf_Path.setText(Path); // 把拼接好的文件路径写入到“文件路径”的文本框中
     81                 }
     82             }
     83         });
     84         btn_Search.setFont(new Font("宋体", Font.PLAIN, 12));
     85         btn_Search.setBounds(318, 30, 90, 20);
     86         contentPane.add(btn_Search);
     87         /**
     88          * 创建“添加文件夹:从”的标签,设置标签的横、纵坐标,宽、高,字体内容和样式,把该标签放到内容面板中
     89          */
     90         JLabel lb_From = new JLabel("添加文件夹:从");
     91         lb_From.setFont(new Font("宋体", Font.PLAIN, 12));
     92         lb_From.setBounds(10, 120, 85, 20);
     93         contentPane.add(lb_From);
     94         /**
     95          * 创建输入起始整型变量的文本框,设置文本框的横、纵坐标,宽、高,字体内容和样式,把该文本框放到内容面板中
     96          */
     97         tf_From = new JTextField();
     98         tf_From.setBounds(95, 120, 93, 20);
     99         contentPane.add(tf_From);
    100         tf_From.setColumns(10);
    101         /**
    102          * 创建输入终止整型变量的文本框,设置文本框的横、纵坐标,宽、高,字体内容和样式,把该文本框放到内容面板中
    103          */
    104         tf_To = new JTextField();
    105         tf_To.setBounds(213, 120, 93, 20);
    106         contentPane.add(tf_To);
    107         tf_To.setColumns(10);
    108         /**
    109          * 创建“到”的标签,设置标签的横、纵坐标,宽、高,字体内容和样式,把该标签放到内容面板中
    110          */
    111         JLabel lb_To = new JLabel("到");
    112         lb_To.setFont(new Font("宋体", Font.PLAIN, 12));
    113         lb_To.setBounds(196, 120, 15, 20);
    114         contentPane.add(lb_To);
    115         /**
    116          * 创建“添加”按钮,设置按钮的横、纵坐标,宽、高,字体内容和样式,把该按钮放到内容面板中
    117          */
    118         JButton btn_Add = new JButton("添 加");
    119         btn_Add.addActionListener(new ActionListener() { // 动作事件的监听
    120             public void actionPerformed(ActionEvent e) { // 发生操作时
    121                 if (rdbtnNum.isSelected()) {
    122                     handleNum();
    123                 }
    124                 if (rdbtnChar.isSelected()) {
    125                     handleChar();
    126                 }
    127             }
    128         });
    129         btn_Add.setFont(new Font("宋体", Font.PLAIN, 12));
    130         btn_Add.setBounds(318, 120, 90, 20);
    131         contentPane.add(btn_Add);
    132         /**
    133          * 单选按钮“数字型”
    134          */
    135         rdbtnNum = new JRadioButton("数字型");
    136         rdbtnNum.setSelected(true);
    137         rdbtnNum.addActionListener(new ActionListener() {
    138             public void actionPerformed(ActionEvent e) {
    139                 lblShow.setText("数字型样式:000001");
    140             }
    141         });
    142         rdbtnNum.setFont(new Font("宋体", Font.PLAIN, 12));
    143         rdbtnNum.setHorizontalAlignment(SwingConstants.CENTER);
    144         rdbtnNum.setBounds(6, 86, 70, 23);
    145         contentPane.add(rdbtnNum);
    146         /**
    147          * 单选按钮“非数字型”
    148          */
    149         rdbtnChar = new JRadioButton("非数字型");
    150         rdbtnChar.addActionListener(new ActionListener() {
    151             public void actionPerformed(ActionEvent e) {
    152                 lblShow.setText("非数字型样式:Demo_001");
    153             }
    154         });
    155         rdbtnChar.setFont(new Font("宋体", Font.PLAIN, 12));
    156         rdbtnChar.setHorizontalAlignment(SwingConstants.CENTER);
    157         rdbtnChar.setBounds(100, 86, 80, 23);
    158         contentPane.add(rdbtnChar);
    159         /**
    160          * 单选按钮组
    161          */
    162         ButtonGroup buttonGroup = new ButtonGroup();
    163         buttonGroup.add(rdbtnNum);
    164         buttonGroup.add(rdbtnChar);
    165         /**
    166          * 样式标签
    167          */
    168         lblShow = new JLabel("数字型样式:000001");
    169         lblShow.setFont(new Font("隶书", Font.PLAIN, 14));
    170         lblShow.setHorizontalAlignment(SwingConstants.CENTER);
    171         lblShow.setBounds(195, 86, 160, 23);
    172         contentPane.add(lblShow);
    173     }
    174 
    175     public String getPattern(String str) { // 获得目标格式的方法
    176         StringBuilder stringBuilder = new StringBuilder(); // 创建存储字符串的容器
    177         for (int i = 0; i < str.length(); i++) { // 向字符串容器中添加与目标字符串长度一致的“0”
    178             stringBuilder.append(0);
    179         }
    180         String pattern = stringBuilder.toString(); // 获得目标格式
    181         return pattern; // 返回目标格式
    182     }
    183 
    184     public int getValidNum(String str) { // 获得有效数字的方法
    185         char flag = '0'; // 标志变量,用来与目标字符串中每个索引位置上的字符进行比较
    186         int index = 0; // 初始化字符串中第一位不为“0”的字符的索引值
    187         for (int i = 0; i < str.length(); i++) { // 通过循环,使用标志变量与目标字符串中每个索引位置上的字符进行比较
    188             if (flag != str.charAt(i)) { // 目标字符串中索引位置上的字符不为“0”时
    189                 index = i; // 获得字符串中第一位不为“0”的字符的索引值
    190                 break; // 终止循环
    191             }
    192         }
    193         String tempResult = str.substring(index, str.length()); // 获得有效数字
    194         int validNum = Integer.parseInt(tempResult); // 数据类型转换得到int类型的有效数字
    195         return validNum; // 有效数字
    196     }
    197 
    198     public void handleNum() { // 处理选择“数字型”的方法
    199         try {
    200             if (tf_From.getText().length() == tf_To.getText().length()) { // 如果“从”后的文本框中的文本长度等于“到”后的文本框中的文本长度
    201                 // 获得文本框中的文本内容
    202                 String strFrom = tf_From.getText();
    203                 String strTo = tf_To.getText();
    204                 // 获得有效数字(例如:0000000012的有效数字是12)
    205                 int num_From = getValidNum(strFrom);
    206                 int num_To = getValidNum(strTo);
    207                 if (num_From >= num_To) { // 当起始整型变量大于等于终止整型变量时的弹出框内容
    208                     JOptionPane.showMessageDialog(null, "数据输入格式错误!
    “从”后的文本框中的有效数字要小于
    “到”后的文本框中的有效数字。", "警告",
    209                             JOptionPane.ERROR_MESSAGE);
    210                 } else { // 当起始整型变量小于终止整型变量时
    211                     DecimalFormat df = new DecimalFormat(getPattern(strFrom)); // 根据目标格式,格式化文件名
    212                     for (int i = num_From; i <= num_To; i++) { // 通过循环创建文件
    213                         File file = new File(Path + df.format(i)); // 按照指定路径生成文件夹
    214                         if (!file.exists()) { // 如果文件不存在
    215                             file.mkdir(); // 创建此抽象路径名指定的目录
    216                         }
    217                     }
    218                     JOptionPane.showMessageDialog(null, "文件夹创建成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
    219                 }
    220             } else {
    221                 JOptionPane.showMessageDialog(null, "输入的文本内容长度不一致!
    请重新输入...", "警告", JOptionPane.ERROR_MESSAGE);
    222             }
    223         } catch (NumberFormatException e) {
    224             JOptionPane.showMessageDialog(null, "请参照指定样式输入数据!", "警告", JOptionPane.ERROR_MESSAGE);
    225         }
    226     }
    227 
    228     public void handleChar() { // 处理选择“非数字型”的方法
    229         try {
    230             if (tf_From.getText().length() == tf_To.getText().length()) { // 如果“从”后的文本框中的文本长度等于“到”后的文本框中的文本长度
    231                 // 获得文本框中的文本内容
    232                 String strFrom = tf_From.getText();
    233                 String strTo = tf_To.getText();
    234                 // 拆分文本框中的文本内容
    235                 String[] targetFrom = strFrom.split("_");
    236                 String[] targetTo = strTo.split("_");
    237                 if (targetFrom[0].equals(targetTo[0])) {
    238                     // 获得有效数字(例如:0000000012的有效数字是12)
    239                     int num_From = getValidNum(targetFrom[1]);
    240                     int num_To = getValidNum(targetTo[1]);
    241                     if (num_From >= num_To) { // 当起始整型变量大于等于终止整型变量时的弹出框内容
    242                         JOptionPane.showMessageDialog(null, "数据输入格式错误!
    “从”后的文本框中的有效数字要小于
    “到”后的文本框中的有效数字。", "警告",
    243                                 JOptionPane.ERROR_MESSAGE);
    244                     } else { // 当起始整型变量小于终止整型变量时
    245                         DecimalFormat df = new DecimalFormat(getPattern(targetFrom[1])); // 根据目标格式,格式化文件名
    246                         for (int i = num_From; i <= num_To; i++) { // 通过循环创建文件
    247                             File file = new File(Path + targetFrom[0] + "_" + df.format(i)); // 按照指定路径生成文件夹
    248                             if (!file.exists()) { // 如果文件不存在
    249                                 file.mkdir(); // 创建此抽象路径名指定的目录
    250                             }
    251                         }
    252                         JOptionPane.showMessageDialog(null, "文件夹创建成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
    253                     }
    254                 } else {
    255                     JOptionPane.showMessageDialog(null, "输入的文本内容字符不一致!
    请重新输入...", "警告", JOptionPane.ERROR_MESSAGE);
    256                 }
    257             } else {
    258                 JOptionPane.showMessageDialog(null, "输入的文本内容长度不一致!
    请重新输入...", "警告", JOptionPane.ERROR_MESSAGE);
    259             }
    260         } catch (Exception e) { // 当输入的文本内容不能转换为int型时的弹出框内容
    261             JOptionPane.showMessageDialog(null, "请参照指定样式输入数据!", "警告", JOptionPane.ERROR_MESSAGE);
    262         }
    263     }
    264 }

    谢谢、Thank you、Salamat Do(撒拉玛特朵)、あリがCám o*n(嘉蒙)とゥ(阿里嘎都)、감사합니다 (勘三哈咪瘩)、terima Kasih(得力马卡系)、kob-khun(寇布库恩)、dhanyavaad(达尼阿瓦德)、toda(透达)、te?ekkür ederim(特谢库尔埃戴里姆)、Dzie,kuje(以库以而)、Spasibo(思巴喜柏)、Danke(但可)、shokran(休克朗)、Obrigada(欧布哩嘎搭)、dank u(当Q)、Merci(梅呵西)、Gracias(格拉喜亚思)、Grazie(格啦姬)、Благодарности、Tak、Kiitos、Díky、Hvala、Mul?umesc、Takk、Ευχαριστ


  • 相关阅读:
    合并两个排序的链表
    反转链表
    java网络编程之TCP通讯
    java网络编程之UDP通讯
    Java中的线程同步机制
    阿里研发工程师面试题三个小结
    Android开发的进阶之路
    获取一个字符串中每一个字母出现的次数使用map集合
    Android常见面试题目
    Java垃圾回收
  • 原文地址:https://www.cnblogs.com/YUJIE666/p/9911534.html
Copyright © 2011-2022 走看看