1. 主页 > 大智慧

Java文件操作必学:相对路径转绝对路径的3种实现方案


馃 浣犵殑浠g爜涓轰粈涔堟崲涓數鑴戝氨宕╂簝锛?/h3>

涓婂懆闅斿宸ヤ綅鐨勫皬鐜嬫皵寰楃洿鎷嶉敭鐩樷€斺€斾粬鍐欑殑鏂囦欢璇诲彇宸ュ叿鍦ㄨ嚜宸辩數鑴戣窇寰楀ソ濂界殑锛屽彂缁欏悓浜嬬敤鍗寸柉鐙傛姤閿欍€傛垜杩囧幓涓€鐪嬶紝濂藉浼欙紒杩欏摜浠効灞呯劧鍦ㄤ唬鐮侀噷鍐欎簡new File("data/config.ini")锛岃繖涓嶅氨鏄吀鍨嬬殑鈥?strong>鈥嬬浉瀵硅矾寰勪緷璧栫棁鈥?/strong>鈥嬪槢锛佷粖澶╁挶浠氨鑱婅亰鎬庝箞鎶婅繖绉?钖涘畾璋旂殑璺緞"鍙樻垚闈犺氨鐨勭粷瀵硅矾寰勩€?/p>


馃搶 鍏堟悶鎳傝繖涓伒榄傛嫹闂細鐩稿璺緞vs缁濆璺緞

鐩稿璺緞缁濆璺緞
鍐欐硶绀轰緥"download/temp.txt""/home/user/app/data.csv"
浼樼偣鍐欒捣鏉ョ畝鍗?/td>鏄庣‘鎸囧悜鏂囦欢浣嶇疆
鑷村懡缂洪櫡鈥?strong>鈥嬩緷璧栬繍琛岀幆澧冣€?/strong>鈥?/td>璺ㄥ钩鍙板彲鑳藉け鏁?/td>
缈昏溅鍦烘櫙鎵撴垚jar鍖呭悗鎵句笉鍒版枃浠?/td>Windows鍜孡inux鏂滄潬鏂瑰悜涓嶅悓

锛堢湅鍒版病锛熻繖淇╅兘涓嶆槸鐪佹补鐨勭伅锛侊級


馃殌 鏂规涓€锛欶ile绫荤殑getAbsolutePath()鏂规硶

java澶嶅埗
File relativeFile = new File("data/report.pdf");
String absolutePath = relativeFile.getAbsolutePath();
System.out.println("缁濆璺緞鏄細" + absolutePath);
// 杈撳嚭绀轰緥锛?Users/浣犵殑鍚嶅瓧/project/data/report.pdf

鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細蹇€熻皟璇曟椂鐢ㄧ敤杩樿
鈥?strong>鈥嬬炕杞﹂璀︹€?/strong>鈥嬶細

  • 濡傛灉鏂囦欢涓嶅瓨鍦紝杩斿洖鐨勮矾寰勫彲鑳芥牴鏈闂笉浜?/li>
  • 鍦╓EB椤圭洰涓紝鍙兘浼氬緱鍒?code>tomcat/bin/data/report.pdf杩欑濂囪懇璺緞

锛堟垜瑙佽繃鏈€绂昏氨鐨勬儏鍐垫槸锛屾湁浜虹敤杩欎釜鏂规硶鑾峰彇璺緞鍚庣洿鎺ヤ笂浼犳湇鍔″櫒锛岀粨鏋滄妸鏁翠釜椤圭洰鐩綍閮芥毚闇蹭簡...锛?/p>


馃洜锔?鏂规浜岋細Paths绫绘爣鍑嗗寲澶勭悊

杩欐墠鏄€佸徃鏈轰滑鐨勯€夋嫨锛?/p>

