如何使工作目录文件可用于WebStart应用程序?

时间:2010-08-25 21:52:14

标签: java jar java-web-start working-directory

我们必须使用JWS在Internet上提供Java应用程序演示。它很顺利;所有缺少的是为应用程序提供工作目录文件。

我们知道getResource()方式......问题是我们为同一个应用程序提供了不同的插件,并且每个插件都需要在其工作目录中使用不同的文件(通常是不同版本的相同文件)才能正常工作。因此,当我们希望应用程序具有不同的行为时,我们只需更改工作目录。

目前,该演示文件打包在一个已签名的jar文件中,并且正确加载,直到它需要工作目录中的文件为止。显然,此演示的Internet用户没有准备好文件。我们需要一种方法使这些文件可用于其工作目录中的WebStart应用程序(读/写访问)。

我们已经考虑过一些事情,例如让应用程序在启动时自行下载文件,或者将它们打包在jar中并在启动时提取它们。

寻找建议和/或新想法。我将继续努力......如果我找到可靠的东西,我会更新。

非常感谢!

2 个答案:

答案 0 :(得分:1)

我说我会分享我在研究中发现的符合我需要的东西。这是我到目前为止所拥有的。

我发现当前工作目录(CWD)的概念在Java Web Start(JWS)应用程序的上下文中并没有真正意义。这导致我不再试图找到JWS的CWD并开始寻找其他选项。

我发现(不,我不知道)您可以通过在其名称前添加“/”来引用(使用getResource())到JAR文件根目录中的文件。 (例如,“/ log4j.properties”。)这样做的影响是我现在可以获取任何只在该JAR文件的根目录中以只读方式引用的文件(实际上只是一个ZIP文件) )。您可以使用AnyClass.class.getResourceAsStream引用JAR文件根目录中的任何文件。这排除了运行应用程序所需的只读文件的问题,代价是代码中的切换,告知应用程序是从有效的CWD还是从JWS上下文运行。 (您可以非常简单地在JWS应用程序的JNLP文件中设置属性,并检查是否设置了该属性以了解查找文件的位置。)

对于只写文件(在我的情况下是日志文件),我使用了该属性,添加了一个带有应用程序名称的目录:< user.home> /。appname并向其添加了日志文件。

读/写文件(在我的情况下我没有)可能只是在与只写文件相同的位置。如果需要,该软件可以处理将它们上传到某个地方,一旦被修改,我想。

这就是我现在处理这个问题的方式。

答案 1 :(得分:0)

请注意,您可以明确要求提供一项服务,以获取对计算机的文件访问权限(除非您一路走来并要求完全访问权限(需要签名的jar文件))。

然后你需要确定这些文件需要去哪里 - 基本上你不知道你在哪里以及你是否可以在任何地方写字。您可以创建tmp文件,但这些文件会消失。

文件系统抽象与JNLP服务器通信是否会将用户数据存储在服务器上?