从jar包读取资源文件的正确方法

Java的类加载器ClassLoader提供了两个方法,用来对ClassPath里资源读取:getResource和getResourceAsStream

getResource

public URL getResource(String name)

访问资源的访问URL。需要注意的是,在IDEA开发工具里和打包成jar包,两个路径的形式是不一样的。

IDEA开发工具结果

在IDEA开发工具里,返回的是资源所在目录的绝对路径,类似:E:\\testproject\\resource\\myres.txt。这是一个标准的文件路径。

Jar包结果

在jar包里,返回的是jar包资源专有路径格式,类似:file:/E:/testproject.jar!/resource/myres.txt,但实际上此路径在文件系统中时不存在的。所以如果如果使用此路径构建File,会导致FileNotFoundException异常。

示例:

public static void main(String[] args) throws IOException {
String myResPath = Test.class.getResource("resources/myres.txt").getFile();
File myResFile = new File(myResPath);
FileUtils.readFileToByteArray(myResFile);
}

其中Test来自另外一个jar包。此代码就会报FileNotFoundException异常。

getResourceAsStream(正确读取jar包内容的方法)

public InputStream getResourceAsStream(String name)

此方法返回读取指定资源的输入流,即直接获得jar包中文件的内容。如果要从jar包里读取资源的内容,这个才是正确的方法。

示例:

public static void main(String[] args) throws IOException {
InputStream is = Test.class.getResourceAsStream("/resource/myres.txt");
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String s="";
while((s=br.readLine())!=null)
System.out.println(s);
}

版权声明:著作权归作者所有。

相关推荐

Python读取.wav音频文件

可以使用scipy.io.wavfile.read(somefile)来读取.wav音频文件。它会返回一个元组,第一项为音频的采样率,第二项为音频数据的numpy数组。用法:from scipy.io import wavfilefs, data = wavfile.read('./output/audio.wav')也可以使用PySoundFile,它也是返回一个元组,指示第一项为数据,第二项为

读取yaml文件的shell脚本

脚本如下:#!/bin/bashfunction parse_yaml() { local yaml_file=$1 local prefix=$2 local s local w local fs s='[[:space:]]*' w='[a-zA-Z0-9_.-]*' fs="$(echo @|tr @ '\034')" (

Python从标准输入stdin读取数据

Python有几种方法来读取标准输入的数据。1、sys.stdinsys.stdin提供了read()和readline()函数,如果想按一行行来读取,可以考虑使用它:import sys line = sys.stdin.readline() while line:     print line, &nbs

Git把文件从暂存区(staging area)移除

有时我们误把文件使用git add 添加到暂存区,如果想把它从暂存区移除,但不是删掉文件,可以使用reset命令。从暂存区移除文件git reset HEAD -- path/to/file 从暂存区移除文件夹下的所有文件如果要移除文件夹下的所有文件,可以进入到文件夹,然后对文件夹执行:git reset HEAD&n

Maven添加本地Jar包到项目依赖

有两种方式添加本地的Jar包到项目里。方法一安装本地Jar到本地Maven仓库mvn install:install-file    -Dfile=/path/mylib.jar    -DgroupId=mygroup    -DartifactId=mylib    

Python判断文件是否存在的方法

方法一使用os.path.exists判断路径是否存在,包括文件夹和文件。import os.path os.path.exists(my_file) 方法二使用os.path.isfile检查路径是否为文件,如果文件存在返回True。import os.path os.path.isfile(my_file)  方法三面向对象文件系统路径操作包pathlib2,pa