我已经编写了下面的代码来检查属性文件是否存在并具有所需的属性。如果存在,则打印文件存在且完整的消息,如果不存在,则创建具有所需属性的属性文件。
我想知道的是,是否有一种更优雅的方法来做这件事,或者我的方法是最好的方法?我遇到的一个小问题是用这种方式它不会检查不应该在那里的额外属性,有办法吗?
我的需求总结:
- 检查文件是否存在
- 检查它是否具有所需的属性
- 检查是否有额外的属性
- 如果文件不存在,或者有额外的或缺少的属性,则创建具有所需属性的文件
源文件和Netbeans项目下载
来源:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
public class TestClass {
public static void main(String[] args) {
File propertiesFile = new File("config.properties");
if (propertiesFile.exists() && propertiesExist(propertiesFile)) {
System.out.println("Properties file was found and is intact");
} else {
System.out.println("Properties file is being created");
createProperties(propertiesFile);
System.out.println("Properties was created!");
}
}
public static boolean propertiesExist(File propertiesFile) {
Properties prop = new Properties();
InputStream input = null;
boolean exists = false;
try {
input = new FileInputStream(propertiesFile);
prop.load(input);
exists = prop.getProperty("user") != null
&& prop.getProperty("pass") != null;
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return exists;
}
public static void createProperties(File propertiesFile)
{
Properties prop = new Properties();
OutputStream output = null;
try {
output = new FileOutputStream(propertiesFile);
prop.setProperty("user", "username");
prop.setProperty("pass", "password");
// save properties to project root folder
prop.store(output, null);
} catch (IOException io) {
io.printStackTrace();
} finally {
if (output != null) {
try {
output.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
这是我的方式。(不确定是否更优雅,但它可以是一个灵感/不同的方法)
Try/catch应该足以检查文件是否存在
try {
loading files etc...
} catch (FileNotFoundException e) {
throw new MojoExecutionException( "[ERROR] File not found", e );
} catch (IOException e) {
throw new MojoExecutionException( "[ERROR] Error reading properties", e );
}
检查你加载的道具的代码:
Properties tmp = new Properties();
for(String key : prop.stringPropertyNames()) {
if(tmp.containsKey(key)){
whatever you want to do...
}
}
我使用tmp
,一个新的属性变量,进行比较,但是key
变量将保存一个字符串,所以在if
语句中,你可以将它与字符串数组进行比较,你这样做的方式取决于你。