Java中的文件不存在异常
我尝试从web上传文件,文件存储在文件系统中Java中的文件不存在异常,java,spring,file,upload,Java,Spring,File,Upload,我尝试从web上传文件,文件存储在文件系统中 @RequestMapping(value = "/upload", method = RequestMethod.POST) public @ResponseBody String handleFileUpload( @RequestParam("name") String name, @RequestParam("file") MultipartFile file) { if (!file.isEmpty(
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody String handleFileUpload(
@RequestParam("name") String name,
@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
File file1 = new File(name + ".upload");
BufferedOutputStream stream = new BufferedOutputStream(
new FileOutputStream(file1));
stream.write(bytes);
stream.close();
return "You successfully uploaded " + name + " into " + name
+ "-uploaded !";
} catch (Exception e) {
e.printStackTrace();
return "You failed to upload " + name + " => " + e.getMessage();
}
} else {
return "You failed to upload " + name
+ " because the file was empty.";
}
}
上述代码运行良好。但是当我尝试使用绝对目录时,它失败了,代码如下
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody String handleFileUpload(
@RequestParam("name") String name,
@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
File file1 = new File("c:/" + name + ".uploaded");
file1.getParentFile().mkdirs();
BufferedOutputStream stream = new BufferedOutputStream(
new FileOutputStream(file1));
stream.write(bytes);
stream.close();
return "You successfully uploaded " + name + " into " + name
+ "-uploaded !";
} catch (Exception e) {
e.printStackTrace();
return "You failed to upload " + name + " => " + e.getMessage();
}
} else {
return "You failed to upload " + name
+ " because the file was empty.";
}
}
它抛出文件不存在异常,我已经创建了目录。有人知道原因吗?谢谢 将代码块更改为以下内容
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public @ResponseBody String handleFileUpload(
@RequestParam("name") String name,
@RequestParam("file") MultipartFile file) {
String yourUploadDirectory = "uploads";
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
File file1 = new File("c:/" + yourUploadDirectory + "/" + name + ".uploaded");
// You must write this line so that the designated file is first created, otherwise getParentFile() will throw error.
file1.createNewFile();
file1.getParentFile().mkdirs();
BufferedOutputStream stream = new BufferedOutputStream(
new FileOutputStream(file1));
stream.write(bytes);
stream.close();
return "You successfully uploaded " + name + " into " + name
+ "-uploaded !";
} catch (Exception e) {
e.printStackTrace();
return "You failed to upload " + name + " => " + e.getMessage();
}
} else {
return "You failed to upload " + name
+ " because the file was empty.";
}
}
有一个专门的文件夹用于上传总是好的。问题是
“c:/”+name+“.upload”
中没有物理文件,所以file1.getParentFile()
不存在。@Luigimendoza不应该是mkDirs上的NPE吗?否。它不会抛出“文件不存在异常”。没有这样的例外。不要对这样的事情马虎。它可能会抛出FileNotFoundException,
但您需要确认这一点。最好使用file1=newfile(您的UploadDirectory,name+“.upload”)代码>。通过这种方式,yourUploadDirectory
可以包含一个基于应用程序部署的操作系统的值。我已经对它进行了测试,它似乎需要先创建目录,然后创建文件,然后才能工作。它将。。但是,如果父目录(即uploads)不存在,它将自动创建它。如果不能,那么您可能在该文件夹中没有适当的权限。