使用JFileChooser实现在指定文件夹下批量添加根据“数字型样式”或“非数字型样式”命令的文件夹
2018-11-05 20:57:00开始写


Folder.java类
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JOptionPane; import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFileChooser; import java.awt.event.ActionListener;
import java.io.File;
import java.text.DecimalFormat;
import java.awt.event.ActionEvent;
import javax.swing.JRadioButton;
import javax.swing.SwingConstants; public class Folder extends JFrame { // 创建“文件夹”类继承JFrame private JPanel contentPane; // 内容面板
private JTextField tf_Path; // 输入“文件路径”的文本框
private JTextField tf_From; // “从”后面的文本框
private JTextField tf_To; // “到”后面的文本框
private String Path; // 文件路径
private JRadioButton rdbtnNum;
private JRadioButton rdbtnChar;
private JLabel lblShow; public static void main(String[] args) {
Folder folder = new Folder(); // 创建“文件夹”对象
folder.setVisible(true); // 使得“文件夹”可视
} /**
* 创建窗体
*/
public Folder() { // “文件夹”类的构造方法
setResizable(false); // 不可改变窗体大小
setTitle("按照模板创建文件夹"); // 设置窗体的题目
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置窗体的关闭方式
setBounds(100, 100, 424, 200); // 设定该窗体的横、纵坐标,宽、高
/**
* 创建内容面板,设置面板的边距,布局(绝对布局),把内容面板放到窗体中
*/
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
/**
* 创建“请选择文件夹”的标签,设置标签的横、纵坐标,宽、高,字体内容和样式,把该标签放到内容面板中
*/
JLabel lb_Choose = new JLabel("请选择文件夹:");
lb_Choose.setFont(new Font("宋体", Font.PLAIN, 12));
lb_Choose.setBounds(10, 30, 85, 20);
contentPane.add(lb_Choose);
/**
* 创建输入“文件路径”的文本框,设置文本框的横、纵坐标,宽、高,字体内容和样式,把该文本框放到内容面板中
*/
tf_Path = new JTextField();
tf_Path.setFont(new Font("宋体", Font.PLAIN, 12));
tf_Path.setBounds(95, 30, 215, 20);
contentPane.add(tf_Path);
tf_Path.setColumns(10);
/**
* 创建“浏览”按钮,设置按钮的横、纵坐标,宽、高,字体内容和样式,把该按钮放到内容面板中
*/
JButton btn_Search = new JButton("浏 览");
btn_Search.addActionListener(new ActionListener() { // 动作事件的监听
public void actionPerformed(ActionEvent e) { // 发生操作时
JFileChooser jfc = new JFileChooser(); // 创建文件选择对话框
jfc.setDialogTitle("请选择要导出目录"); // 设置对话框的标题
jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); // 设置自允许获得路径
int result = jfc.showOpenDialog(getContentPane()); // 显示文件选择对话框
File file = null; // 创建一个空的文件对象
if (JFileChooser.APPROVE_OPTION == result) { // 判断用户单击的是否为“打开”按钮
file = jfc.getSelectedFile(); // 获得选中的文件对象
Path = file.getAbsolutePath() + "\\"; // 拼接编辑器识别的文件路径
tf_Path.setText(Path); // 把拼接好的文件路径写入到“文件路径”的文本框中
}
}
});
btn_Search.setFont(new Font("宋体", Font.PLAIN, 12));
btn_Search.setBounds(318, 30, 90, 20);
contentPane.add(btn_Search);
/**
* 创建“添加文件夹:从”的标签,设置标签的横、纵坐标,宽、高,字体内容和样式,把该标签放到内容面板中
*/
JLabel lb_From = new JLabel("添加文件夹:从");
lb_From.setFont(new Font("宋体", Font.PLAIN, 12));
lb_From.setBounds(10, 120, 85, 20);
contentPane.add(lb_From);
/**
* 创建输入起始整型变量的文本框,设置文本框的横、纵坐标,宽、高,字体内容和样式,把该文本框放到内容面板中
*/
tf_From = new JTextField();
tf_From.setBounds(95, 120, 93, 20);
contentPane.add(tf_From);
tf_From.setColumns(10);
/**
* 创建输入终止整型变量的文本框,设置文本框的横、纵坐标,宽、高,字体内容和样式,把该文本框放到内容面板中
*/
tf_To = new JTextField();
tf_To.setBounds(213, 120, 93, 20);
contentPane.add(tf_To);
tf_To.setColumns(10);
/**
* 创建“到”的标签,设置标签的横、纵坐标,宽、高,字体内容和样式,把该标签放到内容面板中
*/
JLabel lb_To = new JLabel("到");
lb_To.setFont(new Font("宋体", Font.PLAIN, 12));
lb_To.setBounds(196, 120, 15, 20);
contentPane.add(lb_To);
/**
* 创建“添加”按钮,设置按钮的横、纵坐标,宽、高,字体内容和样式,把该按钮放到内容面板中
*/
JButton btn_Add = new JButton("添 加");
btn_Add.addActionListener(new ActionListener() { // 动作事件的监听
public void actionPerformed(ActionEvent e) { // 发生操作时
if (rdbtnNum.isSelected()) {
handleNum();
}
if (rdbtnChar.isSelected()) {
handleChar();
}
}
});
btn_Add.setFont(new Font("宋体", Font.PLAIN, 12));
btn_Add.setBounds(318, 120, 90, 20);
contentPane.add(btn_Add);
/**
* 单选按钮“数字型”
*/
rdbtnNum = new JRadioButton("数字型");
rdbtnNum.setSelected(true);
rdbtnNum.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
lblShow.setText("数字型样式:000001");
}
});
rdbtnNum.setFont(new Font("宋体", Font.PLAIN, 12));
rdbtnNum.setHorizontalAlignment(SwingConstants.CENTER);
rdbtnNum.setBounds(6, 86, 70, 23);
contentPane.add(rdbtnNum);
/**
* 单选按钮“非数字型”
*/
rdbtnChar = new JRadioButton("非数字型");
rdbtnChar.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
lblShow.setText("非数字型样式:Demo_001");
}
});
rdbtnChar.setFont(new Font("宋体", Font.PLAIN, 12));
rdbtnChar.setHorizontalAlignment(SwingConstants.CENTER);
rdbtnChar.setBounds(100, 86, 80, 23);
contentPane.add(rdbtnChar);
/**
* 单选按钮组
*/
ButtonGroup buttonGroup = new ButtonGroup();
buttonGroup.add(rdbtnNum);
buttonGroup.add(rdbtnChar);
/**
* 样式标签
*/
lblShow = new JLabel("数字型样式:000001");
lblShow.setFont(new Font("隶书", Font.PLAIN, 14));
lblShow.setHorizontalAlignment(SwingConstants.CENTER);
lblShow.setBounds(195, 86, 160, 23);
contentPane.add(lblShow);
} public String getPattern(String str) { // 获得目标格式的方法
StringBuilder stringBuilder = new StringBuilder(); // 创建存储字符串的容器
for (int i = 0; i < str.length(); i++) { // 向字符串容器中添加与目标字符串长度一致的“0”
stringBuilder.append(0);
}
String pattern = stringBuilder.toString(); // 获得目标格式
return pattern; // 返回目标格式
} public int getValidNum(String str) { // 获得有效数字的方法
char flag = '0'; // 标志变量,用来与目标字符串中每个索引位置上的字符进行比较
int index = 0; // 初始化字符串中第一位不为“0”的字符的索引值
for (int i = 0; i < str.length(); i++) { // 通过循环,使用标志变量与目标字符串中每个索引位置上的字符进行比较
if (flag != str.charAt(i)) { // 目标字符串中索引位置上的字符不为“0”时
index = i; // 获得字符串中第一位不为“0”的字符的索引值
break; // 终止循环
}
}
String tempResult = str.substring(index, str.length()); // 获得有效数字
int validNum = Integer.parseInt(tempResult); // 数据类型转换得到int类型的有效数字
return validNum; // 有效数字
} public void handleNum() { // 处理选择“数字型”的方法
try {
if (tf_From.getText().length() == tf_To.getText().length()) { // 如果“从”后的文本框中的文本长度等于“到”后的文本框中的文本长度
// 获得文本框中的文本内容
String strFrom = tf_From.getText();
String strTo = tf_To.getText();
// 获得有效数字(例如:0000000012的有效数字是12)
int num_From = getValidNum(strFrom);
int num_To = getValidNum(strTo);
if (num_From >= num_To) { // 当起始整型变量大于等于终止整型变量时的弹出框内容
JOptionPane.showMessageDialog(null, "数据输入格式错误!\n“从”后的文本框中的有效数字要小于\n“到”后的文本框中的有效数字。", "警告",
JOptionPane.ERROR_MESSAGE);
} else { // 当起始整型变量小于终止整型变量时
DecimalFormat df = new DecimalFormat(getPattern(strFrom)); // 根据目标格式,格式化文件名
for (int i = num_From; i <= num_To; i++) { // 通过循环创建文件
File file = new File(Path + df.format(i)); // 按照指定路径生成文件夹
if (!file.exists()) { // 如果文件不存在
file.mkdir(); // 创建此抽象路径名指定的目录
}
}
JOptionPane.showMessageDialog(null, "文件夹创建成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(null, "输入的文本内容长度不一致!\n请重新输入...", "警告", JOptionPane.ERROR_MESSAGE);
}
} catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null, "请参照指定样式输入数据!", "警告", JOptionPane.ERROR_MESSAGE);
}
} public void handleChar() { // 处理选择“非数字型”的方法
try {
if (tf_From.getText().length() == tf_To.getText().length()) { // 如果“从”后的文本框中的文本长度等于“到”后的文本框中的文本长度
// 获得文本框中的文本内容
String strFrom = tf_From.getText();
String strTo = tf_To.getText();
// 拆分文本框中的文本内容
String[] targetFrom = strFrom.split("_");
String[] targetTo = strTo.split("_");
if (targetFrom[0].equals(targetTo[0])) {
// 获得有效数字(例如:0000000012的有效数字是12)
int num_From = getValidNum(targetFrom[1]);
int num_To = getValidNum(targetTo[1]);
if (num_From >= num_To) { // 当起始整型变量大于等于终止整型变量时的弹出框内容
JOptionPane.showMessageDialog(null, "数据输入格式错误!\n“从”后的文本框中的有效数字要小于\n“到”后的文本框中的有效数字。", "警告",
JOptionPane.ERROR_MESSAGE);
} else { // 当起始整型变量小于终止整型变量时
DecimalFormat df = new DecimalFormat(getPattern(targetFrom[1])); // 根据目标格式,格式化文件名
for (int i = num_From; i <= num_To; i++) { // 通过循环创建文件
File file = new File(Path + targetFrom[0] + "_" + df.format(i)); // 按照指定路径生成文件夹
if (!file.exists()) { // 如果文件不存在
file.mkdir(); // 创建此抽象路径名指定的目录
}
}
JOptionPane.showMessageDialog(null, "文件夹创建成功!", "提示", JOptionPane.INFORMATION_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(null, "输入的文本内容字符不一致!\n请重新输入...", "警告", JOptionPane.ERROR_MESSAGE);
}
} else {
JOptionPane.showMessageDialog(null, "输入的文本内容长度不一致!\n请重新输入...", "警告", JOptionPane.ERROR_MESSAGE);
}
} catch (Exception e) { // 当输入的文本内容不能转换为int型时的弹出框内容
JOptionPane.showMessageDialog(null, "请参照指定样式输入数据!", "警告", JOptionPane.ERROR_MESSAGE);
}
}
}
谢谢、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实现在指定文件夹下批量添加根据“数字型样式”或“非数字型样式”命令的文件夹的更多相关文章
- linux下批量添加新用户
作为一个系统管理员,可能要经常的为机器添加用户,可能是在一台机器上添加很多用户,也有可能是在很多机器上要添加同一个用户. 基本上,批量添加用户有两种方式,一是用useradd + passwd命令配合 ...
- linux--文件夹下批量改动IP
sed -i 's/10.11/10.22/g' `grep ir 10.11 *| grep -E'.xml:|.cfg:|.ini:|.wsdl|.properties:' |awk -F:'{p ...
- Linux下批量添加用户
添加和删除用户对每位Linux系统管理员都是轻而易举的事,比较棘手的是如果要添加几十个.上百个甚至上千个用户时,我们不太可能还使用useradd一个一个地添加, 必然要找一种简便的创建大量用户的方法. ...
- shell脚本实现查找文件夹下重复的文件,并提供删除功能
Windows下有软件FindDupFile,可以搜索指定目录及其下子目录,列出所有内容完全相同的文件(文件名可能不同),然后由用户选择删除重复的文件. 然而shell脚本却可以使用几行的命令完成与此 ...
- windows下使用RoboCopy命令进行文件夹增量备份
RoboCopy,它是一个命令行的目录复制命令,自从Windows NT 4.0 开始就成为windows 资源工具包的一部分,然后在Windows Vista.Windows 7和 Windows ...
- maven问题解决:提示maven依赖包缺失,但是去文件夹下找确实有这个包
出现问题:提示maven依赖包缺失,但是去文件夹下找确实有这个包. (我的操作就是:删除文件夹中的jar.重新update,) 搞了好多遍,工具总是提示错误信息,没办法,请求大神 操作大概过程: 1 ...
- [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。
解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...
- [转]ms sql 2000 下批量 附加/分离 数据库(sql语句)
这次公司要把MS SQL Server 2000 服务器上的数据库复制到新的服务器上面去,于是几百个数据库文件就交给我附加到新服务器上了 以前一直没接触过这方面的东西,于是果断谷歌了也百度了 找 ...
- 巧用FTP命令进行文件传输
巧用FTP进行文件传输 Internet作为现代信息高速公路已深入我们的生活,其中它所提供的电子邮件Web网站信息服务已被越来越多的人所熟知和使用.FTP作为Internet的功能之一,虽然没有像 ...
随机推荐
- SecureCRT使用总结
设置背景和编码
- Python中Mock的示例(转)
原文:https://segmentfault.com/a/1190000008753754 一些常用的mock示例 先简单定义个类,方便举例: class Person: def __init__( ...
- root用户远程登录Ubuntu
安装了一台Ubuntu的服务器,由于大家都需要使用,因此创建了多个用户,多台windows机器用过Putty远程登录,但是默认情况下创建的用户都是普通用户,也就是说很多root用户能够使用的权限以及命 ...
- Java与openssl的RSA算法
1.java生成的公私钥格式为 pkcs8(PKCS8EncodedKeySpec), 而openssl默认生成的公私钥格式为 pkcs1 2.java采用的rsa默认补齐方式是pkcs1 (RSA/ ...
- python的队列和栈
(一)队列和栈的区别 1.队列: 队列是一种特殊的线性表.其两头都有限制,插入只能在表的一端进行(只进不出),而删除只能在表的另一端进行(只出不进),允许删除的一端称为队尾(rear),允许插入的一端 ...
- sqlserver数据库查询,在数据类型不一致时容易出错
1. 如此句sql: select SysNo from User_MainInfo where Ouid=@Ouid 在 User_MainInfo表中Ouid是nvarchar类型,但当我们传入的 ...
- Vue 通过 Lodash 限制操作频率
<template> <div id="watch-example"> <p> Ask a yes/no question: <input ...
- composer错误提示Cloning failed using an ssh key for authentication的解决方法
早上ytkah在测试laravel用composer安装一些插件时出现了一些错误,提示如下,是github的ssh密匙认证错误,提示要重新生成token,然后保存在/root/.config/comp ...
- 20170803 Airflow自带的API进行GET 和POST动作部分内容
--1 首先你要有安装好的Airflow 环境并且在配置文件中有启用API 属性 --2 就是GET 和POST 方法的调用了 这里说一下,由于Airflow在网络上的资料比较少,可以从GETHUB中 ...
- Tomcat7目录结构详解
1.bin:该目录下存放的是二进制可执行文件,如果是安装版,那么这个目录下会有两个exe文件:tomcat6.exe.tomcat6w.exe,前者是在控制台下启动Tomcat,后者是弹出UGI窗口启 ...