🧩Java JAR 執行後找不到輸出檔?一篇搞懂:從 -jar 正確用法到 properties 與工作目錄完整實戰
摘要(SEO)
很多人用
java -jar
跑完轉檔工具後,主控台明明印出「convert … to … .txt」,卻在磁碟裡找不到任何
.txt。本文用軟體工程師的角度、用最白話的方式,帶你一步步確認
JAR 的正確執行方式、輸出檔可能落點(目前工作目錄、來源同層或 properties 指定資料夾)、以及如何檢視/更新 JAR 內的
*.properties 設定檔。所有範例皆為匿名、通用化的路徑與檔名,可直接套用在你的環境。
你遇到的典型狀況
-
指令跑了、主控台有輸出,但找不到
.txt。 -
曾把輸出路徑寫在
*.properties,但實際上不生效。 -
不確定程式到底讀的是外部
properties檔還是打包在 JAR 裡的那一份。
-jar必須有減號。- 很多工具會把檔案寫到目前工作目錄 (CWD) 或來源檔同資料夾。
- 你改的
properties,要確保就是程式真正讀到的那一份。
一、正確執行 JAR(先把開場白錯誤拿掉)
1) -jar 不能少減號
下成
java .jar converter.jar 會讓
Java 以為「.jar
是類別名稱」,導致「找不到或無法載入主要類別 .jar」。
2) 驗證 Java 是否可用
看到版本號代表 OK。
二、輸出到底會寫在哪?三個最常見落點
-
目前工作目錄 (CWD):你下指令的那個資料夾。
-
來源檔同資料夾:很多轉檔器會把
.txt丟在被轉檔的檔案旁邊。 -
*.properties指定資料夾:前提是程式真的有讀到那份設定。
快速搜尋(PowerShell)
三、*.properties
有生效嗎?(外部 vs 內嵌)
許多應用會優先讀取「與 JAR 同層」或「目前工作目錄」的
config.properties;也有不少應用是把 properties
打包在 JAR 裡(例如
BOOT-INF/classes/…)。
做法 A:放一份外部
properties 與 JAR 同層
-
把你的設定檔命名與程式碼預期相同(例如
app.properties)。 -
放在
converter.jar同一資料夾。 -
重新執行,觀察是否生效。
做法 B:看 JAR 裡面到底有沒有設定檔(推薦)
需要 JDK 的 jar 指令或
7-Zip。以下皆為匿名範例。
列出 JAR 內容並搜尋
可能出現:
-
app.properties -
conf/app.properties -
BOOT-INF/classes/app.properties
只抽出那一個檔(不必解整包)
沒有 JDK ?用 7-Zip:
四、更新 JAR 內的 properties
找到之後,直接覆蓋回 JAR(路徑要一模一樣):
五、示範一份安全可用的
properties(匿名範例)
Windows 的
properties 可用雙反斜線
\\,或斜線
/ 皆可:
D:/data/output/txt 也能讀。
六、固定輸出位置的兩種穩招
1) 直接把工作目錄切到輸出夾(最穩)
2) 用 Java 參數傳入(若應用支援)
有些工具支援 -D 系統屬性或 CLI
參數:
七、常見錯誤對照表
| 現象 | 可能原因 | 快修建議 |
|---|---|---|
錯誤: 找不到或無法載入主要類別 .jar
|
少了減號,寫成
java .jar
|
改成
java -jar app.jar
|
跑完找不到 .txt
|
檔案寫到 CWD / 來源同層 / 你看的路徑不對 |
依序檢查 CWD、來源資料夾、properties
指定夾
|
properties 改了沒反應
|
程式讀的是 JAR 內嵌那份 |
用
jar tf/xf
找到並覆蓋回 JAR
|
no main manifest attribute
|
JAR 沒設定 Main-Class |
用
java -cp app.jar 完整.主類別
執行或重建可執行 JAR
|
filelist.txt 為空
|
邏輯只在「判定成功」時才寫入 | 先確認輸出真的落地,再回頭看成功條件 |
八、最後檢查清單(Checklist)
-
以
java -jar正確執行。 -
確認 目前工作目錄、來源資料夾、設定檔指定的輸出夾三處都查過。
-
用
jar tf找到properties的真實內部路徑。 -
若需要,
jar uf將修改後的properties覆蓋回 JAR。 -
用批次檔 鎖定工作目錄 到你想要的輸出夾。
-
檔名/路徑含空白或非英數時,加引號;Windows 路徑可用
\\或/。 -
如需 UTF-8 日誌/文字,加入
-Dfile.encoding=UTF-8。
結語
JAR 執行後找不到輸出檔,80% 是路徑與工作目錄造成;另外 20% 則是讀錯 properties(外部 vs
內嵌)。用本文的指令與檢查順序,你可以在幾分鐘內確定輸出落點、驗證設定是否生效,並穩定把輸出固定到你指定的資料夾。如果你的工具支援 CLI 參數或
-D
系統屬性,更能把設定流程標準化與自動化。
留言
張貼留言