实现思路是获取到jar包平级的绝对路径,在这个目录上进行操作。

        实现也非常简单:

        File directory = new File("");
        String basePath = directory.getCanonicalPath();

package com.wdf.test.javabasic.io.spring;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.*;

/**
 * 测试插入文件到目录中
 * 非写死目录
 */
@RestController
public class InsertResourceFileTest {

    /**
     * 用于测试springboot项目的例子
     * 调用接口即可
     * @return
     * @throws IOException
     */
    @GetMapping("insert/resource/file")
    public String test1() throws IOException {
        // 获取基本路径 【最核心的一句代码...】
        File directory = new File("");
        String basePath = directory.getCanonicalPath();

        // 新建一个a.txt文件,并写点东西进去
        basePath = basePath + "/a.txt";

        // 创建文件
        File file = new File(basePath);
        file.createNewFile();

        // 利用流写入文件,跟本次主题关系不大
        OutputStream outputStream = new FileOutputStream(basePath);
        outputStream.write("123".getBytes());
        outputStream.flush();
        outputStream.close();

        // 实现伟大的业务操作...
        /**
         * 。。。。
         */

        // 保护资源,记得删除文件呀
        // file.delete();
        return "finish";
    }


    /**
     * 仅作理解的方法,没有什么含义
     * @return
     * @throws IOException
     */
    public static String getBasePathForNote() throws IOException {
        /**
         * 最重要的就是这个地方,通过这种方式获取的路径是一个绝对路径,
         * 而且这个路径是和jar平级的目录下。
         * 例如我们把jar放在了【E:/test/a.jar】
         * 那么我们获取的目录就是【E:/test/】,就可以在这个目录下面新建文件,为所欲为了。
         * 如果是暂存的文件还是建议马上删除,或者过后采取一个机制进行删除,保护空间
         */
        File directory = new File("");
        String path = directory.getCanonicalPath();
        System.out.println("getCanonicalPath  : " + directory.getCanonicalPath());
        System.out.println("path  : " + directory.getPath());
        System.out.println("getAbsolutePath  : " + directory.getAbsolutePath());
        /**
         * getCanonicalPath  : D:\project\wdf\web\SpringBoot-WDF
         * path  :
         * getAbsolutePath  : D:\project\wdf\web\SpringBoot-WDF
         */
        return path;
    }

}

最近拿到一个需求,需要把一个excel模板的内容获取到,处理完成后,生成一个新的文件。再把这个新的文件转成pdf文件。

        在这个过程中,有些点也花了一些时间,但是之前一直没出的问题的路径,部署到服务器后开始出问题了。

        可以获取到模板文件,但是新生成的excel文件打不开,路径出现了问题。路劲中一直有感叹号。我本来的思路想再Reource目录下面建一个缓存文件的目录,用于临时文件的读写。但是路径一直有问题。

/xxx.jar!/BOOT-INF/classes!/

        问题报错的内容就像这样了。这是其中路径提示有问题的那一部分内容。

        最后在网上找了挺多博客,写的都是这种套路,获取资源是ok的,但是往里写入就有问题。后来也是偷师了前公司的项目里的暂存用的,我看了一下直接想扇自己耳光,感觉太简单了,但是自己又想不到,就用了一个空的 new File("");