Java打jar包后如何獲取resource中的文件


假設有如下目錄結構的代碼,現在想要獲取test.txt文件中的內容,test.txt中的內容為hello world。

問題代碼如下:

package mvnDemo;

import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class MvnDemo {

    public static void main(String[] args) throws IOException {
        System.out.println(StringUtils.upperCase("hello mvn"));
        String path = MvnDemo.class.getClassLoader().getResource("test.txt").getPath();
        String testString = FileUtils.readFileToString(new File(path), StandardCharsets.UTF_8);
        System.out.println(testString);
    }
}

結果如下:

hello world

但打成jar包執行后,卻會報錯如下:

D:\>java -jar D:\testDemo-1.0-SNAPSHOT.jar
Exception in thread "main" java.io.FileNotFoundException: file:\D:\testDemo-1.0-SNAPSHOT.jar!\test.txt (文件名、目錄名或卷標語法不正確。)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(Unknown Source)
        at java.io.FileInputStream.<init>(Unknown Source)
        at org.apache.commons.io.FileUtils.openInputStream(FileUtils.java:2388)
        at org.apache.commons.io.FileUtils.readFileToString(FileUtils.java:2506)
        at mvnDemo.MvnDemo.main(MvnDemo.java:15)

正確代碼如下:

package mvnDemo;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;

public class MvnDemo {

    public static void main(String[] args) throws IOException {
        System.out.println(StringUtils.upperCase("hello mvn"));
        InputStream resourceAsStream = MvnDemo.class.getClassLoader().getResourceAsStream("test.txt");
        List<String> stringList = IOUtils.readLines(resourceAsStream, StandardCharsets.UTF_8);
        String testString = StringUtils.join(stringList, "");
        System.out.println(testString);
    }
}

這種方式處理,無論在idea中執行,還是打包執行,都能獲取預期的結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM