使用Class.getResourceAsStream读取jar内文件不完整的问题分析
环境信息
集成开发环境: IDEA Ultimate 2020.3
JDK: 1.8.0_281 64 bit
问题出现
问题最初是在使用Maven构建JAVA项目时,尝试读取resources中的文本文件内容时遇到的。在IDEA环境中直接编译运行时,读取到的内容完全正常,但当使用Maven package打成jar包以后,读取的到的内容却是不完整,这使我百思不得其解。
读取代码如下:
package org.example;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
/**
* This is a Class.getResourceAsStream Test
*/
public class App {
public static void main(String[] args) throws IOException {
InputStream is = App.class.getResourceAsStream("/test.txt");
int available = is.available();
System.out.println("Available:" + available);
byte[] bytes = new byte[available];
int length = is.read(bytes);
System.out.println("Length:" + length);
System

本文介绍了在使用Class.getResourceAsStream读取jar内文件时遇到内容不完整的问题,分析了原因并提供了两种解决方案:1) 使用BufferedInputStream包装InputStream;2) 循环读取InputStream,直到返回-1。总结强调不应依赖available()方法来确定缓冲区大小,应确保循环读取直到文件结束。
最低0.47元/天 解锁文章
644





