2014-03-30 129 views
1

我已經編寫了下面的代碼來檢查屬性文件是否存在並且具有所需的屬性。如果它存在,則打印文件存在並且完整的消息,如果不存在,則它將創建具有所需屬性的屬性文件。檢查屬性文件是否存在並且需要屬性

我想知道的是,有沒有更優雅的方式來做到這一點,或者我的方式幾乎是最好的方式?此外,我遇到的小問題是,通過這種方式,它不檢查不應該存在的額外屬性,有沒有辦法做到這一點?

總結我的要求:

  1. 檢查文件是否存在
  2. 檢查它是否具有所需性能
  3. 檢查是否有額外的屬性
  4. 創建所需的屬性,如果該文件它不存在或者如果有額外的或缺少的屬性

Source files and Netbeans Project download

來源:

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(); 
      } 
     } 

    } 
    } 
} 

回答

1

這是我的方式。 (不知道是否更優雅,但它可以是一個靈感/不同的形式給出)

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語句,您可以把它比作常用3字符串和你做的方式取決於你。