Initial project

This commit is contained in:
Timi
2025-07-14 18:00:50 +08:00
parent d21c40a830
commit f9d6b26cdf
15 changed files with 1979 additions and 94 deletions

View File

@@ -0,0 +1,87 @@
package com.imyeyu.io;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
/**
* Jar 文件读取
*
* @author 夜雨
* @version 2021-12-01 17:39
*/
public class JarReader extends JarFile {
private final Map<String, InputStream> files;
/**
* 默认构造
*
* @param file 文件
* @throws IOException 读取异常
*/
public JarReader(File file) throws IOException {
super(file);
files = new HashMap<>();
Enumeration<JarEntry> entries = entries();
while (entries.hasMoreElements()) {
JarEntry entry = entries.nextElement();
if (entry != null && !entry.isDirectory()) {
files.put(entry.getName(), getInputStream(entry));
}
}
}
/**
* 该文件是否存在
*
* @param path 路径
* @return true 为存在
*/
public boolean has(String path) {
return files.containsKey(path);
}
/**
* 获取文件输入流
*
* @param path 路径
* @return 输入流
* @throws FileNotFoundException 文件不存在
*/
public InputStream getInputStream(String path) throws FileNotFoundException {
if (has(path)) {
return files.get(path);
} else {
throw new FileNotFoundException("Not found file: " + path);
}
}
/**
* 读取某文件为字节数据
*
* @param path 路径
* @return 字节数据
* @throws FileNotFoundException 文件不存在
*/
public byte[] getBytes(String path) throws IOException {
return IO.toBytes(getInputStream(path));
}
/**
* 获取 jar 所有文件的数据流映射列表Map&lt;路径, 数据流&gt;
*
* @return 数据流映射列表
*/
public Map<String, InputStream> getFiles() {
return files;
}
}