3

我正在尝试在我的服务器中创建一个文件。我已经发送了一张图片,我想在我的服务器的文件夹中创建该图片,但使用相对路径。

String filePath = "C:\\Users\\Administrador\\Desktop\\Proyecto\\clienteServidor\\Server\\folder\\image.jpg";
File imageFile = new File(filePath);
...

我正在使用绝对路径。

谢谢

4

2 回答 2

0

对目录进行硬编码很少有利于编码。如果您的代码中有错字会发生什么。使用组合././*

甚至使用

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

这是解释here

于 2013-04-15T22:10:31.223 回答
-1

这是可行的,但正如 Dmitry 所说,它可能不适用于每台服务器。SecurityManager如果您的 webapp 有权写入该文件夹,则应咨询 class。否则你会得到一个例外。

一种方法是通过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 后,将其转换为File并将任何相对路径附加到图像文件夹。

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

于 2013-04-15T21:02:59.930 回答