使用原生Java代码生成可执行Jar包(二)

2014-11-24 02:08:35 · 作者: · 浏览: 5
ameTmp, file);
44 txtFiles.append(nameTmp + "\n");
45 //fileNames.put(nameTmp, nameTmp.endsWith(".class") nameTmp.substring(0, nameTmp.lastIndexOf('.')).replace('/', '.'):nameTmp);
46 if(nameTmp.endsWith(".class") && nameTmp.indexOf('$') == -1)
47 cobMainClass.addItem(nameTmp.substring(0, nameTmp.lastIndexOf('.')).replace('/', '.'));
48 itf.remove();
49 }
50 }
51 }
52 }
53 }
54 }
55
56 // 添加文件(非文件夹)到集合
57 private void addFileToList(File file, List fileArr) {
58 if(file.isDirectory())
59 for(File child : file.listFiles())
60 addFileToList(child, fileArr);
61 else
62 fileArr.add(file);
63 }
64
65 // 去除重复项
66 private void removeDuplicateItems(List fileArr) {
67 // 去重复项
68 Set directories = new HashSet<>();
69 Set files = new HashSet<>();
70 for(File file : fileArr)
71 if(file.isDirectory())
72 directories.add(file.getAbsolutePath());
73 else
74 files.add(file.getAbsolutePath());
75 //去包含项(先去文件夹再去文件应该更好)
76 String fpath,dpath;
77 for(Iterator itf = files.iterator(); itf.hasNext();) {
78 fpath = itf.next();
79 for(Iterator itd = directories.iterator(); itd.hasNext();) {
80 dpath = itd.next();
81 if(fpath.startsWith(dpath))
82 itf.remove();
83 }
84 }
85 String dpath1,dpath2;
86 Set directories1 = new HashSet<>(directories);
87 for(Iterator itd1 = directories.iterator(); itd1.hasNext();) {
88 dpath1 = itd1.next();
89 for(Iterator itd2 = directories1.iterator(); itd2.hasNext();) {
90 dpath2 = itd2.next();
91 if(dpath1.equals(dpath2))
92 continue;
93 else if(dpath2.startsWith(dpath1))
94 itd2.remove();
95 else if(dpath1.startsWith(dpath2))
96 itd1.remove();
97 }
98 }
99 directories.addAll(directories1);
100
101 fileArr.clear();
102 for(String file : files)
103 fileArr.add(new File(file));
104 for(String directory : directories)
105 fileArr.add(new File(directory));
106 }
复制代码
FrmMain_UI
  然后开始业务部分,首先是选择文件,我们允许用户选择多个文件和文件夹(甚至可以通过多次选择来选择不同盘符、路径下的文件和文件夹),在选择后可能有重复的地方或两次选择后有包含的项目,我们要去除。
  我们为“浏览”按钮事件添加处理,让用户选择文件并处理选中文件:
btnBrowser_event_handler
  “重选”按钮点击后清除已选项,逻辑就先不详细介绍了。
  然后是“确定”按钮,我们弹出文件保存框让用户选择保存位置,然后生成可执行的jar包:
1 @Override
2 public void actionPerformed(ActionEvent e) {
3 if(e.getSource() == btnBrowser) {
4 } else if(e.getSource() == btnCls) {
5 if(userSelectedFiles.size() == 0) return;
6 else if(JOptionPane.showConfirmDialog(this, "确定重选吗?将清除所有已选项!") == JOptionPane.OK_OPTION) {
7 userSelectedFiles.clear();
8 finalFiles.clear();
9 filePaths.clear();
10 cobMainClass.removeAllItems();
11 }
12 } else if(e.getSource() == btnConfirm) {
13 if(filePaths.s