我的Java服务器的相对路径

我的Java服务器的相对路径,java,directory,relative-path,Java,Directory,Relative Path,我正在尝试在我的服务器中创建一个文件。我已经发送了一个映像,我想在服务器的文件夹中创建该映像,但具有相对路径 String filePath = "C:\\Users\\Administrador\\Desktop\\Proyecto\\clienteServidor\\Server\\folder\\image.jpg"; File imageFile = new File(filePath); ... 我用的是绝对路径 谢谢这是可行的,但正如Dmitry所说,它可能无法在每台服务器上工作S

我正在尝试在我的服务器中创建一个文件。我已经发送了一个映像,我想在服务器的文件夹中创建该映像,但具有相对路径

String filePath = "C:\\Users\\Administrador\\Desktop\\Proyecto\\clienteServidor\\Server\\folder\\image.jpg";
File imageFile = new File(filePath);
...
我用的是绝对路径


谢谢

这是可行的,但正如Dmitry所说,它可能无法在每台服务器上工作<如果您的Web应用程序具有写入该文件夹的权限,则应咨询code>SecurityManager类。否则你会得到一个例外

一种方法是通过
ServletContext

URL webAppRoot = this.getServletConfig().getServletContext()
    .getResource("/images/new-image.jpg");
这将指向您的
${tomcat}/webapps/mywebapp/images/new image.jpg

另一种方法是通过
ProtectionDomain

URL runningClassLocation = this.getClass().getProtectionDomain()
    .getCodeSource().getLocation();
但这很可能会给您
jar:file://...myapp.jar!/my/package/servlet.class

获得URL后,将其转换为
文件
,并将任何相对路径附加到图像文件夹中

更新: 我同意吉姆的观点,并强调这样做只是为了学术目的。
Java与PHP不同,因此您不应该在web应用程序的文件夹中有
上传
文件夹。通常,这是通过允许管理员级别的用户指定为应用程序的存储需要而保留的文件夹的文件路径来实现的。

硬编码目录很少适合编码。如果代码中有输入错误会发生什么。结合使用
/
/*

甚至使用

new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

这已经解释清楚了。

大家好,欢迎来到SO!请详细说明您的问题-在执行此操作时,您到底遇到了什么问题?什么东西不能按预期工作?你不能。根据您使用的服务器,文件系统可能无法写入,甚至无法用于您的应用程序。如果您想了解更多详细信息,您需要告诉我们您使用的服务器。该来源没有任何问题。但我不想使用所有路径。我得到了Tomcat 7.0Maybe temp dir将是好的`String path=System.getProperty(“java.io.tmpdir”)
java.io.tmpdir
适用于临时存储,但如果您想永久存储上传的图像,则不适用。这种想法在某些情况下可能有效,但通常不可靠。如果应用程序是从war文件运行的,这将失败。@Jim AFAIK服务器将把
mywebapp.war
文件解压缩到
${tomcat}/work/mywebapp
中,这样它就可以工作了。当指定为
/WEB-INF/Struts config.xml
时,您认为Struts如何读取其配置文件?对于我提到的第一种方法,我没有提到阅读。您可以阅读所有您想要的内容,Java系统就是为此而设计的。你不能做的是写入(即创建一个文件),这是OP正在尝试的。你可以使用
getResource()
读取它,但它是一个URL,你可以从中获取
文件,并检查它是否可以写入该位置。第二个选项就是答案/C:/Users/Administrador/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/SetasServer/WEB-INF/classes/com/rest/resource/PhotoResource.class A临时文件夹。我对Servlet没有太多的了解,我如何调用Servlet方法,比如doPost???你能给我解释清楚吗?感谢我的班级给我的道路/C:/Users/Administrador/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp2/wtpwebapps/SetasServer/WEB-INF/classes/com/rest/resource/PhotoResource.class这个文件夹是什么?因为我的项目在另一个文件夹中…当你在Eclipse中运行你的项目时,它的默认行为是创建一个像那样的临时文件夹,然后从那里运行你的webapp,这样它就不会干扰现有的Tomcat安装。我想你指的是代码片段。/和的组合如何/