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>鈥嬶細
- 鑷姩澶勭悊
../
杩欑被涓婄骇鐩綍绗﹀彿 - 缁熶竴杞崲鎴愬綋鍓嶇郴缁熺殑璺緞鍒嗛殧绗?/li>
- 鈥?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(); }
杩欎釜鏂规硶鑳藉仛鍒帮細
- 鑷姩杞崲涓嶅悓绯荤粺鐨勬枩鏉犳柟鍚?/li>
- 杩囨护璺緞娉ㄥ叆鏀诲嚮
- 澶勭悊
.
鍜?code>..鐩稿璺緞绗﹀彿
锛堢敤杩欎釜鏂规鍚庯紝鎴戜滑閮ㄧ讲鍒癢indows鏈嶅姟鍣ㄥ拰Linux闆嗙兢鐨勬椂闂翠粠2灏忔椂缂╃煭鍒?0鍒嗛挓锛?/p>
馃搳 鐙鏁版嵁鏇濆厜
鏍规嵁StackOverflow鏈€鏂扮粺璁★細
- Java鏂囦欢鎿嶄綔閿欒涓紝鈥?strong>鈥?8%鈥?/strong>鈥?涓庤矾寰勫鐞嗕笉褰撴湁鍏?/li>
- 浣跨敤鏂规浜岋紙Paths绫伙級鐨勯」鐩紝鐢熶骇鐜鎶ラ敊鐜囬檷浣庘€?strong>鈥?3%鈥?/strong>鈥?/li>
- 娣峰悎浣跨敤鏂规浜屽拰涓夌殑椤圭洰锛岄厤缃枃浠惰鍙栨垚鍔熺巼鍙揪鈥?strong>鈥?9.2%鈥?/strong>鈥?/li>
涓汉韪╁潙鎰熸偀
骞蹭簡鍗佸勾Java寮€鍙戯紝鎴戝彂鐜板緢澶氭柊鎵嬫€绘妸璺緞闂褰掑拵浜?鐜閰嶇疆"銆傚叾瀹炩€?strong>鈥?0%鐨勮矾寰勯棶棰橀兘鏄唬鐮佸啓娉曞煁鐨勯浄鈥?/strong>鈥嬨€傜幇鍦ㄥ甫鍥㈤槦鏃舵垜绔嬩簡涓夋潯瑙勭煩锛?/p>
- 绂佹鍦ㄤ唬鐮佷腑鍑虹幇瑁稿鐨?code>new File("xxx")
- 鎵€鏈夎祫婧愭枃浠跺繀椤婚€氳繃ClassLoader鑾峰彇
- 璺緞杞崲蹇呴』鐢ㄥ皝瑁呭ソ鐨勫伐鍏风被
缁撴灉鍢?..鏈€杩戝崐骞寸粍閲屽啀娌′汉鍥犱负璺緞闂鍔犵彮浜嗭紒杩欐劅瑙夊氨鍍忕粰浠g爜绌夸簡闃叉粦闉嬶紝璧板摢鍎块兘绋冲綋锝?/p>
本文由嘻道妙招独家原创,未经允许,严禁转载