通过使用swt的首选项里的Preferencestore和java.util里的Property类可以对程序的配置信息进行文件存取。我在程序中两种方式都采用了,但在我的首选项的一个页面里,我想要对用户设置的程序字体进行保存,发现在FieldEditorPreferencePage里使用FontFieldEditor时,不知如何取得所设置字体的字体信息,查看了一下
觉得都没能直接拿到,后来索性直接用了doStore() ,配置文件里多了这么一行:
SYSTEM_FONT=1|\u5FAE\u8F6F\u96C5\u9ED1|9.0|0|WINDOWS|1|-12|0|0|0|400|0|0|0|-122|3|2|1|34|\u5FAE\u8F6F\u96C5\u9ED1;
终于是拿到了,但是怎么拿来用啊....
FontData date = PreferenceConverter.getFontData(preferenceStore, IConstants.SYSTEM_FONT);
Font newFont = new Font(display, date);
Font newFont = new Font(display, date);
这样就可以了。而且必须放在shell.layout()之前才能生效。
关于Property类的读写网上很多现成的。基本就是下面这样:
import
java.io.BufferedInputStream;
import
java.io.FileInputStream;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.OutputStream;
import
java.util.Enumeration;
import
java.util.Properties;
/**
* The Class Configuration.
*/
public
class
Configuration {
// 根据key读取value
/**
* Read value.
*
*
@param
filePath the file path
*
@param
key the key
*
@return
the string
*/
public
static
String readValue(String filePath, String key) {
Properties props =
new
Properties();
try
{
InputStream in =
new
BufferedInputStream(
new
FileInputStream(filePath));
props.load(in);
String value = props.getProperty(key);
return
value;
}
catch
(Exception e) {
e.printStackTrace();
return
null
;
}
}
// 读取properties的全部信息
/**
* Read properties.
*
*
@param
filePath the file path
*/
public
static
void
readProperties(String filePath) {
Properties props =
new
Properties();
try
{
InputStream in =
new
BufferedInputStream(
new
FileInputStream(filePath));
props.load(in);
Enumeration en = props.propertyNames();
while
(en.hasMoreElements()) {
String key = (String) en.nextElement();
String Property = props.getProperty(key);
System.
err
.println(key +
":"
+ Property);
}
}
catch
(Exception e) {
e.printStackTrace();
}
}
// 写入properties信息
/**
* Write properties.
*
*
@param
filePath the file path
*
@param
parameterName the parameter name
*
@param
parameterValue the parameter value
*/
public
static
void
writeProperties(String filePath, String parameterName, String parameterValue) {
Properties prop =
new
Properties();
try
{
InputStream fis =
new
FileInputStream(filePath);
// 从输入流中读取属性列表(键和元素对)
prop.load(fis);
// 调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
// 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
OutputStream fos =
new
FileOutputStream(filePath);
prop.setProperty(parameterName, parameterValue);
// 以适合使用 load 方法加载到 Properties 表中的格式,
// 将此 Properties 表中的属性列表(键和元素对)写入输出流
prop.store(fos,
"Update '"
+ parameterName +
"' value"
);
}
catch
(IOException e) {
System.
err
.println(
"Visit "
+ filePath +
" for updating "
+ parameterName +
" value error"
);
}
}
}