0

我正在使用 Spring 和 Hibernate 上传图像。我将图像保存在服务器上,如下所示。

File savedFile = new File("E:/Project/SpringHibernet/MultiplexTicketBooking/web/images/" + itemName);
item.write(savedFile);

itemName解析请求后的图片文件名在哪里( enctype="multipart/form-data")。但是,我需要在File. 如下图所示。

File savedFile = new File("MultiplexTicketBooking/web/images/" + itemName);
item.write(savedFile);

但它不起作用抛出FileNotFoundException. 有没有办法File在 Java 中指定相对路径?

4

4 回答 4

3

尝试从您的程序中打印工作目录。

String curDir = System.getProperty("user.dir");

为您获取该目录。然后检查该目录MultiplexTicketBooking/web/images/中是否存在目录。

数不清有多少次我弄错了我当前的目录并花了一些时间寻找我写过的文件......

于 2012-06-16T21:56:28.857 回答
2

您可以使用以下命令获取项目的路径 -

File file = new File("");
System.out.println("" + file.getAbsolutePath());

因此,您可以拥有一个constants或一个properties文件,您可以在其中定义MultiplexTicketBooking/web/images/相对路径之后的路径。

您可以将路径附加到您从中获取的路径中file.getAbsolutePath(),这将是文件的真实路径。- file.getAbsolutePath() + MultiplexTicketBooking/web/images/

确保项目路径之后的文件夹即MultiplexTicketBooking/web/images/存在。

于 2012-06-16T21:56:14.390 回答
2

似乎服务器应该提供在方法getContextPath()getRealPath(String). 基于这些类型的服务器相关和可重现的路径来构建路径是很常见的。不要使用在服务器中几乎没有user.dir意义的东西。

更新

ServletContext sc=request.getSession().getServletContext(); 
File savedFile = new File(sc.getRealPath("images")+"\\" + itemName);

而不是使用"\\"我倾向于用以下内容替换它,这将导致为每个平台使用正确的文件分隔符。当客户端决定将基于 MS/ISS 的服务器换成 Linux/Tomcat 堆栈时,保持跨平台兼容性。;)

File savedFile = new File(sc.getRealPath("images"), itemName); //note the ','

详情请参阅File(String,String)

于 2012-06-16T22:19:15.953 回答
1

您可以使用 指定绝对路径和相对路径FileFileNotFoundException可以抛出,因为文件夹可能在那里。尝试mkdirs()首先使用该方法创建所需的文件夹结构,以便将文件保存在您尝试保存的位置。

于 2012-06-16T21:54:52.150 回答