我正在使用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
的相对路径?
答案 0 :(得分:3)
尝试从程序中打印工作目录。
String curDir = System.getProperty("user.dir");
获取该目录。然后检查该目录中是否存在目录MultiplexTicketBooking/web/images/
。
无法计算我错误的关于我当前目录的次数,并花了一些时间寻找我写给我的文件......
答案 1 :(得分: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/
。
答案 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()
方法创建所需的文件夹结构,以便将文件保存到您尝试保存的位置。