🍀Windows 批次檔跑資料 Loader 失敗怎麼查?從「CSV 解析錯誤、檔案被占用、JSON 欄位缺失」一步步看懂(工程師白話版)
你有沒有遇過這種情況:
-
你在 Windows 命令列跑了一串 Loader(資料匯入程式)
-
看起來「秒跑完」,但資料卻沒進去
-
或者跑到一半爆出一堆錯誤:CSV 解析失敗、JSON 欄位找不到、檔案搬移失敗
如果你不是工程師,看到這些 log 真的會像外星語一樣。本篇用「工程師白話」帶你看懂常見的三種錯誤,以及你可以怎麼排查。
一、先理解:你跑的通常是「兩段式流程」
很多公司內部的資料匯入會拆成兩段:
① 掃描/整理檔案(前段)
常見是 Python、Shell、或自寫工具。它的工作像是:
-
到資料夾裡找檔案(支援子資料夾)
-
判斷檔案類型(CSV、XLSX、SUM…)
-
把檔案搬到「待處理區」
示意指令(已改成假資料):
跑完後通常會顯示類似:
-
掃到了多少檔
-
花了幾秒
-
有沒有明顯錯誤
如果這段只顯示「耗時 0.00s / 1.00s」且沒有 error,通常代表:它成功掃描,但不代表資料已進資料庫。
② 真正解析 + 寫入資料庫(後段)
第二段常見是 Java JAR 或 .exe,負責:
-
讀 CSV / Excel
-
轉成 JSON 或某種結構
-
寫入資料庫
-
成功就搬到 success,失敗就搬到 fail
示意指令:
你遇到的大部分錯誤,往往都在「第二段」。
二、錯誤 1:CSV 解析炸掉(ArrayIndexOutOfBounds)
你可能會看到這類 log:
-
解析某個 CSV 時直接丟例外(Exception)
-
錯誤像:陣列超出範圍(ArrayIndexOutOfBounds)
這是什麼意思?(白話)
Loader 在讀 CSV 的某一行時,預期會有「至少兩欄」,例如:
-
欄位 0:欄名或第一個值
-
欄位 1:第二個值
但實際那一行可能是:
-
空行
-
只有一個欄位
-
分隔符號不對(它以為是逗號,但檔案其實是分號或 Tab)
-
有奇怪的引號/編碼讓它切欄失敗
所以它去拿「第二欄」時,就直接爆炸。
你可以怎麼做?(不懂程式也能做)
-
用 VS Code / Notepad++ 打開那個 CSV
-
看最上面的「標題列 header」是不是正常
-
往下找有沒有:
-
空白行
-
欄位數明顯較少的行
-
一整行怪符號
-
如果你找到「某一行很短或空白」,通常就是罪魁禍首。
三、錯誤 2:失敗檔案搬不到 fail(檔案被占用)
你也可能看到:
-
解析失敗後,程式想把檔案移到 fail
-
結果 Windows 回:檔案正被其他程式使用
這是什麼意思?(白話)
Loader 想「搬家」:
-
從
process搬到fail
但 Windows 說:
還有人抓著這個檔案不放(有人正在使用它),不能搬。
常見原因:
-
你有用 Excel 打開過那個 CSV,忘了關
-
防毒掃描中
-
或更常見:Loader 自己讀檔後沒有關檔(程式 bug)
你可以怎麼做?
-
確認 Excel、記事本、VS Code 沒有開著該檔案
-
打開 工作管理員(Ctrl + Shift + Esc)
-
看是不是有卡住的:
-
java.exe -
python.exe -
其他背景程式
-
-
必要時結束程序,再重跑
如果每次都一樣搬不動,而且你確定沒開檔,那很可能是 Loader 本身沒有釋放檔案資源,需要回報給維護 Loader 的同事修程式。
四、錯誤 3:JSON 欄位找不到(JSONObject["xxx"] not found)
另一種常見錯誤是:
-
程式說 JSON 裡找不到某個欄位(例如
"Item Name")
這是什麼意思?(白話)
Loader 在轉資料時「認定一定會有某個欄位」。
例如它預期 CSV 的 header 有:
-
Item Name
-
Test Time
-
Bin No
但你的檔案可能是:
-
欄位名稱改了(大小寫不同、空白不同)
-
欄位不存在(供應商格式更新了)
-
欄位改成中文或縮寫
結果 Loader 仍照舊去找舊欄位,就會爆。
你可以怎麼做?
-
打開該 CSV
-
看第一列 header 有沒有那個欄位
-
如果沒有,代表:
-
檔案格式真的變了
-
或 Loader 要更新 mapping(欄位對應)
-
這種通常不是「你重跑就會好」,而是要 調整 Loader 規則/程式 才能解。
五、如何「中止正在跑的 exe / loader」:三種最簡單方法
有時候 Loader 卡住或跑太久,你需要先停掉:
方法 1:在命令列按 Ctrl + C
最常見、最溫和。
方法 2:關閉視窗(X 或 Alt+F4)
適合獨立視窗的程式。
方法 3:工作管理員強制結束(最強制)
-
Ctrl + Shift + Esc
-
找到
java.exe或你的 loader 程式 -
End Task
若你跑的是整串 .bat,通常殺掉主要的 java.exe 就會停。
六、工程師實務建議:要快速定位問題,你只要抓三個重點
即使你完全不懂程式,也可以用這三招大幅縮小範圍:
-
出錯的是哪個檔名?
log 都會印出「正在 parse 哪個檔」。先把檔名記下來。 -
錯誤類型屬於哪一種?
-
ArrayIndexOutOfBounds → CSV 行/欄格式異常
-
FileSystemException(檔案被占用)→ 有人沒關檔/程式沒放資源
-
JSONObject 欄位不存在 → 格式改版/欄位不一致
-
-
失敗檔案最後有沒有搬到 fail?
-
有 → 代表流程有收尾,你可以集中查格式
-
沒有 → 可能檔案被鎖住,需要先解除占用
-
結語:你不是在「修程式」,你是在「修輸入資料與規則的落差」
很多人以為 Loader 出錯就是「電腦壞了」,其實多半是:
-
供應商資料格式改了
-
某幾行資料不乾淨(空行、少欄)
-
Loader 程式沒有防呆或沒有更新欄位 mapping
-
或出錯後沒有正確釋放檔案資源(導致無法搬移)
掌握本篇這三種錯誤,你下次再看到 log,就能快速判斷:
-
這次是「檔案內容問題」?
-
「格式改版問題」?
-
還是「Loader 程式需要修」?
留言
張貼留言