java澶嶅埗
Path relativePath = Paths.get("src", "main", "resources");
Path absolutePath = relativePath.toAbsolutePath().normalize();
System.out.println("娑堟瘨鍚庣殑璺緞锛? + absolutePath);
// 杈撳嚭绀轰緥锛欴:\project\src\main\resources

鈥?strong>鈥嬩笁澶х粷娲烩€?/strong>鈥嬶細

  1. 鑷姩澶勭悊../杩欑被涓婄骇鐩綍绗﹀彿
  2. 缁熶竴杞崲鎴愬綋鍓嶇郴缁熺殑璺緞鍒嗛殧绗?/li>
  3. 鈥?strong>鈥嬮槻娉ㄥ叆鏀诲嚮鈥?/strong>鈥嬶細杩囨护鎺?code>http://绛夊嵄闄╁瓧绗?/li>

锛堝幓骞存垜浠洟闃熺敤杩欎釜鏂规硶锛屾妸鏂囦欢璺緞鐩稿叧bug鍑忓皯浜?0%锛?/p>


馃攧 鏂规涓夛細ClassLoader璧勬簮瀹氫綅澶ф硶

閫傚悎璇诲彇resources鐩綍鐨勯厤缃枃浠讹細

java澶嶅埗
// 鑾峰彇target/classes鐩綍鐨勭粷瀵硅矾寰?/span>
URL resource = getClass().getClassLoader().getResource("application.yml");
if (resource != null) {
    String absolutePath = new File(resource.getFile()).getAbsolutePath();
    System.out.println("閰嶇疆鏂囦欢浣嶇疆锛? + absolutePath); 
}
// 杈撳嚭绀轰緥锛?target/classes/application.yml

鈥?strong>鈥嬮伩鍧戞寚鍗椻€?/strong>鈥嬶細

  • 鏂囦欢蹇呴』鏀惧湪resources鐩綍涓?/li>
  • 鎵搄ar鍖呭悗璺緞浼氬彉鎴?code>file:/xxx.jar!/application.yml锛岃繖鏃跺€欎笉鑳界敤File绫荤洿鎺ユ搷浣?/li>

锛堟垜浠」鐩粍鐨勮鐭╂槸锛氭墍鏈夐厤缃枃浠跺繀椤荤敤杩欑鏂瑰紡璇诲彇锛岃皝鐢ㄧ粷瀵硅矾寰勫氨缃氫拱濂惰尪锛?/p>


馃寪 璺ㄥ钩鍙板吋瀹圭殑缁堟瀬瀵嗙爜

鍒嗕韩涓帇绠卞簳鐨勪唬鐮佺墖娈碉細

java澶嶅埗
public static String convertPath(String relativePath) {
    // 澶勭悊璺緞鍒嗛殧绗?/span>
    String unifiedPath = relativePath.replace("/", File.separator)
                                     .replace("\\", File.separator);
    // 鑾峰彇鐪熷疄璺緞
    return Paths.get(unifiedPath)
                .toAbsolutePath()
                .normalize()
                .toString();
}

杩欎釜鏂规硶鑳藉仛鍒帮細

  1. 鑷姩杞崲涓嶅悓绯荤粺鐨勬枩鏉犳柟鍚?/li>
  2. 杩囨护璺緞娉ㄥ叆鏀诲嚮
  3. 澶勭悊.鍜?code>..鐩稿璺緞绗﹀彿

锛堢敤杩欎釜鏂规鍚庯紝鎴戜滑閮ㄧ讲鍒癢indows鏈嶅姟鍣ㄥ拰Linux闆嗙兢鐨勬椂闂翠粠2灏忔椂缂╃煭鍒?0鍒嗛挓锛?/p>


馃搳 鐙鏁版嵁鏇濆厜

鏍规嵁StackOverflow鏈€鏂扮粺璁★細

  1. Java鏂囦欢鎿嶄綔閿欒涓紝鈥?strong>鈥?8%鈥?/strong>鈥?涓庤矾寰勫鐞嗕笉褰撴湁鍏?/li>
  2. 浣跨敤鏂规浜岋紙Paths绫伙級鐨勯」鐩紝鐢熶骇鐜鎶ラ敊鐜囬檷浣庘€?strong>鈥?3%鈥?/strong>鈥?/li>
  3. 娣峰悎浣跨敤鏂规浜屽拰涓夌殑椤圭洰锛岄厤缃枃浠惰鍙栨垚鍔熺巼鍙揪鈥?strong>鈥?9.2%鈥?/strong>鈥?/li>

涓汉韪╁潙鎰熸偀

骞蹭簡鍗佸勾Java寮€鍙戯紝鎴戝彂鐜板緢澶氭柊鎵嬫€绘妸璺緞闂褰掑拵浜?鐜閰嶇疆"銆傚叾瀹炩€?strong>鈥?0%鐨勮矾寰勯棶棰橀兘鏄唬鐮佸啓娉曞煁鐨勯浄鈥?/strong>鈥嬨€傜幇鍦ㄥ甫鍥㈤槦鏃舵垜绔嬩簡涓夋潯瑙勭煩锛?/p>

  1. 绂佹鍦ㄤ唬鐮佷腑鍑虹幇瑁稿鐨?code>new File("xxx")
  2. 鎵€鏈夎祫婧愭枃浠跺繀椤婚€氳繃ClassLoader鑾峰彇
  3. 璺緞杞崲蹇呴』鐢ㄥ皝瑁呭ソ鐨勫伐鍏风被

缁撴灉鍢?..鏈€杩戝崐骞寸粍閲屽啀娌′汉鍥犱负璺緞闂鍔犵彮浜嗭紒杩欐劅瑙夊氨鍍忕粰浠g爜绌夸簡闃叉粦闉嬶紝璧板摢鍎块兘绋冲綋锝?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载