2012-07-31 58 views
1

我正在使用Eclipse,并且已经在mi src文件夹之外创建了一个res文件夹。其中,我创建了一个名为“config.cfg”的文本文件。看起来像这样:从Java中的文本文件中获取设置

# 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; 
    } 

怎么了?

+5

试着做了'系统。 out.println(新文件(“res/config.cfg”)。getAbsolutePath());'并验证你确实获得了正确的文件。另外,为什么你循环它而不是只是做'sisnetHost = config.get(“”);'等? – Thor84no 2012-07-31 11:00:36

+0

尝试做这个config.load(新的FileInputStream(“res/config.cfg”));的System.out.println(配置);结果是什么? – 2012-07-31 11:03:05

+0

首先尝试检查您提供的文件位置是否正确。你可以在catch部分尝试一些print语句来知道它是否真的抛出了一些错误。 – heretolearn 2012-07-31 11:03:53

回答

4

在你equals测试,你比较你的实例变量(这似乎有默认值:null的对象,0对数字等),每个键。使用实际的字符串来测试键:

if(key.equals("sisnetHost")) // NOT if(key.equals(sisnetHost)) 

通常它的建议,以消除NPE的风险,呼吁equals的文字/恒:

if ("sisnetHost".equals(key))