问题描述:本地可以正常读取areacode.json文件,打成jar包在测试环境找不到该文件。

问题代码:

static {
StringBuffer strbuffer = new StringBuffer();
try {
String path = Thread.currentThread().getContextClassLoader().getResource("areacode.json").getPath();
File myFile = new File(path);
if (myFile.exists()) {
InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(path), "UTF-8");
BufferedReader in = new BufferedReader(inputStreamReader);
String str =null;
while ((str = in.readLine()) != null) {
strbuffer.append(str);
}
in.close();
}
} catch (Exception e) {
e.getStackTrace();
}
}

解决方案:

static {
StringBuffer strbuffer = new StringBuffer();
try {
InputStream stream = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("areacode.json");
BufferedReader in = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
String str = null;
while ((str = in.readLine()) != null) {
strbuffer.append(str);
}
logger.info("【地区转换工具类】 文件输入流获取完成, 输入流关闭!");
in.close();
} catch (Exception e) {
e.getStackTrace();
}
}

参考来自:https://blog.csdn.net/baidu_23275675/article/details/82622577

一般方法:

Properties pps = new Properties();
File file = ResourceUtils.getFile("classpath:defult.properties");
pps.load(new FileReader(file));

此时打包成jar运行时会报错: java.io.FileNotFoundException

• 在调试过程中,文件是真实存在于磁盘的某个目录。此时通过获取文件路径,是可以正常读取的,因为文件确实存在。

• 而打包成jar以后,实际上文件是存在于jar这个文件里面的资源文件,在磁盘是没有真实路径的。所以通过ResourceUtils.getFile或者this.getClass().getResource("")方法无法正确获取文件。

正确方法:

  •采用流的方式进行处理,同时读取流时设置编码utf-8

  •使用InputStream inputStream=this.getClass().getResourceAsStream("") 会指定要加载的资源路径与当前类所在包的路径一致。因此能正常读取文件。

Properties pps = new Properties();
InputStream stream = getClass()
.getClassLoader()
.getResourceAsStream("defult.properties");
BufferedReader br = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
pps.load(br);

正确读取resources目录下的文件的更多相关文章

  1. [Java] 在 jar 文件中读取 resources 目录下的文件

    注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...

  2. SpringBoot读取资源目录下的文件

    需要读取resources目录下的文件,那么方法如下: 假设在资源目录下的template目录下有一个文件a.txt,获取到文件流的方式 InputStream stream = this.getCl ...

  3. SpringBoot打成jar包后,获取不到读取resources目录下文件路径的问题

    问题描述: Springboot没有打成jar之前,可以成功获取读取resources目录下xxx.json文件的 路径.但是打成jar包后,接口调不通,原因是获取不到文件的路径. 原因: 在本地进行 ...

  4. iOS案例:读取指定目录下的文件列表

    // // main.m // 读取指定目录下的文件列表 // // Created by Apple on 15/11/24. // Copyright © 2015年 Apple. All rig ...

  5. Python 读取某个目录下的文件

    读取某个目录下的文件,如'/Users/test/test_kmls'目录下有test1.txt.test2.txt. 第一种方法读出的all_files是test1.txt.test2.txt im ...

  6. java 读取固定目录下的文件(和上篇差点儿相同)

    package gao.org; import java.io.FileNotFoundException; import java.io.IOException; import java.io.Fi ...

  7. Spring boot 读取resource目录下的文件

    背景:最近做项目重构将以前的ssh + angular js架构,重构为spring boot + vue.项目是一个数据管理平台,后台涉及到多表关联查询,数据导入导出等. 问题:读取resource ...

  8. Java 读取某个目录下所有文件、文件夹

    /** * @Author: * @Description:获取某个目录下所有直接下级文件,不包括目录下的子目录的下的文件,所以不用递归获取 * @Date: */ public static Lis ...

  9. 安卓上为什么不能用system.io.file读取streammingAssets目录下的文件

    首先,看文档: Streaming Assets   Most assets in Unity are combined into the project when it is built. Howe ...

随机推荐

  1. jpa remove

    直接使用em.remove会报错,IllegalArgumentException: Removing a detached instance 即对象处于脱管的状态,使用merge使之被session ...

  2. java 将MySql数据库中的数据(某一列)取出放入数组中 转

    转:http://blog.csdn.net/ewili/article/details/8605638 假设mysql中test数据库中有个表式score,有数据,我只取第一列的数据出来: publ ...

  3. (转)CentOS7下解决ifconfig command not found的办法

    转:https://blog.csdn.net/ryu2003/article/details/78492127 注:本办法仅限于可联网的机器,即在安装时设置了IP地址和DNS可正常上网. 解决办法如 ...

  4. 1.安装TypeScrpit

    https://www.tslang.cn/index.html 1.vs安装 之前网上的查的安装方法是先安装nodejs,之后执行 npm install -g typescript 但是从官网的下 ...

  5. php+form表单的文件上传

    <!doctype html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. [转]Scikit-learn使用总结

    1 scikit-learn基础介绍 1.1 估计器(Estimator) 估计器,很多时候可以直接理解成分类器,主要包含两个函数: fit():训练算法,设置内部参数.接收训练集和类别两个参数. p ...

  7. 企业SRC整理

    0.SRCs|安全应急响应中心 - 0xsafe 1.腾讯安全应急响应中心(TSRC) 2.360安全应急响应中心 3.京东安全应急响应中心(JSRC) 4.平安集团安全应急响应中心(PSRC) 5. ...

  8. (三)Schema与数据类型优化

    1.Schema schema,中文叫模式,是数据库的组织和结构 2.选择优化的数据类型 更小的通常更好:尽量使用可以正确存储数据的最小数据类型 简单就好:简单数据类型的操作通常需要更少的cpu周期. ...

  9. Mysql 实现基于binlog的主从同步

    工作原理 1.主节点必须启用二进制日志,记录任何修改了数据库数据的事件.2.从节点开启一个线程(I/O Thread)把自己扮演成 mysql 的客户端,通过 mysql 协议,请求主节点的二进制日志 ...

  10. luoguP1312 Mayan游戏 题解(NOIP2011)

    luoguP1312 Mayan游戏 题目 #include<bits/stdc++.h> #define ll long long #define rg register #define ...