IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> jar包部署到生产环境读取不到resources下的文件 -> 正文阅读

[开发工具]jar包部署到生产环境读取不到resources下的文件

jar包部署读取不到resources下的文件
情景:idea下启动服务,正常读取。打成jar包部署到生产环境读取不到文件,报错。

目录结构:

bug信息:

出现异常啦:file:/data/service/app/dsc/dsc-be-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/insertSql.txt (Is a directory),异常发生地:    at java.io.FileInputStream.open0(Native Method)
java.io.FileNotFoundException: file:/data/service/app/dsc/dsc-be-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/insertSql.txt (Is a directory)

出现异常啦:file:/data/service/app/dsc/dsc-be-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/insertSql.txt (No such file or directory),异常发生地:    at java.io.FileInputStream.open0(Native Method)
java.io.FileNotFoundException: file:/data/service/app/dsc/dsc-be-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/insertSql.txt (No such file or directory)

2021-07-22 14:07:13.407 ERROR 1 --- [nio-9711-exec-4] c.c.b.common.base.BaseExceptionHandler   : 出现异常啦:File 'file:/data/service/app/dsc/dsc-be-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/insertSql.txt' does not exist,异常发生地:    at org.apache.commons.io.FileUtils.openInputStream(FileUtils.java:299)
java.io.FileNotFoundException: File 'file:/data/service/app/dsc/dsc-be-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/sql/insertSql.txt' does not exist


问题代码:

本地idea启动是正常的。

        String filePath = "sql/insertSql.txt";
        URL url = this.getClass().getClassLoader().getResource(filePath);
        File f = new File(url.getPath());
        if(!f.exists()){
            System.out.println(url.getPath()+"目录下文件不存在!");
            f.mkdirs();
        }
        StringBuffer stringBuffer=new StringBuffer();//用于解析文件
        StringBuffer stringBufferSql=new StringBuffer();//用户解析文件之后转换入库执行
        InputStream inputStream=new FileInputStream(f);
        byte[] buff=new byte[1024];
        int btr=0;
        while ((btr = inputStream.read(buff)) !=-1){
            stringBuffer.append(new String(buff,0,btr,"UTF-8"));
        }
        inputStream.close();
        String[] sqlArr=stringBuffer.toString().split("(\\s*\\r\\n)|(\\s*\\n)");



正确代码:

filePath通过getClassLoader()获取文件流,路径前面不加“/”。

不创建File对象,直接通过路径创建输入流。

        String filePath = "sql/insertSql.txt";
        //文件读取
        InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filePath);

        StringBuffer stringBuffer=new StringBuffer();//用于解析文件
        byte[] buff=new byte[1024];
        int btr=0;
        while ((btr = inputStream.read(buff)) !=-1){
            stringBuffer.append(new String(buff,0,btr,"UTF-8"));
        }
        inputStream.close();
        String[] sqlArr=stringBuffer.toString().split("(\\s*\\r\\n)|(\\s*\\n)");


原因:

Resource下的文件是存在于jar这个文件里面,在磁盘上是没有真实路径存在的,它其实是位于jar内部的一个路径。所以通过ResourceUtils.getFile或者this.getClass().getResource("")方法都无法正确获取文件。

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:42:15  更:2021-07-24 11:44:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/20 13:29:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码