java 打包后 文件资源文件 jar,JAVA打包成JAR无法找到资源文件
源程序:
package org.lza;
import java.io.*;
public class test{
public static void main(String[] args)throws Exception{
BufferedReader br=new BufferedReader(new FileReader("src/test01.txt"));
String str=br.readLine();
System.out.println(str);
}
}
在Eclipse中運行正常 ,但打包成JAR后 用命令 JAVA -JAR test.jar 則會報錯說找不到文件test01.txt,但是在JAR包中又有test01.txt文件
這是為什么呢 主要是因為JAR包是一個單獨的文件 而不是文件夾 所以無法通過相對路徑或者絕對路徑去尋址。通過多次查資料
我找到了類裝載器這個資料:
ClassLoader 是類加載器的抽象類。它可以在運行時動態的獲取加載類的運行信息。
主要有兩個方法
public URL getResource(String name) 可以查找具有給定名稱的資源
public InputStream getResourceAsStream(String name) 可以直接讀取指定資源的輸入流也就是說可以直接獲得jar包中文件的內容。
改進程序:
package org.lza;
import java.io.*;
public class test{
public static void main(String[] args)throws Exception{
Resource res=new Resource();
res.getResource();
}
}
class Resource {
public void getResource() throws IOException{
//返回讀取指定資源的輸入流
InputStream is=this.getClass().getResourceAsStream("/src/test01.txt");
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String s="";
while((s=br.readLine())!=null)
System.out.println(s);
}
}
但是運行后還是會報錯“Exception in thread "main" java.lang.NullPointerException"
為什么呢? 我想這是因為資源文件和程序不在同一個包的原因? 如果我把資源文件放在和程序同一個包下:
package org.lza;
import java.io.*;
public class test{
public static void main(String[] args)throws Exception{
Resource res=new Resource();
res.getResource();
}
}
class Resource {
public void getResource() throws IOException{
//返回讀取指定資源的輸入流
InputStream is=this.getClass().getResourceAsStream("test01.txt");
BufferedReader br=new BufferedReader(new InputStreamReader(is));
String s="";
while((s=br.readLine())!=null)
System.out.println(s);
}
}
這樣就可以運行正常了。
總結
以上是生活随笔為你收集整理的java 打包后 文件资源文件 jar,JAVA打包成JAR无法找到资源文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python追加_如何在Python中追
- 下一篇: swift 滑动 iphone解锁_这1