★Properties 在以前我总结的一篇关于集合框架的小文章里提到过,Properties是历史集合类的一个典型的例子,这里主要不是介绍它的集合特性。大家可能都经常接触一些配置文件,如Windows的ini文件,Apache的conf文件,还有Java里的properties文件等,这些文件当中的数据以“关键字-值”对的方式保存。“环境变量”这个概念都知道吧,它也是一种“key-value”对,以前也常常看到版上问“如何取得系统某某信息”之类的问题,其实很多都保存在环境变量里,只要用一条
! E8 Y! \1 W( a7 n 1. System.getProperties().list(System.out);
. t/ G0 J0 K, S# N 就能获得全部环境变量的列表:) b8 }$ A- m6 j: U
-- listing properties --- g& U% W2 o+ E6 q6 ]
java.runtime.name=Java(TM) 2 Runtime Environment, Stand...
% z1 u- ]4 P/ F' j sun.boot.library.path=C:\Program Files\Java\j2re1.4.2_05\bin% Z5 ?. h1 M3 V7 o% Q3 F
java.vm.version=1.4.2_05-b04
' U. i- X. I0 c8 G3 x java.vm.vendor=Sun Microsystems Inc.
+ a4 a O6 i$ T- M java.vendor.url=http://java.sun.com/
0 w' T* Q/ b6 S path.separator=;
5 \2 t9 |" w& M- L java.vm.name=Java HotSpot(TM) Client VM
# h) Q, q+ V* x8 G1 b file.encoding.pkg=sun.io; t+ T% e" l$ S
user.country=CN
" V& a6 }! k& f4 \( C& w1 |0 R* b sun.os.patch.level=Service Pack 1. M( Z. H/ y5 ?* Q
java.vm.specification.name=Java Virtual Machine Specification
( Q, Q2 g( H6 I' ?2 C/ j user.dir=d:\my documents\项目\eclipse\SWTDemo ~7 o: P' U s
java.runtime.version=1.4.2_05-b042 t- q# n) N8 H* }1 Q8 A
java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment
1 w @* w q* ]; E" }) r* X, } java.endorsed.dirs=C:\Program Files\Java\j2re1.4.2_05\li...
% a; P7 I: A- E os.arch=x86
4 y, D+ L) w4 \0 e" _7 C: g- { java.io.tmpdir=C:\DOCUME~1\cn2lx0q0\LOCALS~1\Temp\
: r3 @, }4 |: h! y line.separator=7 d; J, D* k/ ?; r* w: ^3 r$ K8 R
java.vm.specification.vendor=Sun Microsystems Inc.; ^, d% ~! r& N0 ]! o. c& _% H0 B
user.variant=% T5 ?0 `3 j3 Z+ k8 B& O
os.name=Windows XP0 ~& U0 m/ x5 V8 m- l
sun.java2d.fontpath=" h5 |6 W. {0 t5 q( u1 n, l
java.library.path=C:\Program Files\Java\j2re1.4.2_05\bi...
1 E1 |, j- Q2 A; a5 j# s java.specification.name=Java Platform API Specification9 T3 T, U; b' Y( i4 S' q5 i& E3 s
java.class.version=48.0$ R* X; ^$ X- j, o
java.util.prefs.PreferencesFactory=java.util.prefs.WindowsPreferencesFac...9 o' Z3 f* g1 R* @
os.version=5.1
: Q0 z/ U' C; R7 C user.home=D:\Users\cn2lx0q0
" W* I* S4 Q# Y, p/ ? user.timezone=
3 z5 v9 F9 v) _. H3 I0 ?3 V* f+ Q java.awt.printerjob=sun.awt.windows.WPrinterJob
" g9 k! e$ A* [7 {1 R file.encoding=GBK
. P8 M# }7 O" y java.specification.version=1.4- a) ] s0 d$ M) M: E* ]
user.name=cn2lx0q0
8 ~0 b% j. V+ f8 @ java.class.path=d:\my documents\项目\eclipse\SWTDemo\bi...
e) c/ z: P% t7 _ java.vm.specification.version=1.0/ n$ ^8 O7 K# N0 s$ @ H- J
sun.arch.data.model=32
+ |6 p: r) X; W( Z& [ java.home=C:\Program Files\Java\j2re1.4.2_05, W) g) n/ a- {, g" @ j! u% I
java.specification.vendor=Sun Microsystems Inc., r$ g$ J2 x: v' m# a6 y
user.language=zh
$ C' {6 s0 O) J6 F& V0 n6 S awt.toolkit=sun.awt.windows.WToolkit
- e! }4 q6 W% j9 X' ~1 }0 u. x8 q java.vm.info=mixed mode4 T* e$ N% j2 Q, `
java.version=1.4.2_05
- |, Z2 K/ Q" i/ n5 I, \ java.ext.dirs=C:\Program Files\Java\j2re1.4.2_05\li...
R& m9 ~& K$ j! L sun.boot.class.path=C:\Program Files\Java\j2re1.4.2_05\li...
7 }) `( n E/ p' ]; c$ }; }+ J% D java.vendor=Sun Microsystems Inc.
3 ~; w/ q, t( X( h file.separator=\
/ [4 u0 [% C! ]9 O% J" u java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport...8 L/ ]- p" r1 z3 y2 J9 F9 v
sun.cpu.endian=little
3 c: l2 O" c3 H4 z0 x5 R sun.io.unicode.encoding=UnicodeLittle
& u1 A( g6 m& V H, Y- ~2 L5 J sun.cpu.isalist=pentium i486 i386
3 `$ J% }( Y1 O% s 主要类与方法和描述! t, X2 {7 D. T. @
1. load() //从一个外部流读取属性 ~7 g- U4 T# ~' d0 T
2. store() //将属性保存到外部流(特别是文件)3 i/ Y+ {5 g- U
3. getProperty() //取得一个指定的属性; t% V# r( H9 v6 {4 `
4. setProperty() //设置一个指定的属性
& W- H2 s% N. f/ \# c 5. list() //列出这个Properties对象包含的全部“key-value”对
/ r/ [- Z; Z( _/ N" a: f& \ 6. System.getProperties() //取得系统当前的环境变量2 h. X7 N& s1 |7 C
你可以这样保存一个properties文件:1 b0 `+ T- m" T+ l, r9 U" W% V9 Y+ S
1. Properties prop = new Properties();5 g7 ?( T8 b b V
2. prop.setProperty("key1", "value1");! j& i: u' k1 q* @* `
3. .../ N$ X$ x( }! G; E) C: M# m6 P
4. FileOutputStream out = new FileOutputStream("config.properties");# p9 Q& ~: q: B5 K. ?8 X* D
5. prop.store(out, "--这里是文件头,可以加入注释--");
8 C; E5 \0 m' d* H, t: D, A" A ★Preferences9 H1 w0 \) h! W4 j6 e5 ]
如果我说Java里面可以不使用JNI的手段操作Windows的注册表你信不信?很多软件的菜单里都有“Setting”或“Preferences”这样的选项用来设定或修改软件的配置,这些配置信息可以保存到一个像上面所述的配置文件当中,如果是Windows平台下,也可能会保存到系统注册表中。从JDK 1.4开始,Java在java.util下加入了一个专门处理用户和系统配置信息的java.util.prefs包,其中一个类Preferences是一种比较“高级”的玩意。从本质上讲,Preferences本身是一个与平台无关的东西,但不同的OS对它的SPI(Service Provider Interface)的实现却是与平台相关的,因此,在不同的系统中你可能看到首选项保存为本地文件、LDAP目录项、数据库条目等,像在Windows平台下,它就保存到了系统注册表中。不仅如此,你还可以把首选项导出为XML文件或从XML文件导入。 |