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

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

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

    咖啡伴侶

    呆在上海
    posts - 163, comments - 156, trackbacks - 0, articles - 2

    URL問題 轉

    Posted on 2013-05-27 17:00 oathleo 閱讀(308) 評論(0)  編輯  收藏 所屬分類: Java

    Java路徑中的空格問題
    1、 URLTest.class.getResource("/").getPath();
        URLTest.class.getResource("/").getFile();
        URLTest.class.getClassLoader().getResource("").getPath();
        Thread.currentThread().getContextClassLoader().getResource("").getPath();等多種相似方式獲得的路徑,不能被FileReader()和FileWriter()直接應用,原因是URL對空格,特殊字符(%,#,[]等)和中文進行了編碼處理。如果文件中URLTest.class.getResource("/").getPath();必須以"/"開頭然后再加文件名,而URLTest.class.getClassLoader().getResource("").getPath();不用加"/"可以直接添加文件名。

    路徑中包含空格時,如果空格變為"%20"有如下處理方法:
    1)使用repaceAll("%20",' ')替換,但只能解決空格問題,如果路徑中包含其他特殊字符和中文就不能解決問題。
    2)使用URLDecoder.decode(str,"UTF-8")解碼,但是只能解決一部分,若路徑中含有+,也是不能解決的,原因是URL并不是完全用URLEncoder.encode(str,"UTF-8")編碼的,+號被解碼后,則變成空格。
    3)解決所有的問題,用URLTest.class.getClassLoader().getResource("").toURI().getPath();,但是需要處理URISyntaxException異常,比較麻煩一些。

    2、new URL();的參數可以為正確的URI,或者為URI格式的字符串;若字符串是非完整的URI格式,則創建失敗。java.net.URI返回的路徑中的空格以“空格”的形式出現方法為Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath();但是Thread.currentThread().getContextClassLoader().getResource("").toURI().toString();則會以“%20”的形式出現。java.net.URL返回的一切路徑中的空格都是以“%20”的形式出現。URL/URI返回的路徑分隔符都是“/”(控制臺輸出"/")。


    3、new File(String filePath);接受正確URI格式的參數和帶“空格”(非%20)的正確相對/絕對字符串路徑,否則即使給的路徑是正確的也會出現找不到文件的異常。File返回的路徑分隔符都為“\”(控制臺輸出"\"),對于存在的文件返回的路徑字符串,空格都以"空格"出現,而不存在的路徑new出的file,getPath()返回的路徑中的空格,仍是new File(String filePath)的參數中原有的形式,即若filePath中是空格的getPath()返回的仍是空格,是“%20”的仍是“%20”。File.toURI() 會將file的路徑名中的“空格”轉化為“%20”,然后在路徑前加protocol:"file:/",而File.toURL()只會在file路徑 前簡單的加上protocol:"file:/",而不會將“空格”轉化為“%20”,原來的無論是“空格”還是“%20”都只會原樣保留。


    實際使用中遇到的問題總結如下:
    1、相對路徑(即相對于當前用戶目錄的相對路徑)均可通過以下方式獲得(不論是一般的java項目還是web項目) String relativelyPath=System.getProperty("user.dir"); 對于一般的java項目中的文件是相對于項目的根目錄,而對于web項目中的文件路徑,可能是服務器的某個路徑,同時不同的web服務器也不同 (tomcat是相對于 tomcat安裝目錄\bin)。為此,個人認為,在web項目中,最好不要使用“相對于當前用戶目錄的相對路徑”。然而默認情況下,java.io 包中的類總是根據當前用戶目錄來分析相對路徑名。此目錄由系統屬性 user.dir 指定,通常是 Java 虛擬機的調用目錄。這就是說,在使用java.io包中的類時,最好不要使用相對路徑。否則,雖然在SE程序中可能還算正常,但是到了EE程序中,可能會出現問題。

    2、web項目根目錄獲取
    1)建立一個servlet,在其init()方法中添加如下代碼
    ServletContext context = this.getServletContext(); 
    String strs = context.getRealPath("/"); 
    2)利用httpServletRequest,得到相應的項目路徑
    String pathUrl = request.getSession().getServletContext().getRealPath("/");

    主站蜘蛛池模板: 亚洲六月丁香六月婷婷色伊人| 亚洲国产精品日韩专区AV| 久久亚洲精品AB无码播放 | 亚洲伊人久久大香线蕉影院| 久久一区二区三区免费播放| 亚洲s色大片在线观看| 九九精品成人免费国产片| 久久亚洲精品无码观看不卡| 一级黄色免费毛片| 亚洲熟妇无码AV在线播放| a级黄色毛片免费播放视频| 2022年亚洲午夜一区二区福利| 日本在线看片免费人成视频1000| 91亚洲国产在人线播放午夜| 国产卡一卡二卡三免费入口| 学生妹亚洲一区二区| 成人永久免费福利视频网站| 特级毛片全部免费播放| 久久久久亚洲AV成人网| 久久A级毛片免费观看| 亚洲91精品麻豆国产系列在线| 午夜影视在线免费观看| 有色视频在线观看免费高清在线直播 | 亚洲码和欧洲码一码二码三码| 国产大片91精品免费观看男同| 国产三级在线免费观看| 亚洲av无码成人黄网站在线观看| 免费观看激色视频网站(性色)| 亚洲男同gay片| 亚洲色欲一区二区三区在线观看| 30岁的女人韩剧免费观看| 亚洲国产AV无码一区二区三区| 亚洲综合色在线观看亚洲| 久久久免费精品re6| 亚洲精品乱码久久久久久V| 狠狠亚洲狠狠欧洲2019| 1024免费福利永久观看网站| 国产成人综合亚洲| 久久精品国产亚洲AV无码娇色| 国产精品免费一级在线观看| 国产偷伦视频免费观看|