从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判断文件是否存在的方法

方法一使用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

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

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

Java创建文件的常用方法

Java创建文件有几种常用的方法File.createNewFile()创建空白文件java.io.File类里的方法createNewFile()可以用来创建文件。createNewFile()新建的是空文件。创建文件首先要使用File类构建将要被创建的文件,然后再调用createNewFile()把新文件创建出来。createNewFile()的结果分为三种情况:新文件创建成功返回true。如

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

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

Python从标准输入stdin读取数据

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

Ubuntu 16.04安装nginx的正确方式

Nginx预编译包提供了两种版本的安装:stable(稳定版)和mainline(主线版)。stable版本Nginx的安装1、添加nginx的签名密钥Ubuntu需要验证nginx的仓库签名,为了避免安装nginx出现缺失PGP key的警告,有必要把nginx包和仓库的签名密钥添加到apt的密钥环。下载nginx包和仓库的签名密钥:wget http://nginx.org/keys/ngin

读取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读取.wav音频文件

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

C++17 获取文件字节大小的方法

C++ 17可以使用filesystem来获取文件路径的字节大小:#include <cstdint> #include <filesystem> // ... std::uintmax_t size = std::filesystem::file_size("c:\\foo\\bar.txt");需要注意的是,除非是独自占有地打开文件来读,否在文件的字节大小会随着读的过程

Shell脚本正确获取Git当前所在分支的方法

看到一些博文提到获取shell脚本获取git当前分支使用了git branch,类似的方法如下:#!/bin/bash function git.branch { br=`git branch | grep "*"` echo ${br/* /} }实际上,这是一种错误的方法。原因如下:$ git branch * master next $ git checkout master^0

JavaScript使用FileReader读取文件

FileReader是前端进行文件处理的一个重要的web api,特别是在对图片的处理上。FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以来自拖放操作生成的 DataTran

CKEditor5正确添加插件的方法

CKEditor5添加插件错误ckeditor-duplicated-modules本来想在CKEditor 5的ckeditor5-build-classic添加一个Code Block插件,按官方文档,先安装@ckeditor/ckeditor5-code-blocknpm install --save @ckeditor/ckeditor5-code-block然后再代码中引入使用:impo