<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JAVA涂鴉
    關于JAVA的點點滴滴
    posts - 50,  comments - 689,  trackbacks - 0
    方法一: 編輯玩了后在dos在用jdk自帶的native2ascii命令把資源文件轉換一下就可以了

    命令為native2ascii 資源文件名 新的資源文件名
    執行完后便會在新的資源文件中看見中文全變成/u...什么了樣子~~這樣就可以了

    把舊的刪掉 新的資源文件改回舊的資源文件名

    方法二:使用插件PropertiesEdit,下載地址:
    http://propedit.sourceforge.jp/eclipse/updates/

    方法三: 修改properties的源代碼.主要是修改saveConvert()方法和loadConvert()方法,大家可以自己建立一個類,然后把properties類的代碼拷貝過來,然后修改這兩個方法就可以了。
    或者直接將我下面的代碼拷貝過去就可以了。

    package xiaotang.util;
    import java.util.*;
    package xiaotang.util;

    import java.io.IOException;
    import java.io.PrintStream;
    import java.io.PrintWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.BufferedReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.BufferedWriter;
    import java.util.Hashtable;
    import java.util.*;
    /**
    *
    * <p>Title: </p>
    *
    * <p>Description: </p>
    *
    * <p>Copyright: Copyright (c) 2005</p>
    *
    * <p>Company: 哈爾濱商業大學</p>
    *
    * @author Onlyfor_love
    * @version 1.0
    */

    public class PropertiesExt extends Hashtable {

    private static final long serialVersionUID = 4112578634029874840L;
    protected PropertiesExt defaults;
    public PropertiesExt() {
    this(null);
    }
    public PropertiesExt(PropertiesExt defaults) {
    this.defaults = defaults;
    }
    public synchronized Object setProperty(String key, String value) {
    return put(key, value);
    }

    private static final String keyValueSeparators = "=: \t\r\n\f";

    private static final String strictKeyValueSeparators = "=:";

    private static final String specialSaveChars = "=: \t\r\n\f#!";

    private static final String whiteSpaceChars = " \t\r\n\f";

    public synchronized void load(InputStream inStream) throws IOException {
    //把所有的8859-1全部換成GBK
    BufferedReader in = new BufferedReader(new InputStreamReader(inStream, "GBK"));
    while (true) {
    // Get next line
    String line = in.readLine();
    if (line == null)
    return;

    if (line.length() > 0) {

    // Find start of key
    int len = line.length();
    int keyStart;
    for (keyStart=0; keyStart<len; keyStart++)
    if (whiteSpaceChars.indexOf(line.charAt(keyStart)) == -1)
    break;

    // Blank lines are ignored
    if (keyStart == len)
    continue;

    // Continue lines that end in slashes if they are not comments
    char firstChar = line.charAt(keyStart);
    if ((firstChar != '#') && (firstChar != '!')) {
    while (continueLine(line)) {
    String nextLine = in.readLine();
    if (nextLine == null)
    nextLine = "";
    String loppedLine = line.substring(0, len-1);
    // Advance beyond whitespace on new line
    int startIndex;
    for (startIndex=0; startIndex<nextLine.length(); startIndex++)
    if (whiteSpaceChars.indexOf(nextLine.charAt(startIndex)) == -1)
    break;
    nextLine = nextLine.substring(startIndex,nextLine.length());
    line = new String(loppedLine+nextLine);
    len = line.length();
    }

    // Find separation between key and value
    int separatorIndex;
    for (separatorIndex=keyStart; separatorIndex<len; separatorIndex++) {
    char currentChar = line.charAt(separatorIndex);
    if (currentChar == '\\')
    separatorIndex++;
    else if (keyValueSeparators.indexOf(currentChar) != -1)
    break;
    }

    // Skip over whitespace after key if any
    int valueIndex;
    for (valueIndex=separatorIndex; valueIndex<len; valueIndex++)
    if (whiteSpaceChars.indexOf(line.charAt(valueIndex)) == -1)
    break;

    // Skip over one non whitespace key value separators if any
    if (valueIndex < len)
    if (strictKeyValueSeparators.indexOf(line.charAt(valueIndex)) != -1)
    valueIndex++;

    // Skip over white space after other separators if any
    while (valueIndex < len) {
    if (whiteSpaceChars.indexOf(line.charAt(valueIndex)) == -1)
    break;
    valueIndex++;
    }
    String key = line.substring(keyStart, separatorIndex);
    String value = (separatorIndex < len) ? line.substring(valueIndex, len) : "";

    // Convert then store key and value
    key = loadConvert(key);
    value = loadConvert(value);
    put(key, value);
    }
    }
    }
    }

    /*
    * Returns true if the given line is a line that must
    * be appended to the next line
    */
    private boolean continueLine(String line) {
    int slashCount = 0;
    int index = line.length() - 1;
    while ((index >= 0) && (line.charAt(index--) == '\\'))
    slashCount++;
    return (slashCount % 2 == 1);
    }

    /**
    *
    * <p>Title: </p>
    *
    * <p>Description: </p>
    *
    * <p>Copyright: Copyright (c) 2005</p>
    *
    * <p>Company: 哈爾濱商業大學</p>
    *
    * @author Onlyfor_love
    * @version 1.0
    */
    private String loadConvert(String theString) {
    //該功能主要是將存儲的key和value提取出來,因為存儲的中文在原來的properties類中被轉換成了別的編碼
    //存儲的中文在*.properties文件中以亂碼出現
    char aChar;
    int len = theString.length();
    StringBuffer outBuffer = new StringBuffer(len);
    //
    // for (int x=0; x<len; ) {
    // aChar = theString.charAt(x++);
    // if (aChar == '\\') {
    // aChar = theString.charAt(x++);
    // if (aChar == 'u') {
    // // Read the xxxx
    // int value=0;
    // for (int i=0; i<4; i++) {
    // aChar = theString.charAt(x++);
    // switch (aChar) {
    // case '0': case '1': case '2': case '3': case '4':
    // case '5': case '6': case '7': case '8': case '9':
    // value = (value << 4) + aChar - '0';
    // break;
    // case 'a': case 'b': case 'c':
    // case 'd': case 'e': case 'f':
    // value = (value << 4) + 10 + aChar - 'a';
    // break;
    // case 'A': case 'B': case 'C':
    // case 'D': case 'E': case 'F':
    // value = (value << 4) + 10 + aChar - 'A';
    // break;
    // default:
    // throw new IllegalArgumentException(
    // "Malformed \\uxxxx encoding.");
    // }
    // }
    // outBuffer.append((char)value);
    // } else {
    // if (aChar == 't') aChar = '\t';
    // else if (aChar == 'r') aChar = '\r';
    // else if (aChar == 'n') aChar = '\n';
    // else if (aChar == 'f') aChar = '\f';
    // outBuffer.append(aChar);
    // }
    // } else
    outBuffer.append(theString);
    // }
    return outBuffer.toString();
    }

    /**
    *
    * <p>Title: </p>
    *
    * <p>Description: </p>
    *
    * <p>Copyright: Copyright (c) 2005</p>
    *
    * <p>Company: 哈爾濱商業大學</p>
    *
    * @author Onlyfor_love
    * @version 1.0
    */

    private String saveConvert(String theString, boolean escapeSpace) {
    //該功能主要是將存儲key和value,因為中文的存儲在原來的properties類中被轉換成了別的編碼
    //存儲的中文在*.properties文件中以亂碼出現
    int len = theString.length();
    StringBuffer outBuffer = new StringBuffer(len*2);
    outBuffer.append(theString);

    // for(int x=0; x<len; x++) {
    // char aChar = theString.charAt(x);
    // switch(aChar) {
    // case ' ':
    // if (x == 0 || escapeSpace)
    // outBuffer.append('\\');
    //
    // outBuffer.append(' ');
    // break;
    // case '\\':outBuffer.append('\\'); outBuffer.append('\\');
    // break;
    // case '\t':outBuffer.append('\\'); outBuffer.append('t');
    // break;
    // case '\n':outBuffer.append('\\'); outBuffer.append('n');
    // break;
    // case '\r':outBuffer.append('\\'); outBuffer.append('r');
    // break;
    // case '\f':outBuffer.append('\\'); outBuffer.append('f');
    // break;
    // default:
    //
    // if ((aChar < 0x0020) || (aChar > 0x007e)) {
    // outBuffer.append('\\');
    // outBuffer.append('u');
    // outBuffer.append(toHex((aChar >> 12) & 0xF));
    // outBuffer.append(toHex((aChar >> 8) & 0xF));
    // outBuffer.append(toHex((aChar >> 4) & 0xF));
    // outBuffer.append(toHex( aChar & 0xF));
    // } else {
    // if (specialSaveChars.indexOf(aChar) != -1)
    // outBuffer.append('\\');
    // outBuffer.append(aChar);
    // }
    // }
    // }
    return outBuffer.toString();
    }

    /**
    * Calls the <code>store(OutputStream out, String header)</code> method
    * and suppresses IOExceptions that were thrown.
    *
    * @deprecated This method does not throw an IOException if an I/O error
    * occurs while saving the property list. As of the Java 2 platform v1.2, the preferred
    * way to save a properties list is via the <code>store(OutputStream out,
    * String header)</code> method.
    *
    * @param out an output stream.
    * @param header a description of the property list.
    * @exception ClassCastException if this <code>Properties</code> object
    * contains any keys or values that are not <code>Strings</code>.
    */
    public synchronized void save(OutputStream out, String header) {
    try {
    store(out, header);
    } catch (IOException e) {
    }
    }

    public synchronized void store(OutputStream out, String header)
    throws IOException
    {
    BufferedWriter awriter;
    awriter = new BufferedWriter(new OutputStreamWriter(out, "GBK"));
    if (header != null)
    writeln(awriter, "#" + header);
    writeln(awriter, "#" + new Date().toString());
    for (Enumeration e = keys(); e.hasMoreElements();) {
    String key = (String)e.nextElement();
    String val = (String)get(key);
    key = saveConvert(key, false);

    /* No need to escape embedded and trailing spaces for value, hence
    * pass false to flag.
    */
    val = saveConvert(val, false);
    writeln(awriter, key + "=" + val);
    }
    awriter.flush();
    }

    private static void writeln(BufferedWriter bw, String s) throws IOException {
    bw.write(s);
    bw.newLine();
    }

    public String getProperty(String key) {
    Object oval = super.get(key);
    String sval = (oval instanceof String) ? (String)oval : null;
    return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
    }

    public String getProperty(String key, String defaultValue) {
    String val = getProperty(key);
    return (val == null) ? defaultValue : val;
    }

    public Enumeration propertyNames() {
    Hashtable h = new Hashtable();
    enumerate(h);
    return h.keys();
    }

    public void list(PrintStream out) {
    out.println("-- listing properties --");
    Hashtable h = new Hashtable();
    enumerate(h);
    for (Enumeration e = h.keys() ; e.hasMoreElements() ;) {
    String key = (String)e.nextElement();
    String val = (String)h.get(key);
    if (val.length() > 40) {
    val = val.substring(0, 37) + "...";
    }
    out.println(key + "=" + val);
    }
    }

    public void list(PrintWriter out) {
    out.println("-- listing properties --");
    Hashtable h = new Hashtable();
    enumerate(h);
    for (Enumeration e = h.keys() ; e.hasMoreElements() ;) {
    String key = (String)e.nextElement();
    String val = (String)h.get(key);
    if (val.length() > 40) {
    val = val.substring(0, 37) + "...";
    }
    out.println(key + "=" + val);
    }
    }

    private synchronized void enumerate(Hashtable h) {
    if (defaults != null) {
    defaults.enumerate(h);
    }
    for (Enumeration e = keys() ; e.hasMoreElements() ;) {
    String key = (String)e.nextElement();
    h.put(key, get(key));
    }
    }

    private static char toHex(int nibble) {
    return hexDigit[(nibble & 0xF)];
    }

    /** A table of hex digits */
    private static final char[] hexDigit = {
    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
    };
    }


    /////////////////////////////////////////////////////////////////
    然后寫一個常用的配置文件操作類:
    package xiaotang.util;
    import java.io.*;

    public class writeToProperty {
    private String fileName;
    private PropertiesExt prop = new PropertiesExt();
    private InputStream fileStream = null;
    private OutputStream outStream = null;
    /**
    *構造函數
    * @param fileName 文件名字,包含路徑
    */
    public writeToProperty(String fileName) {
    this.fileName = fileName;
    }

    //讀取文件,不存在則創建文件
    private void readFile() {
    try {
    File f = new File(fileName);
    fileStream = new FileInputStream(f);
    prop.load(fileStream);
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    finally {
    try {
    if (fileStream != null)
    fileStream.close();
    }
    catch (IOException ex) {
    ex.printStackTrace();
    }
    }

    }

    private void writeFile() {
    try {
    File f = new File(fileName);
    outStream = new FileOutputStream(f);
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    }

    /**
    * 返回指定key的vlaue
    * @param key
    * @return
    */
    public String getValue(String key) {
    readFile();
    if (key != null && !key.equals(""))
    return prop.getProperty(key);
    else
    return "";
    }

    /**
    *返回指定key的vlaue,如果key不存在則返回defaultValue值
    * @param key
    * @param defaultValue
    * @return
    */
    public String getValue(String key, String defaultValue) {
    if (key != null && !key.equals(""))
    return prop.getProperty(key, defaultValue);
    else
    return "";
    }

    /**
    * 設置對應key的數值,如果key存在的覆蓋value的數值,如果key不存則創建
    * @param key
    * @param value
    */
    public void setValue(String key, String value) {
    readFile();
    writeFile();
    prop.setProperty(key, value);
    try {
    prop.store(outStream, "GBK");
    }
    catch (IOException ex) {
    ex.printStackTrace();
    }
    finally {
    try {
    outStream.close();
    }
    catch (IOException ex1) {
    ex1.printStackTrace();
    }
    }
    }
    }
    ////////////////////////////////////////////////////////////
    接著寫一個測試類就可以了:
    package xiaotang.util;

    import xiaotang.util.PropertiesExt;
    import java.io.*;
    /**
    *
    * <p>Title: </p>
    *
    * <p>Description: </p>
    *
    * <p>Copyright: Copyright (c) 2005</p>
    *
    * <p>Company: 哈爾濱商業大學</p>
    *
    * @author Onlyfor_love
    * @version 1.0
    */
    public class PropertyFile {
    public static void main(String[] args) {
    writeToProperty wt = new writeToProperty("d:\\config1.properties");
    wt.setValue("一","我是誰?");
    wt.setValue("二","我是陳曉棠");
    String one = wt.getValue("一");
    String two = wt.getValue("二");
    System.out.println(one);
    System.out.println(two);
    }

    }
    回頭你再看看你的配置文件,中文依然是中文。
    posted on 2005-10-20 18:28 千山鳥飛絕 閱讀(2125) 評論(0)  編輯  收藏 所屬分類: eclipse
    正在閱讀:



    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(35)

    隨筆檔案

    文章分類

    文章檔案

    好友的blog

    我的其他blog

    老婆的Blog

    搜索

    •  

    積分與排名

    • 積分 - 775109
    • 排名 - 56

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲大尺码专区影院| 亚洲精品视频免费看| 污污免费在线观看| 久久精品国产亚洲精品2020| a毛片全部播放免费视频完整18| 亚洲欧洲中文日韩av乱码| 视频免费1区二区三区| 久久亚洲AV无码西西人体| 99精品全国免费观看视频..| 亚洲成av人片天堂网| 最近免费2019中文字幕大全| 亚洲精品在线电影| 久久不见久久见中文字幕免费 | 亚洲∧v久久久无码精品 | 国产亚洲精品美女| 亚洲成a人一区二区三区| 中文字幕免费人成乱码中国| 情人伊人久久综合亚洲| 67194国产精品免费观看| 亚洲www77777| 亚洲а∨天堂久久精品| 国偷自产一区二区免费视频| 亚洲国产精品久久网午夜| 在线视频免费国产成人| 毛片基地看看成人免费| 亚洲黄色在线视频| 在线看片人成视频免费无遮挡| 男人和女人高潮免费网站 | 在线看片免费不卡人成视频| 国产99久久亚洲综合精品| 亚洲女初尝黑人巨高清| 国产妇乱子伦视频免费| 美女被免费网站在线视频免费| 亚洲精品无码AV人在线播放 | 添bbb免费观看高清视频| 亚洲乱码中文字幕久久孕妇黑人 | 日韩免费福利视频| 日本在线免费观看| 久久亚洲AV成人无码国产最大| 久久久久久久综合日本亚洲 | 特黄特色的大片观看免费视频|