我有一个需要保存单个文本文件的Web Start应用程序。我想知道我应该在哪里编写文件,这样无论运行什么平台,它都会进入一个整洁的位置。
如果我得到这样的文件路径......
new File(System.getProperty("user.dir") + System.getProperty("file.separator") + "test.txt);
...然后该文件在Linux上编写得很好而且不显眼,但在Windows上的桌面上,以及我正在运行该程序的图标,这并不理想,因为用户不一定需要知道或者关心文件是否存在。
是否有一种良好的,与平台无关的获取文件路径的方式,允许我将文件保存在某处谨慎?我不太关心它最终的位置,只要桌面上没有完整的视图。
感谢。
尼尔
答案 0 :(得分:10)
user.dir
是当前的工作目录;使用user.home
代替java.io.tmpdir
代替临时文件。
这是Java 1.5的list of predefined properties。
答案 1 :(得分:6)
使用.yourapp
下的user.home
目录怎么样?您不应该面临任何权限问题,Windows用户不会真正注意到它,它将隐藏在GNU / Linux上。
对于临时内容,您可能更喜欢java.io.tmpdir
,但请记住,重启后此目录(GNU / Linux上的/tmp
)的内容可能会被删除(例如使用Debian发行版)。所以这真的是暂时的。
PS:我更喜欢使用File.separator
而不是System.getProperty("file.separator")
。
答案 2 :(得分:5)
我强烈建议您使用PersistenceService
。
答案 3 :(得分:2)
如果您不需要每个用户的文件或非常永久,您可以使用System.getProperty(“java.io.tmpdir”));
答案 4 :(得分:1)
正如其他人所说,“user.home”是一个不错的选择。如果你可以逃脱它,偏好是存储某些东西的另一个好选择。
如果您 最终使用类似“user.home”的内容,请确保您具有后备位置。我遇到过许多用户主目录不可写的情况(例如,在域服务器下锁定Windows安装)。
如果将数据存储在“user.home”目录中,则将其放在“.myApp”样式子目录下,首先验证是否可以创建该目录。如果您无法创建该目录,那么您始终可以提示用户输入存储它的位置。然后将该位置存储在系统Preference中,以便下次运行应用程序时知道它。