1. 程式人生 > >Native2Ascii文件轉換 -- 待完善

Native2Ascii文件轉換 -- 待完善

ever tst code argument nbsp path pac row bsp

摘自:https://www.oschina.net/code/snippet_87799_1612

Native2Ascii文件轉換 -- 待完善

 1 package com.xxx.xxx.Util;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.FileOutputStream;
 8 import java.io.IOException;
9 import java.io.InputStreamReader; 10 import java.io.OutputStreamWriter; 11 12 /** 13 * 類、接口等說明 14 * 15 * @Date 16 * @version v1.0 17 * @author    18 */ 19 public class ConvertFileNative2ASCIIUtil { 20 21 public static boolean native2Ascii(String srcFileName, String srcFilecharsetName, String dstFileName,
22 String dstFilecharsetName) throws IOException { 23 24 File srcFileNameFile = new File(srcFileName); 25 26 if (!srcFileNameFile.exists()) { 27 throw new IOException(" File(" + srcFileName + ") Parameter does not reference a file that exists"); 28 } else
if (!srcFileNameFile.isFile()) { 29 throw new IOException("File(" + srcFileName + ") Parameter exists, but does not reference a file"); 30 } else if (!srcFileNameFile.canRead()) { 31 throw new IOException("File(" + srcFileName + ") exists and is a file, but cannot be read."); 32 } else { 33 String content = readFile(srcFileName, srcFilecharsetName); 34 String ascii = Native2ASCIIUtil.native2Ascii(content); 35 writeFile(dstFileName, ascii, dstFilecharsetName); 36 } 37 38 return true; 39 } 40 41 public static boolean ascii2Native(String srcFileName, String srcFilecharsetName, String dstFileName, 42 String dstFilecharsetName) throws IOException { 43 44 File srcFileNameFile = new File(srcFileName); 45 46 if (!srcFileNameFile.exists()) { 47 throw new IOException(" File(" + srcFileName + ") Parameter does not reference a file that exists"); 48 } else if (!srcFileNameFile.isFile()) { 49 throw new IOException("File(" + srcFileName + ") Parameter exists, but does not reference a file"); 50 } else if (!srcFileNameFile.canRead()) { 51 throw new IOException("File(" + srcFileName + ") exists and is a file, but cannot be read."); 52 } else { 53 String content = readFile(srcFileName, srcFilecharsetName); 54 String nativeString = Native2ASCIIUtil.ascii2Native(content); 55 writeFile(dstFileName, nativeString, dstFilecharsetName); 56 } 57 58 return true; 59 } 60 61 public static void writeFile(String path, String content, String encoding) throws IOException { 62 File file = new File(path); 63 file.delete(); 64 file.createNewFile(); 65 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding)); 66 writer.write(content); 67 writer.close(); 68 } 69 70 public static String readFile(String path, String encoding) throws IOException { 71 String content = ""; 72 File file = new File(path); 73 BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding)); 74 String line = null; 75 while ((line = reader.readLine()) != null) { 76 content += line + "\n"; 77 } 78 reader.close(); 79 return content; 80 } 81 }

 1 package com.xxx.xxx.Util;
 2 
 3 /**
 4  * 類、接口等說明
 5  *
 6  * @Date 
 7  * @version v1.0
 8  * @author 
 9  */
10 public class Native2ASCIIUtil {
11 
12     /** 
13      * prefix of ascii string of native character 
14      */
15     private static String PREFIX = "\\u";
16 
17     /** 
18      * Native to ascii string. It‘s same as execut native2ascii.exe. 
19      * @param str native string 
20      * @return ascii string 
21      */
22     public static String native2Ascii(String str) {
23         char[] chars = str.toCharArray();
24         StringBuilder sb = new StringBuilder();
25         for (int i = 0; i < chars.length; i++) {
26             sb.append(char2Ascii(chars[i]));
27         }
28         return sb.toString();
29     }
30 
31     /** 
32      * Native character to ascii string. 
33      * @param c native character 
34      * @return ascii string 
35      */
36     private static String char2Ascii(char c) {
37         if (c > 255) {
38             StringBuilder sb = new StringBuilder();
39             sb.append(PREFIX);
40             int code = (c >> 8);
41             String tmp = Integer.toHexString(code);
42             if (tmp.length() == 1) {
43                 sb.append("0");
44             }
45             sb.append(tmp);
46             code = (c & 0xFF);
47             tmp = Integer.toHexString(code);
48             if (tmp.length() == 1) {
49                 sb.append("0");
50             }
51             sb.append(tmp);
52             return sb.toString();
53         } else {
54             return Character.toString(c);
55         }
56     }
57 
58     /** 
59      * Ascii to native string. It‘s same as execut native2ascii.exe -reverse. 
60      * @param str ascii string 
61      * @return native string 
62      */
63     public static String ascii2Native(String str) {
64         StringBuilder sb = new StringBuilder();
65         int begin = 0;
66         int index = str.indexOf(PREFIX);
67         while (index != -1) {
68             sb.append(str.substring(begin, index));
69             sb.append(ascii2Char(str.substring(index, index + 6)));
70             begin = index + 6;
71             index = str.indexOf(PREFIX, begin);
72         }
73         sb.append(str.substring(begin));
74         return sb.toString();
75     }
76 
77     /** 
78      * Ascii to native character. 
79      * @param str ascii string 
80      * @return native character 
81      */
82     private static char ascii2Char(String str) {
83         if (str.length() != 6) {
84             throw new IllegalArgumentException("Ascii string of a native character must be 6 character.");
85         }
86         if (!PREFIX.equals(str.substring(0, 2))) {
87             throw new IllegalArgumentException("Ascii string of a native character must start with \"\\u\".");
88         }
89         String tmp = str.substring(2, 4);
90         int code = Integer.parseInt(tmp, 16) << 8;
91         tmp = str.substring(4, 6);
92         code += Integer.parseInt(tmp, 16);
93         return (char) code;
94     }
95 }

Native2Ascii文件轉換 -- 待完善