由System.getProperty("user.dir")引发的联想
- 是什么:
- System.getPorperty("user.dir")的功能是得到当前项目路径。
1 @Test 2 public void test02() throws IOException { 3 String path1 = System.getProperty("user.dir") ; 4 System.out.println("当前工程路径----"+path1); 5 String path2 = Test01.class.getPackage().getName().replaceAll("//.","/"); 6 System.out.println("当前包路径---"+path2); 7 String canonicalPath = new java.io.File( "." ).getCanonicalPath(); 8 System.out.println("canonicalPath---"+canonicalPath); 9 }
控制台输出如下:(ps:这是我本地的项目所在路径)
当前工程路径----D:\remote_medical\02\test
当前包路径---com.qtong.test
canonicalPath---D:\remote_medical\02\test
- 为什么:
- 所有在java.io包中的类,都是将相对路径名解释为起始于用户当前的工作目录,所以我们可以通过 System.getProperty("user.dir") 来获得当前目录。但是通过 System.getProperties("user.dir")取得的值是根据我们的运行环境改变而改变的。
-
建议不要使用System.getProperties("user.dir");,因为通过键"user.dir"取得的值是根据我们的运行环境改变而改变的。一般情况下,在服务端都是使用绝对路径,将绝对路径定义在"filePath.properties"这样的配置文件中。对于web开发来说,在服务器端使用相对路径,是没有意义的。
- 用处
System类属于java.lang包,system类的构造函数的修饰符是private,所以这个类不可以被实例化,加载的时候调用static代码块。
System类提供了标准输入输出流,错误输出流,获取外部属性和系统环境的方法,加载类库和文件的方法,快速copy数组的方法;其中out和err的类型是PrintStream.
- system类中的其他常用方法
- 标准输入流 System.in() ;(标准输入经常与Scanner类与结合 )
- 标准输出流 System.out();
- 错误输出流 System.error(); 其中 out 和 err 的类型是PrintStream
- 对外部定义的属性和环境变量的访问 System.getProperty("user.dir");
- 加载文件和库的方法
- 快速复制数组的一部分 System.arraycopy(Object src, int srcPos, Object dest, int destPos,int length)
- System.getProperties()可以确定当前的系统属性,返回值是一个Properties;
- System.load(String filename)等同于:System.getProperties().load(String filename)它们的作用是可以从作为动态库德本地文件系统中指定的文件名加载代码文件。
- System.setProperties(Properties propes):将系统属性设置为Properties参数;
- System.setProperties(String key,String value)等同于System.getProperties().setProperties(String key,String value):设置指定键指示的系统属性
- 我们可以通过System.getProperties().toString() 看一下目前所有的属性,都是keyvalue对。
1 @Test 2 public void test01() throws IOException { 3 Properties properties = System.getProperties(); 4 String[] split = properties.toString().split(","); 5 int i = 0; 6 for (String string : split) { 7 System.out.println(string); 8 } 9 }
控制台输出如下:
1 java.runtime.name = Java(TM) SE Runtime Environment, 2 sun.boot.library.path = D:\aboutDev\java\jdk1.7\jre\bin, 3 java.vm.version = 24.72- b04, 4 java.vm.vendor = Oracle Corporation, 5 java.vendor.url = http://java.oracle.com/, 6 path.separator = ;, 7 java.vm.name = Java HotSpot(TM) 64- Bit Server VM, 8 file.encoding.pkg = sun.io, 9 user.country = CN, 10 user.script = , 11 sun.java.launcher = SUN_STANDARD, 12 sun.os.patch.level = Service Pack 1, 13 java.vm.specification.name = Java Virtual Machine Specification, 14 user.dir = D:\remote_medical\02\test, 15 java.runtime.version = 1.7.0_72- b14, 16 java.awt.graphicsenv = sun.awt.Win32GraphicsEnvironment, 17 java.endorsed.dirs = D:\aboutDev\java\jdk1.7\jre\lib\endorsed, 18 os.arch = amd64, 19 java.io.tmpdir = C:\Users\Duchong\AppData\Local\Temp\, 20 line.separator = , 21 java.vm.specification.vendor = Oracle Corporation, 22 user.variant = , 23 os.name = Windows 7, 24 sun.jnu.encoding = GBK, 25 java.library.path =“太长了,所以在这里就不写了”}
看到了一片很好的文章,是对System.getProperty()方法的介绍,是英文的。戳这里Java.lang.System.getProperty() Method