[java]代码库
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import book.basic.HelloWorld;
/**
* 从jar包中读资源文件,如配置文件等
*/
public class ResourceReader {
/**
* 第一种方法读Jar包中的资源信息,首先读取资源的URL,再读取URL对应的文件信息
*
* @param class1
* 类
* @param fileName
* 文件的相对路径
*/
public static void readFromJarA(Class class1, String fileName) {
// getResource得到一个URL对象来定位资源
URL fileURL = class1.getResource(fileName);
System.out.println("资源的URL: " + fileURL);
try {
// 打开fileURL对应的文件流
InputStream inputstream = fileURL.openStream();
BufferedReader bufferedreader = new BufferedReader(
new InputStreamReader(inputstream));
String str;
while ((str = bufferedreader.readLine()) != null) {
System.out.println(str);
}
inputstream.close();
} catch (IOException ioexception) {
ioexception.printStackTrace();
}
}
/**
* 第二种方法读Jar包中的资源信息。
*
* @param class1
* 类
* @param fileName
* 文件的相对路径
*/
public static void readFromJarB(Class class1, String fileName) {
// getResourceAsStream取得该资源输入流的引用,保证程序可以从正确的位置抽取数据
InputStream inputstream = class1.getResourceAsStream(fileName);
if (inputstream != null) {
BufferedReader bufferedreader = new BufferedReader(
new InputStreamReader(inputstream));
String str;
try {
while ((str = bufferedreader.readLine()) != null) {
System.out.println(str);
}
inputstream.close();
} catch (IOException ioexception) {
ioexception.printStackTrace();
}
}
}
public static void main(String[] args) {
Class class1 = HelloWorld.class;
// 如果文件相对路径前没有"/",则表示相对于该class文件的位置
String filePath = "config0.conf";
ResourceReader.readFromJarA(class1, filePath);
System.out.println();
filePath = "Resources/config1.conf";
ResourceReader.readFromJarB(class1, filePath);
System.out.println();
// 如果在文件相对路径前加上 "/",则表示相对于jar文件的根目录位置。
// 如"/Resources"则表示jar文件的第一层目录,目录为Resources
filePath = "/book/basic/Resources/config2.conf";
ResourceReader.readFromJarA(class1, filePath);
}
}