JAVA 中File mkdir()与mkdirs()

上传文件淌过的坑

转载自:https://blog.csdn.net/HuiTuLang/article/details/51596572

源自上传文件的异常定位:

@RestController
public class FileUploadController {

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");

    @PostMapping("/upload")
    public String uploadFile(MultipartFile file, HttpServletRequest req){
        String format = sdf.format(new Date());
        String  realPath = req.getServletContext().getRealPath("/img")+format;
        File folder = new File(realPath);
        if (!folder.exists()){
            folder.mkdirs();
        }
        String oldName = file.getOriginalFilename();
        String newName = UUID.randomUUID().toString() + oldName.substring(oldName.lastIndexOf("."));
        try {
            file.transferTo(new File(folder, newName));
           String url = req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+"/img"+format+newName;
           return url;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "error";
    }

今天有人问我,为什么他的权限写了,使用File.mkdir()却创建不了文件,我觉得这个要和大家分享一下,让大家少走弯路。

1、先来看File.mkdirs()

File dir = new File("Environment.getExternalStorageDirectory().getPath()/xxx/yyy");

if (!dir.exists()) {

    dir.mkdirs();  

}

解说:这是一个在SDCard上建立文件的方法,mkdirs()方法一般是用来建立“多级”文件夹目录的,(当你不知道此文件夹是否存在,也不知道父文件夹存在不存在),就可用此方法,它建立文件夹的原则是:如果父文件夹不存在并且最后一级子文件夹不存在,它就自动新建所有路经里写的文件夹;如果父文件夹存在,那么它就会直接在已经存在的父文件夹下新建子文件夹。 

拿上面的例子来说,当xxx这个父级文件夹不存在且yyy这个文件夹也不存在时,那么当new这个file时,会自动创建“xxx/yyy”这个层级文件夹,如果xxx这个父级文件夹存在,那么就直接在xxx下面一级创建yyy这个文件夹。

2、File.mkdir()

File dir = new File("Environment.getExternalStorageDirectory().getPath()/xxx/yyy");

解说:如果你想在已经存在的文件夹yyy下建立新的文件夹(zzz文件夹),就可以用File.mkdir()方法。此方法不能在不存在的文件夹下建立新的文件夹。必须要现有父文件夹才能在父文件夹下建立想要的子文件夹,也就是现有爸爸才能有儿子。假如想建立名字是"/xxx/yyy/zzz"文件夹,那么它的父文件夹必须存在。它一般用来创建单级目录。

对了,补充一点,file.mkdir() 和file.mkdirs()它们只是用来创建文件夹目录,如果想要创建xxx.jpg,xxx.txt这样的文件,需要这样

    /** 

     * 在SD卡上创建文件 

     *  

     * @throws IOException 

     */  

    public File creatSDFile(String fileName) throws IOException {  

        File file = new File(fileName);  

        file.createNewFile();  

        return file;  

    }  

  

猜你喜欢

转载自blog.csdn.net/qq_28583239/article/details/101169109