1. 程式人生 > >使用JFileChooser實現在指定文件夾下批量添加根據“數字型樣式”或“非數字型樣式”命令的文件夾

使用JFileChooser實現在指定文件夾下批量添加根據“數字型樣式”或“非數字型樣式”命令的文件夾

exist ner clas resizable 數據類型轉換 ons set 文件選擇 app

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、Ευχαριστ


使用JFileChooser實現在指定文件夾下批量添加根據“數字型樣式”或“非數字型樣式”命令的文件夾