[精讚] [會員登入]
591

【Maven】如何夾帶檔案至Jar內以及其讀取方式

想要讀取一個外部的文字文件?Maven是你的好幫手

分享此文連結 //n.sfs.tw/15858

分享連結 【Maven】如何夾帶檔案至Jar內以及其讀取方式@小編過路君子
(文章歡迎轉載,務必尊重版權註明連結來源)
2022-06-16 16:50:52 最後編修
2022-06-11 00:33:54 By 過路君子
 

哈囉大家好,這裡是這次絕對要記錄下來的小編過路君子

上次使用的時候沒有記錄下來,結果又花了一些時間拼回來,這次好好地寫下來吧。

 

 

這次要介紹的方式是一行一行的去讀取文件,畢竟如果一個一個字元在那邊讀取。

小檔案是無妨,但是當今天檔案大到有幾百萬個字母的時候,就要花非常多的時間在讀取上面,跟下面要介紹的方式比慢超級多。

照慣例,一樣附上目錄結構:

(所有圖片點擊都可以放大、變高清)

 

然後是 pom.xml 的設定:

這次是採用打包成一個可以直接執行的 Jar 檔,換句話說只要直接執行 target/packageJAR-1.0.0.jar 即可看到結果。

這邊最重要的就是第 25 行,如果不是放在 resouce 資料夾下,那這行也要改成相對應的資料夾。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
 
    <groupId>editor.passing.jinzan</groupId>
    <artifactId>packageJAR</artifactId>
    <version>1.0.0</version>
 
    <name>pixiJS-web Maven Webapp</name>
    <url>http://maven.apache.org</url>
 
    <packaging>jar</packaging>
 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies></dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resouce/</directory>
                <filtering>false</filtering>
                <includes>
                    <include>**</include>
                </includes>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.2.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>editor.passing.jinzan.index</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
 
            <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
             
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
            </plugin>
            <plugin>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.7.1</version>
            </plugin>
            <plugin>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>
        </plugins>
    </build>
</project>

 

接著是 index.java 的程式碼:

同樣的第 14 行要換成對應的檔案路徑,如果真的不知道路徑為何,可以直接先打包一個 Jar 檔,然後參照下面的做法。

import java.io.InputStream;
import java.lang.ClassLoader;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class index
{
    public static void main(String[] args) 
	{
		try 
		{
			ClassLoader classloader = Thread.currentThread().getContextClassLoader();
			
			InputStream file = classloader.getResourceAsStream("war.txt");
		
			BufferedReader reader = new BufferedReader(new InputStreamReader(file));

			String line;
			while((line = reader.readLine()) != null) System.out.println(line);
		}
		catch(Exception error) {System.out.println(error);}
	}
}

 

然後直接進行打包的動作。

mvn clean package;

然後這時候可以打開這個Jar包來觀察一下,看一下我們的檔案究竟是否有被打包進去。

若此文字文件放在多個資料夾底下,那這邊也會相對應的出現完整的路徑,而出現的這個路徑即是我們在 Java 程式中需填入檔案路徑。

所以,如果不清楚檔案路徑要怎麼填寫也可以使用此方式來查看。

 

至此,我們已經成功拿到了檔案的路徑,接下來只要簡單的做開檔和讀檔的動作即可:

import java.io.IOException;
import java.io.InputStream;
import java.lang.ClassLoader;
import java.io.BufferedReader;

public class index
{
	public static void main(String[] args) 
	{
		try
		{
			ClassLoader classloader = Thread.currentThread().getContextClassLoader();
			InputStream file = classloader.getResourceAsStream("war.txt");
			BufferedReader reader = new BufferedReader(new InputStreamReader(file));

			while(reader.ready())
			{
				String content = new String(reader.readLine());
				System.out.println(content);
			}

			file.close();
		}
		catch(IOException error) {}
	}
}

 

剩下的事情就簡單啦,直接執行 Jar 包,程式會自行開始讀取檔案的。

java -jar .\target\packageJAR-1.0.0.jar

 

 

 

後記

使用 Maven 將文字文件打包進 Jar 的最大好處就是封裝,簡單來說,別人只能知道你夾帶了這個文件,而無法輕易獲取此檔案內容啦~

至少比把文字文件和 Jar 檔放在同一個資料夾下直接寄給對方還要隱密,說不定對方用了很久你寫的 Jar 檔都不知道原來在裡面還有個神奇的文字文件。

END

你可能感興趣的文章

【Maven】用Maven來託管Wildfly/jBoss的部屬(deploy)、解部屬(undeploy) 極簡版,給未來想要抄作業的小編自己,完整的一切設定檔,可以依照個人需求作增刪。

【Wickct】(縮短網址) 如何將網頁掛載到特定路徑下 Wildfly的預設網址又臭又長又不好記,而且會被看到後端的目錄路徑安排,當然能藏就盡量藏起來啦

【Wildfly/jBoss】[Linux](Connection Datasource)如何與MySQL資料庫建立連線 網頁瀏覽器和資料庫的關係密不可分,而通常會將兩者分開架設在不同的伺服器上面來提供服務,這時要如何進行連線呢?

【Maven】如何夾帶檔案至Jar內以及其讀取方式 想要讀取一個外部的文字文件?Maven是你的好幫手

【C】(%c, %d)解決讀取字元時的緩衝區殘留 不解決就會莫名其妙地冒出一些莫名其妙的東西

【教程】(進階版)如何用Sigil製作一本高質量的epub 下載好了Sigil之後除了直接把文字貼進去以外,還有:變更字型、著色、導入CSS……等等功能,不知道你有沒有發現呢?

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

【分享、整合串】什麼?!高捷少女竟然有二創小說!! 由時零宇宙大大在巴哈上面連載的二創高捷少女小說,就讓我們來看看,究竟在時零大大的巧手下,高捷少女們會擦出什麼樣的火花吧!

高捷少女:美麗島的守護者② 這是在亦晨離開前的下午拍的,當時亦晨在美麗島跟小穹艾米等人在美麗島散步,為離開前補充一些回憶,這時剛好經過的小雅被艾米抓過來,做為同樣是高捷新人的她倆一同拍了一張紀念照。說起來她跟亦晨並不太熟,不過也

高捷少女:美麗島的守護者③ 小雅閉上眼睛,思索在高捷發生的點點滴滴。她心意已決,在高捷的日子的確也有快樂的部分,不過她相信換個方向是更好的決定。有關高捷的所有美好回憶,小雅決定保留在心裡就好,繼續在高捷工作只會讓自己更痛苦而已,

高捷少女:美麗島的守護者④ 光之穹頂的某處垃圾桶底,一個四方形的機器持續發出聲音,機器的儀表板上顯示著「1:25:10」的字樣,外表被一層鞭炮所掩蓋。儀表板的數字每秒不斷減少,細微的嗶嗶聲也隨著數字的改變發出,但在熙來攘往的美麗

高捷少女:美麗島的守護者⑤  雖然暫時不用怕牠們了,可是一直躲在這裡終究不是辦法,小雅心想。她看看四周,這間更衣室沒有窗戶或後門,她不禁著急起來,不可能一直躲在這裡面,但從門出去只會被群貓圍攻而已。小雅低下頭苦思該怎麼辦,過了不