2008-10-17 134 views
21

是否有与.NET的App.Config相当的Java?Java相当于app.config?

如果不是有一个标准的方式来保持你的应用程序设置,以便它们可以在应用程序已分发后更改?

回答

16

对于WebApps,web.xml可用于存储应用程序设置。

除此之外,您可以使用Properties类读取和写入属性文件。

您可能还想看看Preferences类,该类用于读取和写入系统和用户首选项。这是一个抽象类,但您可以使用userNodeForPackage(ClassName.class)systemNodeForPackage(ClassName.class)获取适当的对象。

+0

您可以提供关于第一个选项的更多信息:“web.xml可用于存储应用程序设置”? 您是否建议将应用程序设置存储为`context-param`s? 还是别的? – theyuv 2016-04-27 10:49:00

+0

您可以在web.xml中放入几种不同类型的参数,但我可能确实是指`context-param`。我不记得自那以来已有7.5年了。 – Powerlord 2016-04-28 22:43:49

2

简单的方法是简单地使用属性文件,例如myapp.properties,其中包含所有设置。它不是进行设置的非常先进的方式,但它足够,或者您可以拥有自己的基于XML的设置,或从数据库获取它们等。

9

为了把@使用Properties类成例如代码的Powerlord的建议(1):

public class SomeClass { 
    public static void main(String[] args){ 
     String dbUrl = ""; 
     String dbLogin = ""; 
     String dbPassword = "";  
     if (args.length<3) { 
      //If no inputs passed in, look for a configuration file 
      URL configFile = SomeClass.class.getClass().getResource("/Configuration.cnf"); 
      try { 
       InputStream configFileStream = configFile.openStream(); 
       Properties p = new Properties(); 
       p.load(configFileStream); 
       configFileStream.close(); 

       dbUrl  = (String)p.get("dbUrl"); 
       dbLogin = (String)p.get("dbUser"); 
       dbPassword = (String)p.get("dbPassword");    
      } catch (Exception e) { //IO or NullPointer exceptions possible in block above 
       System.out.println("Useful message"); 
       System.exit(1); 
      } 
     } else { 
      //Read required inputs from "args" 
      dbUrl  = args[0]; 
      dbLogin = args[1]; 
      dbPassword = args[2];   
     } 
     //Input checking one three items here 
     //Real work here. 
    } 
} 

然后,在所述容器的所述根(例如,jar文件的顶部)放置一个文件Configuration.cnf与以下内容:

#Comments describing the file 
#more comments 
dbUser=username 
dbPassword=password 
dbUrl=jdbc\:mysql\://servername/databasename 

这种感觉并不完美(我很想听听改进),但不够好我目前的需求。