问题 在哪里存储Java的.properties文件?


Java教程 关于使用属性的讨论如何使用Properties类。在本教程中,它显示了写入名为“defaultProperties”的文件的属性。那么什么是属性文件的好名称和位置?

我通常写两个java应用程序之一:系统实用程序或用户程序。我认为大多数系统实用程序都有一个文件 /etc/myfile.properties 并且大多数用户程序会创建一个 ~/.myfile.properties。但是,这些路径在Windows中不起作用。是否有更通用的方法来定义这些细节以使代码平台独立?


7009
2018-01-12 15:53


起源

看看这个解决方案: stackoverflow.com/questions/966029 - Hiro2k
对你最后一个问题的简短回答是“不”。 Windows并没有像unix那样保存配置文件的好地方,因为它不像文件那样。这正是优选API发明的原因。我承认,这是一种耻辱,但你去了。 - Tom Anderson


答案:


在这种情况下,我会使用 Preferences API代替 Properties

Preferences 允许您存储/检索用户和系统设置,并自动为您处理持久性。持久性是特定于平台的;对于Windows,它使用注册表,对于Unix,它使用隐藏文件。


7
2018-01-12 16:02



我喜欢这个想法,我认为它适用于大多数项目。但是,有时我希望公开一个配置文件,用户可以在应用程序之外进行调整。有办法制作 Preferences API工作那种方式? - User1
如果您想要用户可以调整的配置文件,请使用 Properties。 - Qwerky


如果您正在讨论保留外部属性文件以配置您的应用程序 我会建议

System.getProperty("user.home")+File.separator+ "yourappname"+File.separator+"name.properties"

如果您正在谈论放置在项目内部的属性文件,请将其保留 default package

要么

其他选项是使用XML文件,或 Preference 


6
2018-01-12 15:57



这似乎可行。是否存在与平台无关的等价物 /etc?我甚至不确定在Windows中会映射到什么,因为注册表通常用于该信息。 - User1
System.getProperty("user.home") 是平台独立的,对于linux来说它将是/ home / userName /,对于windows来说就是这样 c:\\Documents and Settings\\userName\\ - Jigar Joshi
life.java:出乎意料的是,在Windows上,它不是C:\ Documents and Settings \ userName,它类似于C:\ WINNT \ Profiles \ userName。看到 bugs.sun.com/bugdatabase/view_bug.do?bug_id=4162112 和朋友。但是,出于User1的目的,这可能更好。 - Tom Anderson
@Tom什么地方可能是用户的家在最后java将解决它,它将是平台独立的 - Jigar Joshi


以下是一些替代解决方案:

  • 从类路径中读取属性文件
  • 将路径作为应用程序的启动参数传递给属性文件

从类路径中读取它可以提供灵活性,因为您可以将其包含在jar本身中,或者在应用程序启动时指定它。


0
2018-01-12 15:56





如果您将props文件捆绑为应用程序的一部分并且是只读的,则将其放在jar文件中。如果还必须更新它,则通过file:/// url使其可用,并将文件路径作为JVM(-DfileUrl = ...)参数传递。

看看这篇关于如何从类路径中的JAR读取props文件的帖子: 从JAR目录中读取属性文件


0
2018-01-12 15:58





使用jndi是一个很好的解决方案。运行时配置通过webserver的管理控制台。一旦获得属性,Webapp将立即获取更改,您不必重新启动应用程序。


0
2018-05-08 21:02