本文目录
1 绝对路径与相对路径
2 常见获取路径方法
3 JAR文件内部路径
4 打包JAR文件
1 绝对路径与相对路径
绝对路径:通常从盘符开始的路径(例如:G:/Eclipse/Model)。任何程序通过绝对路径都会“到达”一个相同的位置。
相对路径:基于某个“根路径”开始的路径(例如:/Model)。对于不同的根路径,相对路径实际指向不同的位置。
当根路径为“G:/Eclipse”时,相对路径“/Model”指向的是“G:/Eclipse/Model”位置。
当根路径为“G:/Program”时,相对路径“/Model”指向的是“G:/Program/Model”位置。
若不指定根路径,在项目中,默认以项目目录为根路径,在JAR文件中,默认以JAR文件所在位置为根路径。
当一个程序希望在任何地方都能正常运行时,该程序代码中一般会使用相对路径。
否则,若使用绝对路径,在不同计算机中,可能会出错。
例如,某计算机没有“G:/Program”路径,那么,所有指向“G:/Program/Model”的代码都会报错。
2 常见获取路径方法
1 Class.getResource(path)
该方法以Class编译文件所在位置作为根路径,并结合给定的相对路径参数(path),得到一个完整路径。
示例:Model.class.getResource("logo.png")
编译文件Model.class路径为“G:/Eclipse/Model/bin/com/model/code/”,
得到的完整路径为“G:/Eclipse/Model/bin/com/model/code/logo.png”。
2 Class.getClassLoader().getResource(path)
该方法以bin目录所在位置作为根路径,并结合给定的相对路径参数(path),得到一个完整路径。
示例:Model.class.getClassLoader().getResource("logo.png")
bin目录路径为“G:/Eclipse/Model/bin/”,得到的完整路径为“G:/Eclipse/Model/bin/logo.png”。
3 JAR文件内部路径
当项目被打包成JAR文件后,bin目录内容将被包含在其中,路径也会稍微有些变化。
JAR文件内部目录结构,可以通过WinRAR解压缩工具进行查看。
1 Class.getResource(path)
该方法将以Class文件在JAR文件内部的位置作为根路径。
示例:Model.class.getResource("logo.png")
得到的完整路径为“rsrc:com/model/code/logo.png”
2 Class.getClassLoader().getResource(path)
该方法将以JAR文件内部的根目录作为根路径。
示例:Model.class.getClassLoader().getResource("logo.png")
得到的完整路径为“rsrc:logo.png”
4 打包JAR文件
打包JAR文件时,通常是将Class文件打包,即将bin目录下的内容进行打包。而bin目录下的内容,又是通过src目录下的内容生成的。因此,若希望将资源文件(如图片)打包到JAR文件中,并正确引用该资源文件,需要将资源文件放到src目录下,同时,通过Class.getResource或Class.getClassLoader().getResource方法进行引用,以确保不会出现打包JAR文件后,资源无法找到的问题。