2016-09-19 124 views
-1

我有3个属性文件,如web1.properties,web2.properties,web3.properties。我想用单个属性对象一次加载所有的属性文件。如何使用java加载和读取多个属性文件

Properties prop = new Properties(); 
prop.load("web1.properties"); 
prop.load("web2.properties"); 
prop.load("web3.properties");` 

我试着加载多个属性文件的下面的代码。

public class ReadFileExtension { 
    static Properties prop = new Properties(); 
    public static void main(String[] args) throws IOException { 
     String projectFolder = System.getProperty("user.dir"); 
     File f1 = new File(projectFolder); 
     File[] listOfFiles = f1.listFiles(); 
     System.out.println("Length:"+listOfFiles.length); 
     for(int i=0;i<listOfFiles.length;i++){ 
      if (listOfFiles[i].isDirectory()) { 
       //System.out.println("File " + listOfFiles[i].getAbsolutePath()); 
       String prop1 = listOfFiles[i].getAbsolutePath(); 
       if(prop1.contains("properties")){ 
        System.out.println(prop1); 

        File folder = new File(prop1); 
        File[] listOfFiles1 = folder.listFiles(); 

         for (int j = 0; j < listOfFiles1.length; j++) { 
          if (listOfFiles1[j].isFile()) { 
          //System.out.println("Feature File: " + listOfFiles1[j].getAbsolutePath()); 
          //prop.load(new FileInputStream(listOfFiles1[j].getAbsolutePath())); 
          prop.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(listOfFiles1[j].getAbsolutePath())); 
          } 
         } 
       } 
       } 
     } 
     System.out.println("Prop 1: "+prop.getProperty("ApplicationURL")); 
     System.out.println("Prop 2: "+prop.getProperty("Application")); 
    } 
} 
+0

您可以使用[this]之类的东西(http://stackoverflow.com/questions/5093432/multiple-properties-files)。 – Abhishek

+1

如果你执行你发布的代码,你会得到什么? –

+0

@Abhishek NullPointerException在该链接中运行代码时。 – tsivarajan

回答

0

您可以使用此语法加载多个属性。

Properties properties = new Properties(); 

properties.load(new FileInputStream("web1.properties")); 

Properties properties2 = new Properties(); 
properties2.load(new FileInputStream("web2.properties")); 

properties.putAll(properties2); 

阅读属性将是相同的。

+0

这是一个用于两个属性文件。我需要加载三个像这样的属性。 – tsivarajan

+0

只需添加代码即可将第三个文件和属性读取到第一个对象 –

+0

请查看我的编辑。 – tsivarajan

1

我认为阿布舍克提供的链接将会起作用。

我已经在我的本地机器上测试过它,并且可以正常工作。

代码:

public class MultiplePropertyLoader { 

    private static Properties properties; 

    public static void main(String[] args) { 

     try { 
      properties = new Properties(); 
      properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("resources/SecurityKey.properties")); 
      properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("resources/SecurityKey1.properties")); 
      properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("resources/SecurityKey2.properties")); 

      System.out.println("::: Property File 1 Data :::"); 
      System.out.println(properties.getProperty("ENCRYPTION_KEY")); 
      System.out.println(properties.getProperty("USERNAME")); 
      System.out.println(properties.getProperty("PASSWORD")); 

      System.out.println("::: Property File 2 Data :::"); 
      System.out.println(properties.getProperty("ENCRYPTION_KEY1")); 
      System.out.println(properties.getProperty("USERNAME1")); 
      System.out.println(properties.getProperty("PASSWORD1")); 

      System.out.println("::: Property File 3 Data :::"); 
      System.out.println(properties.getProperty("ENCRYPTION_KEY2")); 
      System.out.println(properties.getProperty("USERNAME2")); 
      System.out.println(properties.getProperty("PASSWORD2")); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

请邮寄我,如果不工作。

这里是一个my git repository URL与运行代码和示例数据。 您可以克隆存储库并在本地计算机上运行,​​它将起作用。

+0

你好@tsivarajan如果这个答案解决了你的问题,那么请接受答案。 –