# Large File Viewer

> 超大 log 或文字檔不必整個讀進記憶體，直接在瀏覽器開：馬上能捲動、跳到指定行、搜尋、像 grep 一樣篩選、逐行讀 JSONL。檔案只在你的裝置上處理，不上傳。

- URL: https://bytescope.dev/zh-Hant/large-file-viewer/
- Locale: zh-Hant · Also: [en](https://bytescope.dev/en/large-file-viewer.md) · [ja](https://bytescope.dev/ja/large-file-viewer.md)
- Runs: 檔案會從你的硬碟分段讀取。建立索引、搜尋和匯出都在這個分頁裡完成——不上傳、不用帳號、伺服器上也沒有副本。
- Requires: Any modern browser for scrolling, search and JSONL. Saving the filtered lines straight to a file you pick needs Chrome, Edge or Opera on desktop; elsewhere the export is built in memory and downloaded.
- Updated: 2026-09-08

## What it does

伺服器 log 有 3 GB，02:14 左右出了事。記事本直接卡死，VS Code 先警告再停住，而你也不想只為了跑個 `grep` 就把檔案 scp 來 scp 去。這個頁面是大型文字檔檢視器：`.log`、`.txt`、`.jsonl`、`.ndjson`、`.csv`、`.json`——只要是瀏覽器交得出來的文字檔，多大都能開，而且從不把整個檔案讀進記憶體。第一行馬上就能捲，可以跳到某一行、某個百分比或檔尾，搜尋一個 request id 並看到每個命中前後的行，或者只顯示 `WARN` 行再另存成新檔。

### 這麼大的檔案是怎麼開的

檔案依需求一片一片讀。背景 worker 把檔案走過一遍，建立稀疏的行索引——每 1,024 行一筆——所以頁面從來不需要把整個檔案放進 RAM。索引還在建的時候捲軸依位元組位置運作，建好之後改依行號，跳到第 N 行就是準確的。字元編碼從前 64 KB 自動偵測（UTF-8、UTF-16 LE 與 BE、Big5、GBK、Shift_JIS、EUC-KR、Windows-1252），猜錯可以手動改。單一超長行——例如壓成一行的 500 MB minified JSON——最多顯示 1 MB 並標示為已截斷，後面的行號照樣正確，頁面不會因此當掉。

### 搜尋、篩選與 log 等級

搜尋接受純文字（可選是否區分大小寫）或 JavaScript 正規表示式。檔案一塊一塊掃，結果找到就陸續出現；點一下就跳過去並帶出前後的行。Stop 按鈕能立刻中止搜尋——就算正規表示式失控也一樣——而且不會弄丟行索引。篩選檢視只顯示符合的行，或像 `grep -v` 一樣只顯示不符合的行，最多列出 5,000,000 筆，超過會告訴你。log 等級自動上色：`ERROR`、`WARN`、`INFO`、`DEBUG`、`TRACE`、`FATAL` 這些字、syslog 的 `<N>` 優先序、JSON log 的 `level` 或 `severity` 欄位（含 pino 與 bunyan 的數字等級）、logfmt 的 `level=` 和 Android logcat，還有一鍵「WARN 以上」。前 20 行全是 JSON 物件或陣列時，頁面會切到 JSONL 模式，任何一行都能展開成樹狀——只解析那一行。篩選後的行可以匯出成新檔：Chrome 和 Edge 直接串流寫進你選的檔案，其他瀏覽器則在記憶體裡組起來，超過 512 MB 會先警告。

### 誠實的限制

這個版本沒有全文索引，所以每次搜尋都把檔案從頭到尾重讀一遍，速度看你的磁碟。這是唯讀檢視器：要改位元組請用 Hex Editor 開。`.gz` 還沒支援——請先解壓縮。正規表示式用的是 JavaScript 語法，不是 grep 或 PCRE，所以 possessive quantifier 之類的功能沒有。單一巨大的 JSON 文件——整個檔案就是一個物件或陣列——會以文字顯示、可以搜尋，但不會畫成樹狀。

### 隱私

什麼都不上傳。檔案在你自己的裝置上一片一片讀取，索引、搜尋結果和篩選全都留在分頁裡。沒有伺服器參與，關掉分頁就是全部的清理。

## Limits

Does not upload the file, edit or save over it, or open .gz files yet; it reads and filters the text as it is, and a whole-file full-text index is not built.

## FAQ

### 為什麼 5 GB 的 log 在記事本或 VS Code 打不開？

一般編輯器會把整個檔案讀進記憶體並建立編輯緩衝區，幾 MB 沒問題，幾 GB 就沒救了。這個頁面不這麼做：它只讀你正在看的那一片，在背景 worker 裡建行位置索引，再一塊一塊搜尋，所以檔案大小只影響整份搜尋要跑多久，不影響開不開得起來。

### 我的檔案會上傳嗎？

不會。瀏覽器從你的磁碟一片一片讀檔，建索引、搜尋、篩選全都在分頁裡跑。沒有伺服器，也沒有地方可以送。匯出的篩選結果同樣直接寫到你自己的磁碟。

### 為什麼行數比 wc -l 多 1？

一行結束在 `\n`、`\r\n` 或單獨的 `\r`。`wc -l` 只數換行字元，所以最後一行沒有換行的檔案會被它少算一行。這個頁面會把最後那行也算進去，因為那是一行真的讀得到、搜得到的內容。檔案以換行結尾時兩個數字一致；沒有的話，這裡顯示的是 `wc -l` + 1。

### 可以直接跳到檔尾或指定的某一行嗎？

可以。跳到第 N 行、檔案的某個百分比，或直接到檔尾看 tail。背景行索引建好之前，捲動依位元組位置；建好之後行號就是精確的。索引是稀疏的——每 1,024 行一筆——所以就算檔案有幾億行也還是很小。

### 怎麼像 grep 一樣只顯示錯誤？

用篩選檢視：輸入純字串或 JavaScript 正規表示式，選擇顯示符合的行或不符合的行（等同 `grep -v`）。log 等級有一鍵「WARN 以上」，依每行偵測到的等級判斷——純文字關鍵字、syslog 優先序、JSON 的 `level` / `severity` 欄位、logfmt 和 logcat 都算。最多列出 5,000,000 筆符合的行，結果可以另存成新檔。

### JSONL 或 NDJSON 的 log 讀得了嗎？

可以。前 20 行全是 JSON 物件或陣列時，頁面會切到 JSONL 模式，直接當 JSONL 檢視器用。每筆記錄仍然各占一行方便捲動和搜尋，任何一行都能展開成樹狀——只解析那一行，所以幾百萬筆記錄的檔案不會多花任何成本。等級上色讀的是 `level` 或 `severity` 欄位，pino 與 bunyan 的數字等級也認得。

### 能開 .gz 的 log 或編輯檔案嗎？

這個版本不行。壓縮的 `.gz` 檔要先解壓縮，而這裡是唯讀檢視器——要改位元組請用 Hex Editor。想依欄位排序、篩選或用 SQL 查詢的 CSV，CSV Explorer 比較合適；Parquet 請看 Parquet Viewer。

### 整個檔案只有一行超長的內容會怎樣？

一行最多顯示 1 MB 並標示「行太長，已截斷」；其餘部分不顯示，但後面的行號維持正確，所以壓成一行的 500 MB minified JSON 不會讓頁面當掉。單一巨大的 JSON 文件可以當文字搜尋，但不會顯示成樹狀——樹狀檢視只給 JSONL，因為那裡每一行都是獨立的文件。

## Related tools

- [Hex Editor](https://bytescope.dev/zh-Hant/hex-editor.md) — 開啟任何檔案的原始位元組，一個一個改。
- [CSV Explorer](https://bytescope.dev/zh-Hant/csv-explorer.md) — 試算表開不動的 CSV？篩選、排序，還能用 SQL 查。
- [Parquet Viewer](https://bytescope.dev/zh-Hant/parquet-viewer.md) — 欄式儲存的 Parquet 檔，用同樣方式瀏覽和查詢。
