使用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, "数据输入格式错误!\n“从”后的文本框中的有效数字要小于\n“到”后的文本框中的有效数字。", "警告", 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, "输入的文本内容长度不一致!\n请重新输入...", "警告", 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, "数据输入格式错误!\n“从”后的文本框中的有效数字要小于\n“到”后的文本框中的有效数字。", "警告", 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, "输入的文本内容字符不一致!\n请重新输入...", "警告", JOptionPane.ERROR_MESSAGE); 256 } 257 } else { 258 JOptionPane.showMessageDialog(null, "输入的文本内容长度不一致!\n请重新输入...", "警告", 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、Ευχαριστ