在Java中的File中指定相对路径

时间:2012-06-16 21:37:08

标签: java image

我正在使用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无效。有没有办法在Java中指定File的相对路径?

4 个答案:

答案 0 :(得分:3)

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

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

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

无法计算我错误的关于我当前目录的次数,并花了一些时间寻找我写给我的文件......

答案 1 :(得分:2)

您可以使用以下内容获取项目的路径 -

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

因此,您可以拥有constantsproperties文件,您可以在相对路径之后定义MultiplexTicketBooking/web/images/的路径。

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

确保项目路径后面的文件夹即MultiplexTicketBooking/web/images/

答案 2 :(得分: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)

答案 3 :(得分:1)

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