在Java中,从JAR文件中读取资源文件通常使用类加载器(ClassLoader)或者通过getClass().getResourceAsStream()方法。以下是几种常见的方法:
方法一:使用 getClass().getResourceAsStream()
这是最常见和推荐的方法,因为它简单且易于理解。
java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ReadResourceFile {
public static void main(String[] args) {
// 假设资源文件名为 "config.properties",并且位于资源根目录
String resourceName = "config.properties";
// 使用类加载器获取资源文件的输入流
try (InputStream inputStream = ReadResourceFile.class.getResourceAsStream(resourceName);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
if (inputStream == null) {
System.out.println("Resource not found: " + resourceName);
return;
}
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
方法二:使用 ClassLoader.getResourceAsStream()
你也可以直接使用类加载器来获取资源文件的输入流。
java
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ReadResourceFile {
public static void main(String[] args) {
// 假设资源文件名为 "config.properties",并且位于资源根目录
String resourceName = "config.properties";
// 获取当前类的类加载器
ClassLoader classLoader = ReadResourceFile.class.getClassLoader();
try (InputStream inputStream = classLoader.getResourceAsStream(resourceName);
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
if (inputStream == null) {
System.out.println("Resource not found: " + resourceName);
return;
}
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
方法三:使用 Files.readAllLines (Java 7+)
如果你使用的是Java 7或更高版本,并且资源文件是文本文件,可以使用java.nio.file.Files类来读取文件内容。不过,请注意,这种方法通常用于文件系统路径,而不是JAR中的资源路径。对于JAR中的资源,还是推荐使用前两种方法。
java
import java.io.IOException;
import java.net.URISyntaxException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
public class ReadResourceFile {
public static void main(String[] args) {
// 假设资源文件名为 "config.properties",并且位于资源根目录
String resourceName = "/config.properties"; // 注意路径前的斜杠
// 获取资源文件的URI
try {
List<String> lines = Files.readAllLines(Paths.get(ReadResourceFile.class.getResource(resourceName).toURI()));
for (String line : lines) {
System.out.println(line);
}
} catch (IOException | URISyntaxException e) {
e.printStackTrace();
}
}
}