Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的文件不存在异常_Java_Spring_File_Upload - Fatal编程技术网

Java中的文件不存在异常

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(

我尝试从web上传文件,文件存储在文件系统中

@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)不存在,它将自动创建它。如果不能,那么您可能在该文件夹中没有适当的权限。