1 package com;
2 import java.io.BufferedReader;
3 import java.io.BufferedWriter;
4 import java.io.File;
5 import java.io.FileInputStream;
6 import java.io.FileWriter;
7 import java.io.IOException;
8 import java.io.InputStreamReader;
9
10 import javax.swing.JFileChooser;
11 import javax.swing.JOptionPane;
12
13
14 public class supZhtool_1 {
15
16 public static void main(String[] args) throws IOException {
17
18 String path ="";//源文件路径,不包括文件名称
19 String pathzh = "";//转换unicode编码后文件输出路径
20 String pathinsert = "";//筛选出insert语句后的文件输出路径
21 String pathSource = "";//源文件路径,包含文件名称的源文件路径
22
23 JFileChooser fDialog = new JFileChooser();
24
25 fDialog.setDialogTitle("请选择需要转换的文件");
26
27 int returnVal = fDialog.showOpenDialog(null);//弹出文件选择框
28
29 if(JFileChooser.APPROVE_OPTION == returnVal){
30 pathSource = fDialog.getSelectedFile().toString();//获取文件路径并赋值给源文件路径
31
32 //判断源文件路径是否正确
33 if(!"script".equals(pathSource.substring(pathSource.length()-6,pathSource.length()))){
34 JOptionPane.showMessageDialog(null, "请检查您选择的文件是否正确!");
35 return;
36 }
37
38 String path_temp1[] = pathSource.split("\\\\");
39
40 //组装文件地址,不包含文件名称的地址
41 for (int i = 0; i < path_temp1.length-1; i++) {
42 path = path + path_temp1[i]+"\\\\";
43 }
44 //定义转换unicode编码之后的文件名称和地址
45 pathzh = path +"blazezh.script";
46 //定义insert语句文件的输入地址,和文件名称
47 pathinsert = path +"01_SR0001_BTDS2DATA_DML_BTDS.sql";
48
49 }
50
51
52 unicodeChange(pathSource,pathzh);
53
54 pickInsertSql(pathzh,pathinsert);
55
56 JOptionPane.showMessageDialog(null, "转换完毕!");
57
58 }
59
60 /**
61 * 删除转换期间产生的的无用的文件
62 */
63 public static void deleFile(){
64 String pathG = System.getProperty("user.dir");
65 File file = new File(pathG+"\\blazezh.script");
66 if (file.isFile() && file.exists()) {
67 file.delete();
68 }
69 }
70
71 /**
72 *
73 * 挑选出Insert语句,并写入到文件中
74 *
75 */
76 public static void pickInsertSql(String pathzh,String pathinsert) throws IOException{
77
78
79 File write = new File(pathinsert);
80
81 File file = null;
82 BufferedReader br = null;
83 BufferedWriter bw = new BufferedWriter(new FileWriter(write));
84
85 file = new File(pathzh);
86 br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
87 StringBuilder sb = new StringBuilder();
88 String length = "";
89 while ((length = br.readLine()) != null) {
90 sb.append(length);
91
92 String sql = sb.toString();
93 sql = datestampChange(sql);
94 sql = dateChange(sql);
95 if("INSERT".equals(sql.substring(0,6))){
96 String release_info = sql.substring(0,24);
97 if("INSERT INTO RELEASE_INFO".equals(release_info)){
98
99 String release_info_sub = sql.substring(0,sql.length()-1);
100 release_info_sub = release_info_sub +","+"'PingAnProject')";
101
102 String []temp1 = release_info_sub.split(",");
103 for (int i = 0; i < temp1.length; i++) {
104 if(i==2){
105 temp1[2] = "'********'";
106 }
107 }
108
109 String insert = "";
110
111 for (int i = 0; i < temp1.length; i++) {
112
113 if(i<temp1.length-1){
114 insert = insert + temp1[i]+",";
115 }else{
116 insert = insert + temp1[i];
117 }
118 }
119 String []temp2 = insert.split(",");
120 if(temp2.length<8){
121 bw.write("--"+insert.toString() +";"+ "\r\n");
122 }else{
123 bw.write(insert.toString() +";"+ "\r\n");
124 }
125 }else{
126 bw.write(sql.toString() +";"+ "\r\n");
127 }
128 bw.flush();
129 sb = new StringBuilder();
130 }
131 sb = new StringBuilder();
132 }
133
134 }
135
136 /**
137 *
138 * 日期转换工具,类型是yyyy-mm-dd类型
139 *
140 */
141
142 public static String dateChange(String temp){
143
144 String temp2="";
145 String [] temp1 = temp.split(",");
146
147 for (int i = 0; i < temp1.length; i++) {
148 String dateFlag = temp1[i].toString();
149 String[] datesub = dateFlag.split("-");
150 if(datesub.length>2&&dateFlag.length()<13){
151 dateFlag = dateFlag.substring(1,11);
152 temp1[i] = "to_date('"+dateFlag+"','yyyy-mm-dd')";
153 }
154 }
155
156 for (int i = 0; i < temp1.length; i++) {
157 if(i<temp1.length-1){
158 temp2 = temp2 + temp1[i]+",";
159 }else{
160 temp2 = temp2 + temp1[i];
161 }
162 }
163
164 return temp2;
165 }
166
167
168 /**
169 *
170 * 日期转换工具,类型是yyyy-mm-dd hh24:mi:ss.ff类型
171 *
172 */
173 public static String datestampChange(String temp){
174
175 String temp2="";
176 String [] temp1 = temp.split(",");
177
178 for (int i = 0; i < temp1.length; i++) {
179 String dateFlag = temp1[i].toString();
180 if(dateFlag.length()>30){
181 dateFlag = dateFlag.substring(1,30);
182 if("000".equals(dateFlag.substring(dateFlag.length()-3, dateFlag.length()))){
183 String user_favorite = temp.substring(0,25);
184 if("INSERT INTO USER_FAVORITE".equals(user_favorite)){
185 temp1[i] = "to_timestamp('"+dateFlag+"','yyyy-mm-dd hh24:mi:ss.ff'))";
186 }else{
187 temp1[i] = "to_timestamp('"+dateFlag+"','yyyy-mm-dd hh24:mi:ss.ff')";
188 }
189
190 }
191 }
192 }
193
194 for (int i = 0; i < temp1.length; i++) {
195 if(i<temp1.length-1){
196 temp2 = temp2 + temp1[i]+",";
197 }else{
198 temp2 = temp2 + temp1[i];
199 }
200 }
201 return temp2;
202 }
203
204
205 public static void unicodeChange(String path,String pathzh) throws IOException{
206
207 File write = new File(pathzh);
208
209 File file = null;
210 BufferedReader br = null;
211 BufferedWriter bw = new BufferedWriter(new FileWriter(write));
212 file = new File(path);
213 br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "gbk"));
214 StringBuilder sb = new StringBuilder();
215 String length = "";
216 while ((length = br.readLine()) != null) {
217 sb.append(length);
218 bw.write(ascii2Native(sb.toString()) + "\r\n");
219 bw.flush();
220 sb = new StringBuilder();
221 }
222 }
223
224 public static String ascii2Native(String str) {
225 StringBuilder sb = new StringBuilder();
226 int begin = 0;
227 int index = str.indexOf("\\u");
228 while (index != -1) {
229 sb.append(str.substring(begin, index));
230 sb.append(ascii2Char(str.substring(index, index + 6)));
231 begin = index + 6;
232 index = str.indexOf("\\u", begin);
233 }
234 sb.append(str.substring(begin));
235 return sb.toString();
236 }
237
238 private static char ascii2Char(String str) {
239 if (str.length() != 6) {
240 throw new IllegalArgumentException("长度不足6位");
241 }
242 if (!"\\u".equals(str.substring(0, 2))) {
243 throw new IllegalArgumentException("字符必须以 \"\\u\"开头.");
244 }
245 String tmp = str.substring(2, 4);
246 int code = Integer.parseInt(tmp, 16) << 8;
247 tmp = str.substring(4, 6);
248 code += Integer.parseInt(tmp, 16);
249 return (char) code;
250 }
251
252 }