2009-11-25 60 views
2

我有一个Web Start应用程序需要保存单个文本文件。我想知道我应该在哪里写这个文件,这样它就会放在一个整洁的地方,而不管它运行的平台如何。什么是将文件保存到Java应用程序的好地方?

如果我得到我的文件路径是这样的...

new File(System.getProperty("user.dir") + System.getProperty("file.separator") + "test.txt); 

...那么这个文件被写入好地方并不起眼的Linux,但在Windows桌面上,旁边的图标,我跑该程序来自并且这并不理想,因为用户不一定需要知道或关心该文件存在。

是否有一个很好的,独立于平台的获取文件路径的方法,可以让我将文件保存在谨慎的地方?我并不在乎它在哪里结束,而是在桌面上看不到它。

谢谢。

尼尔

回答

2

如果您不需要每个用户的文件或者是难以置信的永久可应该使用System.getProperty(“java.io.tmpdir”));

+0

谢谢。其实它需要永久。 – 2009-11-26 17:56:59

6

如何使用目录下的user.home来代替?你不应该面对任何权限问题,一个Windows用户不会真正注意到它,它将隐藏在GNU/Linux上。

对于临时性的东西,您可能更喜欢java.io.tmpdir,但请记住,此目录(GNU/Linux上的/tmp)的内容可能会在重新启动时被删除(例如,使用Debian发行版)。所以这是真正的临时性的东西。

PS:我更喜欢使用File.separator而不是System.getProperty("file.separator")

+0

@Pascal - 你应该说''/ tmp'目录的内容可能会被删除。从历史上看,UNIX系统通常有一个cron工作来从'/ tmp'和类似的地方删除“旧”文件和/或目录。 – 2009-11-25 01:10:16

+0

@Stephen你是完全正确的,抱歉的不准确。我修正了这一点。谢谢。 – 2009-11-25 01:22:45

+0

太好了。感谢那。 – 2009-11-26 17:53:31

10

user.dir是当前工作目录;临时文件使用user.home而不使用java.io.tmpdir

这是用于Java 1.5的list of predefined properties

+0

谢谢。 user.dir是。 – 2009-11-26 17:51:17

5

我强烈建议使用PersistenceService

+0

谢谢。看了这篇文章后,它似乎并没有针对我所做的事情,但我会记住它存在。 – 2009-11-26 17:52:15

1

正如其他人所说,“user.home”是一个不错的选择。如果你能摆脱它,偏好是存储某些东西的另一个好选择。

如果你最终使用类似“user.home”,然后确保你有一个备用位置。我曾经在很多情况下用户的主目录不可写(例如,锁定的Windows安装在域服务器下)。

如果您将数据存储在“user.home”目录中,然后将其放在“.myApp”样式的子目录下,并首先验证您是否可以创建该目录。如果您无法创建该目录,那么您始终可以提示用户存放该目录。然后将该位置存储在系统偏好设置中,以便在下次运行该应用程序时知道该位置。

+0

非常好。非常感谢您提供丰富的建议。 – 2009-11-26 17:58:35

相关问题