从Java中的文本文件获取设置
我正在Eclipse上工作,我在mi src文件夹外创建了一个res文件夹。在其中,我创建了一个名为“config.cfg”的文本文件。看起来像这样:从Java中的文本文件获取设置,java,properties,resources,settings,Java,Properties,Resources,Settings,我正在Eclipse上工作,我在mi src文件夹外创建了一个res文件夹。在其中,我创建了一个名为“config.cfg”的文本文件。看起来像这样: # System configuration # Comments will automatically be excluded by the program radiomodemPort=20001 sisnetPort=5562 sisnetHost=213.229.135.3 sisnetUser=jogg sisnetPass=
# System configuration
# Comments will automatically be excluded by the program
radiomodemPort=20001
sisnetPort=5562
sisnetHost=213.229.135.3
sisnetUser=jogg
sisnetPass=jogg
为读取它而编写的代码不起作用:它不加载存储的任何变量。我的代码是:
private String sisnetHost;
private int sisnetPort;
private int radiomodemPort;
private String sisnetUser;
private String sisnetPass;
private boolean sisnetHostLoaded;
private boolean sisnetPortLoaded;
private boolean radiomodemPortLoaded;
private boolean sisnetUserLoaded;
private boolean sisnetPassLoaded;
public boolean getSettingsFromFile(){
Properties config = new Properties();
try {
config.load(new FileInputStream("res/config.cfg"));
Enumeration<Object> en = config.keys();
while (en.hasMoreElements()) {
String key = (String) en.nextElement();
if(key.equals(sisnetHost)){
sisnetHost = (String)config.get(key);
sisnetHostLoaded = true;
}
if(key.equals(sisnetPort)){
sisnetPort = (Integer)config.get(key);
sisnetPortLoaded = true;
}
if(key.equals(sisnetUser)){
sisnetUser = (String)config.get(key);
sisnetUserLoaded = true;
}
if(key.equals(sisnetPass)){
sisnetPass = (String)config.get(key);
sisnetPassLoaded = true;
}
if(key.equals(radiomodemPort)){
radiomodemPort = (Integer)config.get(key);
radiomodemPortLoaded = true;
}
}
} catch (FileNotFoundException ex) {
ex.printStackTrace();
return false;
} catch (IOException ex) {
ex.printStackTrace();
return false;
}
if(!(sisnetHostLoaded && sisnetPortLoaded && sisnetUserLoaded && sisnetPassLoaded && radiomodemPortLoaded))
fillUnloadedSettings();
return true;
}
私有字符串sisnetHost;
私人互联网端口;
专用int无线调制解调器导入;
私有字符串用户;
私有字符串sisnetPass;
私有布尔sisnetHostLoaded;
私有布尔sisnetPortLoaded;
私有布尔radiomodemPortLoaded;
私有布尔sisnetUserLoaded;
私有布尔sisnetPassLoaded;
公共布尔getSettingsFromFile(){
属性配置=新属性();
试一试{
load(新文件输入流(“res/config.cfg”);
枚举en=config.keys();
while(en.hasMoreElements()){
字符串键=(字符串)en.nextElement();
if(key.equals(sisnetHost)){
sisnetHost=(字符串)config.get(键);
sisnethostload=true;
}
if(key.equals(sisnetPort)){
sisnetPort=(整数)config.get(键);
sisnetportload=true;
}
if(key.equals(sisnetUser)){
sisnetUser=(字符串)config.get(键);
sisnetuserload=true;
}
if(键等于(sisnetPass)){
sisnetPass=(字符串)config.get(键);
sisnetpassload=true;
}
if(键等于(RadioModeImport)){
radiomodemPort=(整数)config.get(键);
radiomodemPortLoaded=true;
}
}
}捕获(FileNotFoundException ex){
例如printStackTrace();
返回false;
}捕获(IOEX异常){
例如printStackTrace();
返回false;
}
if(!(sisnetHostLoaded&&sisnetPortLoaded&&sisnetUserLoaded&&sisnetPassLoaded&&radiomodemPortLoaded))
fillUnloadedSettings();
返回true;
}
怎么了?在
equals
测试中,您将每个键与实例变量进行比较(这些变量似乎有默认值:null
用于对象,0
用于数字等)。使用实际字符串测试键:
if(key.equals("sisnetHost")) // NOT if(key.equals(sisnetHost))
通常建议对文字/常量调用equals
,以消除NPE的风险:
if ("sisnetHost".equals(key))
在
equals
测试中,您将每个键与实例变量进行比较(这些变量似乎具有默认值:null
用于对象,0
用于数字等)。使用实际字符串测试键:
if(key.equals("sisnetHost")) // NOT if(key.equals(sisnetHost))
通常建议对文字/常量调用equals
,以消除NPE的风险:
if ("sisnetHost".equals(key))
这里是静态类
import java.io.*;
import java.util.Properties;
public class Settings {
public static String Get(String name,String defVal){
File configFile = new File(Variables.SETTINGS_FILE);
try {
FileReader reader = new FileReader(configFile);
Properties props = new Properties();
props.load(reader);
reader.close();
return props.getProperty(name);
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
return defVal;
} catch (IOException ex) {
// I/O error
logger.error(ex);
return defVal;
} catch (Exception ex){
logger.error(ex);
return defVal;
}
}
public static Integer Get(String name,Integer defVal){
File configFile = new File(Variables.SETTINGS_FILE);
try {
FileReader reader = new FileReader(configFile);
Properties props = new Properties();
props.load(reader);
reader.close();
return Integer.valueOf(props.getProperty(name));
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
return defVal;
} catch (IOException ex) {
// I/O error
logger.error(ex);
return defVal;
} catch (Exception ex){
logger.error(ex);
return defVal;
}
}
public static Boolean Get(String name,Boolean defVal){
File configFile = new File(Variables.SETTINGS_FILE);
try {
FileReader reader = new FileReader(configFile);
Properties props = new Properties();
props.load(reader);
reader.close();
return Boolean.valueOf(props.getProperty(name));
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
return defVal;
} catch (IOException ex) {
// I/O error
logger.error(ex);
return defVal;
} catch (Exception ex){
logger.error(ex);
return defVal;
}
}
public static void Set(String name, String value){
File configFile = new File(Variables.SETTINGS_FILE);
try {
Properties props = new Properties();
FileReader reader = new FileReader(configFile);
props.load(reader);
props.setProperty(name, value.toString());
FileWriter writer = new FileWriter(configFile);
props.store(writer, Variables.SETTINGS_COMMENT);
writer.close();
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
} catch (IOException ex) {
// I/O error
logger.error(ex);
} catch (Exception ex){
logger.error(ex);
}
}
public static void Set(String name, Integer value){
File configFile = new File(Variables.SETTINGS_FILE);
try {
Properties props = new Properties();
FileReader reader = new FileReader(configFile);
props.load(reader);
props.setProperty(name, value.toString());
FileWriter writer = new FileWriter(configFile);
props.store(writer,Variables.SETTINGS_COMMENT);
writer.close();
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
} catch (IOException ex) {
// I/O error
logger.error(ex);
} catch (Exception ex){
logger.error(ex);
}
}
public static void Set(String name, Boolean value){
File configFile = new File(Variables.SETTINGS_FILE);
try {
Properties props = new Properties();
FileReader reader = new FileReader(configFile);
props.load(reader);
props.setProperty(name, value.toString());
FileWriter writer = new FileWriter(configFile);
props.store(writer,Variables.SETTINGS_COMMENT);
writer.close();
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
} catch (IOException ex) {
// I/O error
logger.error(ex);
} catch (Exception ex){
logger.error(ex);
}
}
}
此处示例:
Settings.Set("valueName1","value");
String val1=Settings.Get("valueName1","value");
Settings.Set("valueName2",true);
Boolean val2=Settings.Get("valueName2",true);
Settings.Set("valueName3",100);
Integer val3=Settings.Get("valueName3",100);
这里是静态类
import java.io.*;
import java.util.Properties;
public class Settings {
public static String Get(String name,String defVal){
File configFile = new File(Variables.SETTINGS_FILE);
try {
FileReader reader = new FileReader(configFile);
Properties props = new Properties();
props.load(reader);
reader.close();
return props.getProperty(name);
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
return defVal;
} catch (IOException ex) {
// I/O error
logger.error(ex);
return defVal;
} catch (Exception ex){
logger.error(ex);
return defVal;
}
}
public static Integer Get(String name,Integer defVal){
File configFile = new File(Variables.SETTINGS_FILE);
try {
FileReader reader = new FileReader(configFile);
Properties props = new Properties();
props.load(reader);
reader.close();
return Integer.valueOf(props.getProperty(name));
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
return defVal;
} catch (IOException ex) {
// I/O error
logger.error(ex);
return defVal;
} catch (Exception ex){
logger.error(ex);
return defVal;
}
}
public static Boolean Get(String name,Boolean defVal){
File configFile = new File(Variables.SETTINGS_FILE);
try {
FileReader reader = new FileReader(configFile);
Properties props = new Properties();
props.load(reader);
reader.close();
return Boolean.valueOf(props.getProperty(name));
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
return defVal;
} catch (IOException ex) {
// I/O error
logger.error(ex);
return defVal;
} catch (Exception ex){
logger.error(ex);
return defVal;
}
}
public static void Set(String name, String value){
File configFile = new File(Variables.SETTINGS_FILE);
try {
Properties props = new Properties();
FileReader reader = new FileReader(configFile);
props.load(reader);
props.setProperty(name, value.toString());
FileWriter writer = new FileWriter(configFile);
props.store(writer, Variables.SETTINGS_COMMENT);
writer.close();
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
} catch (IOException ex) {
// I/O error
logger.error(ex);
} catch (Exception ex){
logger.error(ex);
}
}
public static void Set(String name, Integer value){
File configFile = new File(Variables.SETTINGS_FILE);
try {
Properties props = new Properties();
FileReader reader = new FileReader(configFile);
props.load(reader);
props.setProperty(name, value.toString());
FileWriter writer = new FileWriter(configFile);
props.store(writer,Variables.SETTINGS_COMMENT);
writer.close();
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
} catch (IOException ex) {
// I/O error
logger.error(ex);
} catch (Exception ex){
logger.error(ex);
}
}
public static void Set(String name, Boolean value){
File configFile = new File(Variables.SETTINGS_FILE);
try {
Properties props = new Properties();
FileReader reader = new FileReader(configFile);
props.load(reader);
props.setProperty(name, value.toString());
FileWriter writer = new FileWriter(configFile);
props.store(writer,Variables.SETTINGS_COMMENT);
writer.close();
} catch (FileNotFoundException ex) {
// file does not exist
logger.error(ex);
} catch (IOException ex) {
// I/O error
logger.error(ex);
} catch (Exception ex){
logger.error(ex);
}
}
}
此处示例:
Settings.Set("valueName1","value");
String val1=Settings.Get("valueName1","value");
Settings.Set("valueName2",true);
Boolean val2=Settings.Get("valueName2",true);
Settings.Set("valueName3",100);
Integer val3=Settings.Get("valueName3",100);
尝试执行
System.out.println(新文件(“res/config.cfg”).getAbsolutePath())代码>并验证您确实获得了正确的文件。另外,为什么要循环它,而不仅仅是执行sisnetHost=config.get(“”)代码>,等等?尝试执行此config.load(新文件输入流(“res/config.cfg”);System.out.println(配置);结果如何?首先尝试检查您提供的文件位置是否正确。您可以在catch部分尝试一些print语句,以了解它是否真的抛出了一些错误。@thor84没有什么主要问题是Costi所指出的:多大的失误!无论如何,感谢您就如何在不使用循环的情况下改进代码提出的建议尝试执行System.out.println(新文件(“res/config.cfg”).getAbsolutePath()代码>并验证您确实获得了正确的文件。另外,为什么要循环它,而不仅仅是执行sisnetHost=config.get(“”)代码>,等等?尝试执行此config.load(新文件输入流(“res/config.cfg”);System.out.println(配置);结果如何?首先尝试检查您提供的文件位置是否正确。您可以在catch部分尝试一些print语句,以了解它是否真的抛出了一些错误。@thor84没有什么主要问题是Costi所指出的:多大的失误!无论如何,感谢您就如何在没有循环的情况下改进代码提出的建议