一直以来都是理论看得多,代码敲得少,上周写的功能由于IO相关操作不熟悉让测试MM发现我代码深处隐藏的空指针异常,ε(┬┬﹏┬┬)3。Java虽然号称跨平台,但如果我们在Windows下开发,代码如果可能运行在MAC或者Linux,仍有许多需要注意的小坑,在此小结~
在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形式 |
我们知道各个操作系统的换行符真实千奇百怪:
为了解决猿们面对不同操作系统,尤其是需要把字符串写入文件时的痛苦,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 main(String[] args) {
System.out.println("java.version : "+System.getProperty("java.version"));
System.out.println("java.vendor : "+System.getProperty("java.vendor"));
System.out.println("java.vendor.url : "+System.getProperty("java.vendor.url"));
System.out.println("java.home : "+System.getProperty("java.home"));
System.out.println("java.vm.specification.version : "+System.getProperty("java.vm.specification.version"));
System.out.println("java.vm.specification.vendor : "+System.getProperty("java.vm.specification.vendor"));
System.out.println("java.vm.specification.name : "+System.getProperty("java.vm.specification.name"));
System.out.println("java.vm.version : "+System.getProperty("java.vm.version"));
System.out.println("java.vm.vendor : "+System.getProperty("java.vm.vendor"));
System.out.println("java.vm.name : "+System.getProperty("java.vm.name"));
System.out.println("java.specification.version : "+System.getProperty("java.specification.version"));
System.out.println("java.specification.vendor : "+System.getProperty("java.specification.vendor"));
System.out.println("java.specification.name : "+System.getProperty("java.specification.name"));
System.out.println("java.class.version : "+System.getProperty("java.class.version"));
System.out.println("java.class.path : "+System.getProperty("java.class.path"));
System.out.println("java.library.path : "+System.getProperty("java.library.path"));
System.out.println("java.io.tmpdir : "+System.getProperty("java.io.tmpdir"));
System.out.println("java.compiler : "+System.getProperty("java.compiler"));
System.out.println("java.ext.dirs : "+System.getProperty("java.ext.dirs"));
System.out.println("os.name : "+System.getProperty("os.name"));
System.out.println("os.arch : "+System.getProperty("os.arch"));
System.out.println("os.version : "+System.getProperty("os.version"));
System.out.println("file.separator : "+System.getProperty("file.separator"));
System.out.println("path.separator : "+System.getProperty("path.separator"));
System.out.println("line.separator : "+System.getProperty("line.separator"));
System.out.println("user.name : "+System.getProperty("user.name"));
System.out.println("user.home : "+System.getProperty("user.home"));
System.out.println("user.dir : "+System.getProperty("user.dir"));
}
}
下面是代码在windows 7上运行的结果:
java.version : 1.8.0_151
java.vendor : Oracle Corporation
java.vendor.url : http://java.oracle.com/
java.home : D:\Program Files\Java\jdk1.8.0_151\jre
java.vm.specification.version : 1.8
java.vm.specification.vendor : Oracle Corporation
java.vm.specification.name : Java Virtual Machine Specification
java.vm.version : 25.151-b12
java.vm.vendor : Oracle Corporation
java.vm.name : Java HotSpot(TM) 64-Bit Server VM
java.specification.version : 1.8
java.specification.vendor : Oracle Corporation
java.specification.name : Java Platform API Specification
java.class.version : 52.0
java.class.path : D:\Program Files\Java\jdk1.8.0_151\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\rt.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext\zipfs.jar;E:\eclipse_work_space\Demo\bin
java.library.path : D:\Program Files\Java\jdk1.8.0_151\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;D:/Program Files/Java/jdk1.8.0_151//bin/../jre/bin/server;D:/Program Files/Java/jdk1.8.0_151//bin/../jre/bin;D:/Program Files/Java/jdk1.8.0_151//bin/../jre/lib/amd64;C:\oraclexe\app\oracle\product\11.2.0\server\bin;D:\apache-maven-3.5.0\bin;D:\Program Files\Java\jdk1.8.0_151\\bin;D:\Program Files\Java\jdk1.8.0_151\\jre\bin%;C:\ProgramData\Oracle\Java\javapath;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;D:\Program Files (x86)\WinMerge;C:\Program Files (x86)\Common Files\Ulead Systems\MPEG;C:\Program Files (x86)\QuickTime\QTSystem\;D:\Program Files (x86)\MySQL\MySQL Server 5.5\bin;;C:\Users\lenovo\Desktop;;.
java.io.tmpdir : C:\Users\lenovo\AppData\Local\Temp\
java.compiler : null
java.ext.dirs : D:\Program Files\Java\jdk1.8.0_151\jre\lib\ext;C:\windows\Sun\Java\lib\ext
os.name : Windows 7
os.arch : amd64
os.version : 6.1
file.separator : \
path.separator : ;
line.separator :
user.name : lenovo
user.home : C:\Users\lenovo
user.dir : E:\eclipse_work_space\Demo
下面是代码在centos上运行的结果:
java.version : 1.8.0_171
java.vendor : Oracle Corporation
java.vendor.url : http://java.oracle.com/
java.home : /usr/local/jdk1.8.0_171/jre
java.vm.specification.version : 1.8
java.vm.specification.vendor : Oracle Corporation
java.vm.specification.name : Java Virtual Machine Specification
java.vm.version : 25.171-b11
java.vm.vendor : Oracle Corporation
java.vm.name : Java HotSpot(TM) 64-Bit Server VM
java.specification.version : 1.8
java.specification.vendor : Oracle Corporation
java.specification.name : Java Platform API Specification
java.class.version : 52.0
java.class.path : .:/usr/local/jdk1.8.0_171/lib:/usr/local/jdk1.8.0_171/jre/lib
java.library.path : /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.io.tmpdir : /tmp
java.compiler : null
java.ext.dirs : /usr/local/jdk1.8.0_171/jre/lib/ext:/usr/java/packages/lib/ext
os.name : Linux
os.arch : amd64
os.version : 3.10.0-693.el7.x86_64
file.separator : /
path.separator : :
line.separator :
user.name : wuxi
user.home : /home/wuxi
user.dir : /home/wuxi/java_workplace
最后说两句,猿们看到我上面写的java不知道作何感想,不过写出这样格式固定的多行代码有很多简单的方法,idea这个神器就提供了列操作,windows下 “ctrl + shift + j”了解一下O(∩_∩)O哈哈~
但是我在这里就偏偏不用idea(其实是家里笔记本打开idea太卡了),而是用excel的字符串拼接功能,是时候展示真正的技术了: