一直以来都是理论看得多,代码敲得少,上周写的功能由于IO相关操作不熟悉让测试MM发现我代码深处隐藏的空指针异常,ε(┬┬﹏┬┬)3。Java虽然号称跨平台,但如果我们在Windows下开发,代码如果可能运行在MAC或者Linux,仍有许多需要注意的小坑,在此小结~
1. 文件分隔符和路径分隔符
在Windows路径中,文件路径层级的分隔符是”\”,比如”C\windows\System32”,但是Linux和MAC的分隔符却是”/”,比如”/etc/profile”,我们总不能在代码中遇到路径字符串,就把”/”或者”\”写死,还好File类里面提供了separator等几个属性:
attribute | type | windows | linux | comment |
---|---|---|---|---|
File.separator | String | \ | / | 路径分隔符String形式 |
File.pathSeparator | String | ; | : | 文件分隔符String形式 |
File.separatorChar | char | \ | / | 路径分隔符char形式 |
File.pathSeparatorChar | char | ; | : | 文件分隔符char形式 |
2. 换行符
我们知道各个操作系统的换行符真实千奇百怪:
- lunix 下换行符: \n
- Mac 下换行符:\r
- windows 下换行方式: \r\n
为了解决猿们面对不同操作系统,尤其是需要把字符串写入文件时的痛苦,Java提供了获取当前操作系统换行符的方法:
String s = System.getProperty("line.separator");
但其实,System.getProperty()方法不仅可以获取换行符,还可以获取当前环境下JVM和OS等很多属性,方法参数和作用如下表:
argument | comment |
---|---|
java.version | Java 运行时环境版本 |
java.vendor | Java 运行时环境供应商 |
java.vendor.url | Java 供应商的 URL |
java.home | Java 安装目录 |
java.vm.specification.version | Java 虚拟机规范版本 |
java.vm.specification.vendor | Java 虚拟机规范供应商 |
java.vm.specification.name | Java 虚拟机规范名称 |
java.vm.version | Java 虚拟机实现版本 |
java.vm.vendor | Java 虚拟机实现供应商 |
java.vm.name | Java 虚拟机实现名称 |
java.specification.version | Java 运行时环境规范版本 |
java.specification.vendor | Java 运行时环境规范供应商 |
java.specification.name | Java 运行时环境规范名称 |
java.class.version | Java 类格式版本号 |
java.class.path | Java 类路径 |
java.library.path | 加载库时搜索的路径列表 |
java.io.tmpdir | 默认的临时文件路径 |
java.compiler | 要使用的 JIT 编译器的名称 |
java.ext.dirs | 一个或多个扩展目录的路径 |
os.name | 操作系统的名称 |
os.arch | 操作系统的架构 |
os.version | 操作系统的版本 |
file.separator | 文件分隔符(在 UNIX 系统中是”/”) |
path.separator | 路径分隔符(在 UNIX 系统中是”:”) |
line.separator | 行分隔符(在 UNIX 系统中是”/n”) |
user.name | 用户的账户名称 |
user.home | 用户的主目录 |
user.dir | 用户的当前工作目录 |
接下来我们用代码检验各个参数在windows上的效果:
import java.util.ArrayList;
import java.util.List;
public class Main{
public static void