Java 根据环境属性区分不同操作系统
之前项目需要配置下载文件的路径,本机系统是win 10 ,而服务器系统是CentOS。配置默认下载路径(非项目内相对路径),就会出现问题。windows 路径是由盘符打头,而 CentOS 是由反斜杠 ‘/’开头,如何区分不同的系统?
根据环境属性获取具体的系统名,根据系统名判断。
String osName = System.getProperty("os.name");
或者
String osName = System.getProperties().getProperty("os.name");
使用的是 JDK 自带的方法, java.lang.System类的getProperties()方法。该方法的返回值是一个 Properties 对象,我们可以使用不同的属性名获取不同含义的环境属性值。
key | value | 含义 |
---|---|---|
java.version | Java Runtime Environment version | JRE 运行环境版本 |
java.vendor | Java Runtime Environment vendor | JRE 供应商 |
java.vendor.url | Java vendor URL | Java 供应商网址 |
java.home | Java installation directory | java 安装目录 |
java.vm.specification.version | Java Virtual Machine specification version | java 虚拟机规格版本 |
java.vm.specification.vendor | Java Virtual Machine specification vendor | java 虚拟机规格供应商 |
java.vm.specification.name | Java Virtual Machine specification name | java 虚拟机详细名称 |
java.vm.version | Java Virtual Machine implementation version | java 虚拟机实现版本 |
java.vm.vendor | Java Virtual Machine implementation vendor | java 虚拟机实现供应商 |
java.vm.name | Java Virtual Machine implementation name | java 虚拟机实现名称 |
java.specification.version | Java Runtime Environment specification version | JRE 规格版本 |
java.specification.vendor | Java Runtime Environment specification vendor | JRE 规格供应商 |
java.specification.name | Java Runtime Environment specification name | JRE 规格名称 |
java.class.version | Java class format version number | java 类规格版本号 |
java.class.path | Java class path | java 类路径 |
java.library.path | List of paths to search when loading libraries | 加载库时搜索的路径列表 |
java.io.tmpdir | Default temp file path | 默认的临时文件路径 |
java.compiler | Name of JIT compiler to use | java 编译器名称 |
java.ext.dirs | Path of extension directory or directories | 扩展路径的文件夹 |
os.name | Operating system name | 操作系统名称 |
os.arch | Operating system architecture | 操作系统架构 |
os.version | Operating system version | 操作系统版本 |
file.separator | File separator (“/” on UNIX) | 文件分隔符 |
path.separator | Path separator (“:” on UNIX) | 路径分隔符 |
line.separator | Line separator (“\n” on UNIX) | 换行符 |
user.name | User’s account name | 用户名 |
user.home | User’s home directory | 用户主目录 |
user.dir | User’s current working directory | 当前目录 |
更多的属性可以遍历 Properties 变量,打印出 key : value 键值对。
Set<Entry<Object, Object>> sets = System.getProperties().entrySet();
for(Entry<Object, Object> entry : sets){
System.out.println(entry.getKey()+" : "+entry.getValue());
}
最后可以进行简单的封装
public class SystemRecognize {
public static Properties props;
static{
props = System.getProperties();
}
/**
* 获取系统的名称
* @return
*/
public static String getOSName(){
return props.getProperty("os.name");
}
/**
* 获取系统的架构
* @return
*/
public static String getOSArch(){
return props.getProperty("os.arch");
}
/**
* 获取系统的文件分隔符
* @return
*/
public static String getFileSeparator(){
return props.getProperty("file.separator");
}
/**
* 获取系统的属性值
* @return
*/
public static String getValue(String propertyName){
return props.getProperty(propertyName);
// return System.getProperty(propertyName);
}
}