在src目錄下建議一個文件夾,專門存放配置文件,項目編譯後,直接用jar命令打包即可。
如有疑問,可遠程協助解決。
有問題歡迎提問,滿意請採納,謝謝!
⑵ java打成jar包後讀取非resources文件
在Java項目中,需要讀取resource資源目錄下的文件,以及遍歷指定資源目錄下的所有文件,並且在讀取文件時保留文件相對路徑。
⑶ 如何讀取Jar包裡面的文件
方法1:
@Test
public void usingSpringMethod() throws Throwable {
patternResolver = new ();
Resource[] resources = patternResolver.getResources("com/yyy/1.txt");//<--②
if (resources != null && resources.length > 0) {
InputStreamReader inputStreamReader = new InputStreamReader(resources[0].getInputStream());//<---①
char[] data = new char[100];
inputStreamReader.read(data);
assertEquals((new String(data)).trim(), "ddddd");
}
}
上面①處,使用[0].getInputStream()代替原來的
引用
resources[0].getFile()
當然,②處的資源路徑表達式,可以使用Spring的其它方式表示:
方式1:
Java代碼
Resource[] resources = patternResolver.getResources("classpath:com/yyy/1.txt");
方式2:
Java代碼
Resource[] resources = patternResolver.getResources("classpath*:com/yyy/1.txt");
方法2:
直接原生的JDK方式讀取
Spring對資源路徑的表達方式非常靈活,這是首選使用Spring載入資源的原因。當然,使用JDK原生的ClassLoader也可以載入JAR中的資源文件,如下所示:
@Test
public void usingJDKMethod() throws Throwable {
URL url = getClass().getClassLoader().getResource("com/yyy/1.txt");//<--①
InputStreamReader inputStreamReader = new InputStreamReader(url.openStream());
char[] data = new char[100];
inputStreamReader.read(data);
assertEquals((new String(data)).trim(), "ddddd");
}
唯一的限制是,在①處不再支持classpath:或classpath*:的前綴了。
⑷ jar方式運行項目-讀取jar包中的文件
在目前的微服務和容器部署的SpringBoot壞境下,我們一般將項目直接打成 jar包的方式運行(java -jar *),我們可能需要讀取resources目錄下的自定義文件,想在程序運行時找到該目錄,並讀取需要的文件。
當時我使用 System.getProperty("user.dir") 獲取工作目錄的坑,本地idea工具運行沒問題,但是一但打成jar包,路徑會變成jar包所在的目錄,無法讀取jar內部的文件, 不建議用這種方式 。
由於jar中的文件都屬於資源的一種,所以獲取需從類載入器進行獲取。正確的姿勢是採用 this.getClass().getClassLoader().getResourceAsStream() 的方式。
讀取自定義文件時,由於getResourceAsStream方法返回的是一個InputStream流,採用InputStreamReader這種方式 最好指定一種編碼方式 ,不然可能 中文亂碼 !(我在解析xml時中文亂碼)
⑸ 如何從JAR文件中讀取文件
1、創建一個路徑為要讀取的txt文件的file對象rFile。2、創建一個路徑為要寫入的txt文件的file對象wFile。3、創建一個FileReader對象,傳入rFile到構造器。4、准備一個char數組,FileReader類有一個繼承自java.io.Reader的read(char[]cbuf)方法,將字元讀入數組。5、創建一個FileWriter對象,傳入wFile到構造器。6、FileWriter類有一個繼承自java.io.Writer的write(char[]cbuf)方法,可以寫入字元數組。7、最後別忘了關閉流。
⑹ jar包裡面的代碼如何讀取jar包中的配置文件
先看代碼目錄結構:
src/weather/
QueryWeather.java
weather.xml
程序裡面可以直接讀取到.xml文件,代碼如下:
private static String getXmlContent()throws IOException {
FileReader f = new FileReader("src/weather/weather.xml");
BufferedReader fb = new BufferedReader(f);
StringBuffer sb = new StringBuffer("");
String s = "";
while((s = fb.readLine()) != null) {
sb = sb.append(s);}return sb.toString();}但是一旦把這個class文件和xml文件打成jar包再運行,對不起,報錯,QueryWeather.class位元組碼根本找不到weather.xml
在看打成jar包的結構:META-INFMANIFEST.MFweatherQueryWeather.class
weather.xml
用下面的方法就可以找到weather.xml
private static String getXmlContent()throws IOException {
Reader f = new InputStreamReader(QueryWeather.class.getClass().getResourceAsStream("/weather/weather.xml"));
BufferedReader fb = new BufferedReader(f);
StringBuffer sb = new StringBuffer("");
String s = "";