使用JFileChooser实现在指定文件夹下批量添加根据“数字型样式”或“非数字型样式”命令的文件夹

Posted yujie666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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、Ευχαριστ


 

以上是关于使用JFileChooser实现在指定文件夹下批量添加根据“数字型样式”或“非数字型样式”命令的文件夹的主要内容,如果未能解决你的问题,请参考以下文章

Win 7 如何批量提取指定文件夹下的所有文件名称及其路径?

为 JFileChooser 上的选定文件设置自己的文件图标

取消在 JFileChooser 中选择文件而不关闭对话框

vi文本模式下批量修改指定字符串

JFileChooser 问题

Win 7 如何批量提取指定文件夹下的所有文件名称及其路径?