-1

我正在尝试获取我的 Eclipse 项目的绝对路径:所以我写了这个;

   File file= new File("");
   System.out.println(file.getCanonicalPath());
   projectPath=file.getCanonicalPath();

所以当我在一个类中作为java应用程序执行它时它给了我正确的路径 C:\Documents and Settings\Administrateur\Bureau\ready code\JavaServerFacesProject

但是当我尝试在我的网络应用程序中使用它时,它给出了这个:

C:\Documents and Settings\Administrateur\Bureau\eclipse\eclipse

所以任何想法如何做到这一点非常感谢

4

2 回答 2

1

在 Eclipse 中,您可以在 Run Configurations 对话框中为您的项目设置工作目录。

您是否尝试过在那里设置非默认设置?

(如果你不能设置任何东西,你可以尝试这里建议的 JVM 选项:https ://stackoverflow.com/a/7838900/1143126 )

于 2012-11-29T12:22:44.030 回答
1

从 Web 应用程序读取文件是一个典型的陷阱,无论何时执行此操作都会受到影响。

Web 应用程序(尤其是 Java EE)没有考虑使用文件系统进行读/写操作,它们依赖于容器(在您的情况下为 Tomcat)知道如何获取所需资源的事实。

所以基本的建议是:不要这样做。

但由于我基本上讨厌这种答案,所以我会给你一些建议。

永远不要使用工作目录

你永远不知道你的工作目录在哪里,而且更常见的是,在任何生产系统中,web-app 都无权在工作目录上写入。

例如,如果你将 webapp 部署到 tomcat 服务器,在 windows 机器上作为服务运行,你会发现你的工作目录是\Windows\System32

你真的不想在那里写一些上传的文件,例如......

你有几个选择,我更喜欢在 web-xml 中设置一个路径,并可能从服务器配置中覆盖它(使用上下文)。

第二个选项,更好的是,将路径保存到 Web 应用程序访问的数据库表中。

前任:

在你设置的 web.xml

<context-param>
  <description>Uploaded files directory</description>
  <param-name>file-storage</param-name>
  <param-value>c:\app\storage\uploaded</param-value>
</context-param>

然后在你的 server.xml 中(或者你可以使用上下文目录并在那里放置一个包含以下代码的文件)你在上下文中覆盖这个设置。

<Context
    <Parameter
      name="file-storage"
      value="E:\app\storage\uploaded"
      type="java.lang.String"
      override="false" />
</Context>

检查tomcat文档

第三个选项,在稍微愉快的情况下,您只想编写一些临时文件,webapp 工作目录可作为 servlet 上下文参数访问,名为: javax.servlet.context.tempdir

如果我在你那里我会去数据库表。

所有这些复杂性是因为您可以在不同的tomcat实例上拥有同一个应用程序的多个实例,甚至在不同的机器上,甚至将不同的Web应用程序放到同一个实例中,因此没有简单的方法来制作“相对”路径就是全部情况。

大多数网络应用程序决定在 db 上序列化数据(使用 lob 或类似对象),只要有这种必要性,或者依赖某种服务(FTP、cifs、nfs ...)。

于 2012-11-29T13:29:41.143 回答