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); } }