使用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的功能之一,虽然没有像 ...
随机推荐
- SQL instr()函数的格式
格式一:instr( string1, string2 ) / instr(源字符串, 目标字符串) 格式二:instr( string1, string2 [, start_positio ...
- 《linux 用户管理》- useradd/userdel/usermod/groupadd/who/w
一:概念 在 Linux 中,使用一个 32位整数 来记录每一个用户(USER ID 简单 UID),这意味着在 Linux 中,可以有 40亿 个不同的用户. 系统. 在 /etc/passwd ...
- elasticsearch最大的条件数设置
elasticsearch bool条件查询里面条件的数量是有限制的,比如terms里面相等的值的数量个数 添加: indices.query.bool.max_clause_count: 1000 ...
- spring根据name或者id获取实例
@Resource(name="beanname") private ClassType scheduler; 其中ClassType需要跟实例的类型对应上.
- shiro入门实例,基于ini配置
基于ini或者关系数据库的,其实都是一样的,重要的是思想. # ==================================================================== ...
- 自己写的运用bootstrap和angulajs框架写的demo
登录html: <body ng-app="mainapp"> <div class="container"> <div clas ...
- IDEA集成的 Thrift 插件进行 thrift 编译
IDEA集成的 Thrift 插件进行 thrift 编译 注意 1.thrift文件要放在source目录,才有compile选项 2.generator list的output path不用加包名 ...
- mysql数据具体操作
1.建表操作 前面提到的是简单的建表,这里需要提到一下外键. create table userinfo2( id int auto_increment primary key, name ), ge ...
- centos6下升级git版本的操作记录
编译go_ethereum的时候出现了错误 然后发现是自己的git没有升级成功 因为编译需要高版本的git版本 所以会编译不成功 之后执行 root@uatjenkins01 ~]# git - ...
- Mongodb 基础 数据导入导出和用户管理
数据导出 导出命令使用方式 mongoexport---->csv/json使用 参数: -d 库名 -c 表名 -f field1,field2....列名 -q 查询条件 -o 导出文件名 ...