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

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

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

    JAVA

    人生若只如初見,何事秋風悲畫扇。

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      50 隨筆 :: 25 文章 :: 157 評論 :: 0 Trackbacks

    對于一些常量我們經常放到property屬性文件中.
    今天在對其的存取過程中遇到了些問題:
    1:取的時候掉了內容
    2:取出后出現亂碼

    首先,我們的property文件大約如下:

    #友情鏈接
    news.link.inner.href?= http:
    // www.baidu.com, http://www.baidu.com , http://www.baidu.com
    new .link.inner.title? = 百度1,百度2,百度3


    1:取的時候掉了內容的解決:
    當然我這個文件有些特殊,主要是針對跳轉下拉菜單的數據設計(用戶在日后擴展數據的時候只需在后面直接添加,但必須以","號分開).
    在開始我以如下方法來取:

    private ? void ?initiallink()
    ????
    {
    ????????String?innerlinkstr?
    = ? null ;
    ????????String?innertitlestr?
    = ? null ;
    ????????String?outerlinkstr?
    = ? null ;
    ????????String?outertitlestr?
    = ? null ;
    ????????
    ????????StringTokenizer?innerlink?
    = ? null ;
    ????????StringTokenizer?innertitle?
    = ? null ;
    ????????StringTokenizer?outerlink?
    = ? null ;
    ????????StringTokenizer?outertitle?
    = ? null ;
    ????????
    ????????InputStream?in?
    = ? this .getClass().getResourceAsStream( " /conf/netedu.properties " );
    ????????
    try ? {
    ????????????
    try ? {
    ????????????????Properties?props?
    = ? new ?Properties();
    ????????????????props.load(in);
    ????????????????innerlinkstr?
    = ?props.getProperty( " news.link.inner.href " );
    ????????????????innertitlestr?
    = ?props.getProperty( " new.link.inner.title " );
    ????????????????outerlinkstr?
    = ?props.getProperty( " news.link.outer.href " );
    ????????????????outertitlestr?
    = ?props.getProperty( " new.link.outer.title " );
    ????????????????
    ????????????????innerlink?
    = ? new ?StringTokenizer(innerlinkstr, " , " );
    ????????????????innertitle?
    = ? new ?StringTokenizer(innertitlestr, " , " );
    ????????????????outerlink?
    = ? new ?StringTokenizer(outerlinkstr, " , " );
    ????????????????outertitle?
    = ? new ?StringTokenizer(outertitlestr, " , " );
    ????????????????
    ????????????????innermap
    = ? this .getlinks(innertitle,innerlink);
    ????????????????outermap?
    = ? this .getlinks(outertitle,outerlink);
    ????????????????
    ????????????}

    ????????????
    finally ? {
    ????????????????in.close();
    ????????????}

    ????????}

    ????????
    catch ?(Exception?ex)? {
    ????????????log.debug(
    " Error?to?read?property?in?/conf/netedu.properties?file " );
    ????????}

    ????}

    getLinks的方法如下:

    /**
    ?????*?
    @param ?titleargs?存放鏈接名稱的StringTokenizer
    ?????*?
    @param ?linkargs?存放鏈接地址的StringTokenizer
    ?????*?return?hashmap(title,link)
    ?????*?兩個參數應該有相同的長度
    ?????
    */

    ????
    private ?HashMap?getlinks(StringTokenizer?titles,?StringTokenizer?links)
    ????
    {
    ????????HashMap?results?
    = ? new ?HashMap();
    ????????
    ????????
    for ( int ?i = 0 ;i < titles.countTokens();i ++ )
    ????????????results.put((String)titles.nextElement(),(String)links.nextElement());
    ????????
    return ?results;
    ????}

    但到JSP顯示的時候得到的results的長度為2,也就是只取出了文件中的百度1,百度2(亂碼解決后才知道是這二個啦).在Eclipse中調試的時候發在getLinks方法中的for循環確實少執行了次!為什么?(搞不懂!郁悶了半天),不得不將此方法的代碼加長些(真受不了)

    /**
    ?????*?
    @param ?titleargs?存放鏈接名稱的StringTokenizer
    ?????*?
    @param ?linkargs?存放鏈接地址的StringTokenizer
    ?????*?return?hashmap(title,link)
    ?????*?兩個參數應該有相同的長度
    ?????
    */

    ????
    private ?HashMap?getlinks(StringTokenizer?titles,?StringTokenizer?links)
    ????
    {
    ????????HashMap?results?
    = ? new ?HashMap();
    ????????
    int ?len? = ?titles.countTokens();
    ????????String[]?temp1?
    = ? new ?String[len];
    ????????String[]?temp2?
    = ? new ?String[len];
    ????????????
    ????????
    for ( int ?i = 0 ;i < len;i ++ )
    ????????
    {
    ????????????temp1[i]?
    = ?(String)titles.nextElement();
    ????????????temp2[i]?
    = ?(String)links.nextElement();
    ????????}

    ????????
    ????????
    for ( int ?i = 0 ;i < len;i ++ )
    ????????
    {
    ????????????results.put(temp1[i],temp2[i]);
    ????????}

    ????????
    ????????
    return ?results;
    ????}

    這簡直一樣的處理啊?為什么結果會不同呢?

    2:亂碼處理
    亂碼其實簡單,只是開始的時候沒注意罷了.我們的機器編碼應該是GBK方式的,而在JVM程序中讀取Property文件的時候使用的是Unicode編碼方式,(我的這些處理過程也沒對編碼文件請求進行過濾),所以我們可以對其進行對應的編碼.
    我是利用了JDK自帶的native2ascii.exe工具.
    通過--encoding 來指定其編碼方式
    native2ascii -encoding GBK sourcefilename? destfilename?
    這樣你在
    InputStream?in?=?this.getClass().getResourceAsStream("/conf/netedu.properties");
    語句中用到的/conf/netedu.properties文件就是destfilename?來代替就OK了

    只是這樣你看到的可能是如下的一些代碼:

    #\u5385\u5185\u94fe\u63a5 ----- \u7528,\u9694\u5f00
    news.link.inner.href?http:
    // www.baidu.com, http://www.baidu.com , http://www.baidu.com
    new .link.inner.title?\u767e\u5ea61,\u767e\u5ea62,\u767e\u5ea63


    當然你不可能對著一大堆的16進制看吧,所以可以通過 -reverse 來解碼.
    native2ascii -reverse? sourcefilename? destfilename?

    本人覺得對于大量文本的處理,比如說整個項目的國際化,這樣可以通過對整個文件編碼來處理,但若只是為了一個下拉框,就顯得有些大材小用了(再說對用戶來說,他們也得多一步去執行項目里的腳本代碼).所以我們可以在疊代標題(這些就是"百度")StringTokenizer的時候對其重新編碼.這時可用將getLinks()方法中的

    ? for ( int ?i = 0 ;i < len;i ++ )
    ????????
    {
    ????????????temp1[i]?
    = ?(String)titles.nextElement();
    ????????????temp2[i]?
    = ?(String)links.nextElement();
    ????????}

    改成

    for ( int ?i = 0 ;i < len;i ++ )
    ????????
    {
    ????????????String?s?
    = ?(String)titles.nextElement();
    ????????????
    try ? {
    ????????????????temp1[i]?
    = ? new ?String(s.getBytes( " ISO-8859-1 " ), " GBK " );
    ????????????}
    ? catch ?(UnsupportedEncodingException?e)? {
    ????????????????e.printStackTrace();
    ????????????}

    ????????????temp2[i]?
    = ?(String)links.nextElement();
    ????????}

    注意:"ISO-8859-1"與"GBK"對應的分別是源編碼與目標編碼方式.

    關于native2ascii的詳細用法,可以參考相關文檔,as this:
    native2ascii?-?Native-to-ASCII?Converter
    Converts?a?file?with?native-encoded?characters?(characters?which?are?non-Latin?1?and?non-Unicode)?to?one?with?Unicode-encoded?characters.?
    SYNOPSIS
    native2ascii?[options]?[inputfile?[outputfile]]

    DESCRIPTION
    The?Java?compiler?and?other?Java?tools?can?only?process?files?which?contain?Latin-1?and/or?Unicode-encoded?(\udddd?notation)?characters.?native2ascii?converts?files?which?contain?other?character?encodings?into?files?containing?Latin-1?and/or?Unicode-encoded?charaters.?
    If?outputfile?is?omitted,?standard?output?is?used?for?output.?If,?in?addition,?inputfile?is?omitted,?standard?input?is?used?for?input.?

    OPTIONS
    -reverse?
    Perform?the?reverse?operation:?convert?a?file?with?Latin-1?and/or?Unicode?encoded?characters?to?one?with?native-encoded?characters.?


    -encoding?encoding_name?
    Specify?the?encoding?name?which?is?used?by?the?conversion?procedure.?The?default?encoding?is?taken?from?System?property?file.encoding.?The?encoding_name?string?must?be?a?string?taken?from?the?first?column?of?the?table?below.?


    -------------------------------------------------------------

    Converter????????Description
    Class
    -------------------------------------------------------------

    8859_1???????????ISO?8859-1
    8859_2???????????ISO?8859-2
    8859_3???????????ISO?8859-3
    8859_4???????????ISO?8859-4
    8859_5???????????ISO?8859-5
    8859_6???????????ISO?8859-6
    8859_7???????????ISO?8859-7
    8859_8???????????ISO?8859-8
    8859_9???????????ISO?8859-9
    Big5?????????????Big5,?Traditional?Chinese
    CNS11643?????????CNS?11643,?Traditional?Chinese
    Cp037????????????USA,?Canada(Bilingual,?French),?Netherlands,
    ???????????????????????????????Portugal,?Brazil,?Australia
    Cp1006???????????IBM?AIX?Pakistan?(Urdu)
    Cp1025???????????IBM?Multilingual?Cyrillic:?Bulgaria,?Bosnia,
    ???????????????????????????????Herzegovinia,?Macedonia(FYR)
    Cp1026???????????IBM?Latin-5,?Turkey
    Cp1046???????????IBM?Open?Edition?US?EBCDIC
    Cp1097???????????IBM?Iran(Farsi)/Persian
    Cp1098???????????IBM?Iran(Farsi)/Persian?(PC)
    Cp1112???????????IBM?Latvia,?Lithuania
    Cp1122???????????IBM?Estonia
    Cp1123???????????IBM?Ukraine
    Cp1124???????????IBM?AIX?Ukraine
    Cp1125???????????IBM?Ukraine?(PC)
    Cp1250???????????Windows?Eastern?European
    Cp1251???????????Windows?Cyrillic
    Cp1252???????????Windows?Latin-1
    Cp1253???????????Windows?Greek
    Cp1254???????????Windows?Turkish
    Cp1255???????????Windows?Hebrew
    Cp1256???????????Windows?Arabic
    Cp1257???????????Windows?Baltic
    Cp1258???????????Windows?Vietnamese
    Cp1381???????????IBM?OS/2,?DOS?People's?Republic?of?China?(PRC)
    Cp1383???????????IBM?AIX?People's?Republic?of?China?(PRC)
    Cp273????????????IBM?Austria,?Germany
    Cp277????????????IBM?Denmark,?Norway
    Cp278????????????IBM?Finland,?Sweden
    Cp280????????????IBM?Italy
    Cp284????????????IBM?Catalan/Spain,?Spanish?Latin?America
    Cp285????????????IBM?United?Kingdom,?Ireland
    Cp297????????????IBM?France
    Cp33722??????????IBM-eucJP?-?Japanese?(superset?of?5050)
    Cp420????????????IBM?Arabic
    Cp424????????????IBM?Hebrew
    Cp437????????????MS-DOS?United?States,?Australia,?New?Zealand,
    ???????????????????????????????South?Africa
    Cp500????????????EBCDIC?500V1
    Cp737????????????PC?Greek
    Cp775????????????PC?Baltic
    Cp838????????????IBM?Thailand?extended?SBCS
    Cp850????????????MS-DOS?Latin-1
    Cp852????????????MS-DOS?Latin-2
    Cp855????????????IBM?Cyrillic
    Cp857????????????IBM?Turkish
    Cp860????????????MS-DOS?Portuguese
    Cp861????????????MS-DOS?Icelandic
    Cp862????????????PC?Hebrew
    Cp863????????????MS-DOS?Canadian?French
    Cp864????????????PC?Arabic
    Cp865????????????MS-DOS?Nordic
    Cp866????????????MS-DOS?Russian
    Cp868????????????MS-DOS?Pakistan
    Cp869????????????IBM?Modern?Greek
    Cp870????????????IBM?Multilingual?Latin-2
    Cp871????????????IBM?Iceland
    Cp874????????????IBM?Thai
    Cp875????????????IBM?Greek
    Cp918????????????IBM?Pakistan(Urdu)
    Cp921????????????IBM?Latvia,?Lithuania?(AIX,?DOS)
    Cp922????????????IBM?Estonia?(AIX,?DOS)
    Cp930????????????Japanese?Katakana-Kanji?mixed?with?4370?UDC,
    ???????????????????????????????superset?of?5026
    Cp933????????????Korean?Mixed?with?1880?UDC,?superset?of?5029
    Cp935????????????Simplified?Chinese?Host?mixed?with?1880?UDC,
    ???????????????????????????????superset?of?5031
    Cp937????????????Traditional?Chinese?Host?miexed?with?6204?UDC,
    ?????????????????????????&n0

    posted on 2006-03-11 20:17 Jkallen 閱讀(2103) 評論(1)  編輯  收藏 所屬分類: JEE學習

    評論

    # re: 操作property文件 2006-11-06 12:13 電腦教程
    學習ing..^_^真是高手阿!!  回復  更多評論
      

    主站蜘蛛池模板: 精品无码一级毛片免费视频观看| 亚洲激情校园春色| 亚洲JIZZJIZZ妇女| 狼友av永久网站免费观看| 亚洲无人区码一二三码区别图片 | 亚洲AV无码专区亚洲AV桃| 国产又黄又爽又猛免费app| 亚洲 欧洲 视频 伦小说| 精品久久久久久久久免费影院| 亚洲AV成人片色在线观看| 国产情侣久久久久aⅴ免费 | 国产啪精品视频网免费| 亚洲精品午夜视频| 四虎永久在线精品免费网址 | 国产亚洲成人久久| a级毛片黄免费a级毛片| 亚洲AV日韩AV鸥美在线观看| 久爱免费观看在线网站| 亚洲欧洲自拍拍偷午夜色| 毛片免费在线观看网站| www亚洲精品久久久乳| 亚洲五月丁香综合视频| 成年在线网站免费观看无广告| 亚洲精品av无码喷奶水糖心| 亚洲福利精品一区二区三区| 天黑黑影院在线观看视频高清免费| 亚洲AV成人精品网站在线播放| 在线观看AV片永久免费| 国产精品亚洲专区无码WEB| 国产av无码专区亚洲国产精品| 花蝴蝶免费视频在线观看高清版| 亚洲理论在线观看| 国产乱人免费视频| 免费h视频在线观看| 亚洲成A人片在线播放器| 免费国产在线观看| 亚洲国产欧洲综合997久久| 亚洲国产人成精品| 最近最好最新2019中文字幕免费| 免费a级毛片无码a∨性按摩| 国产福利免费视频|