1. JVM 属性 user.dir
- user.dir 为java.io包下所有读取文件类的基本路径, 默认为jar包启动时候命令执行所在的目录.
- 等同于pwd(print working directory)命令展示的目录. 如果写启动bash脚本, 记得cd到jar包所在目录, 或者其他设定的目录.
@SpringBootApplication
public class QuartzApplication {
public static void main(String[] args) {
System.getProperty("user.dir");
SpringApplication.run(QuartzApplication.class, args);
}
}
其他与文件相关的属性:
java.class.path Java类路径
java.library.path 加载库时搜索的路径列表
java.io.tmpdir 默认的临时文件路径
file.separator 文件分隔符(在 UNIX 系统中是“/”)
path.separator 路径分隔符(在 UNIX 系统中是“:”)
line.separator 行分隔符(在 UNIX 系统中是“/n”)
user.name 用户的账户名称
user.home 用户的主目录
2. classpath:和classpath*:
classpath: :表示从类路径中加载资源,classpath:和classpath:/是等价的,都是相对于类的根路径。资源文件库标准的在文件系统中,也可以在JAR或ZIP的类包中。
classpath::假设多个JAR包或文件系统类路径都有一个相同的配置文件,classpath:只会在第一个加载的类路径下查找,而classpath:会扫描所有这些JAR包及类路径下出现的同名文件。
获取资源的其他方式
public class QuartzApplication {
public static void main(String[] args) {
// 得到classes目录的文件路径
QuartzApplication.class.getResource("/").getPath();
// 得到当前类所处目录的文件路径
QuartzApplication.class.getResource("").getPath();
// getClassLoader().getResource("")参数只能为相对路径,得到classpath为基本路径拼出的路径, 参数如果为绝对路径会得到null
QuartzApplication.class.getClassLoader().getResource("")
// 读取jar包内资源文件要用流
QuartzApplication.class.getClassLoader().getClassLoader().getResourceAsStream("")
}
}
- Spring的Resource接口对象,
该接口拥有对应不同资源类型的实现类,例如:
类名 | 描述 |
---|---|
ClassPathResource.class | 类路径下的资源,资源以相对于类路径的方式 |
FileSystemResource.class | 文件系统资源,资源以文件系统路径的方式 |
InputStreamResource.class | |
ServletContextResource.class | |
UrlResource.class | 封装了java.net.URL,能够访问任何可以通过URL表示的资源,如文件系统资源、HTTP资源、FTP资源 |
PathResource.class | 封装了java.net.URL、java.nio.file.path |
- 地址前缀总结:
地址前缀 | 示例 | 对应的资源类型 |
---|---|---|
classpath: | classpath:/spring/spring-*.xml | 从类路径中加载资源,classpath:和classpath:/是等价的,都是相对于类的根路径。资源文件库标准的在文件系统中,也可以在JAR或ZIP的类包中 |
file: | file:/conf/bean.xml | 使用UrlResource从文件系统目录中装载资源,可采用绝对或相对路径 |
http:// | http://www.p7.com/resource/bean.xml | 使用URLResource从Web服务器中装载资源 |
ftp:// | ftp://www.p7.com/resource/bean.xml | 使用URLResource从FTP服务器中装载资源 |
没有前缀 | conf/bean.xml | 根据ApplicationContext的具体实现采用对应类型的Resource |