.csv 全名是 Comma-Separated Values(逗號分隔值)
簡單來說,它是一種文字檔的表格格式,每一行是一筆資料,每一個欄位用「逗號 ,」隔開,CSV是可以被 Excel 打開的文字檔形式的表格。
CSV 優點:
幾乎所有系統都支援,Excel、Google 試算表、Python、Java 都能讀。
方便紀錄結果,做 port scanner 就可以把掃描結果存下來。
可以之後做分析,未來學「多執行緒掃描」或「統計分析」時很好用。
CSV 規則常用做法:如果欄位包含逗號或雙引號或換行,整個欄位用雙引號包起來,欄位內的雙引號則寫成 ""(兩個雙引號)。
如果資料裡面自己就有逗號或雙引號,CSV 會誤判。所以這時就要「逃脫(escape)」,確保 CSV 不會誤讀。當資料裡有特殊符號時,用特殊寫法「保護」它,讓資料能安全地被程式正確讀取。
例如:
因為 Java 的字串本身是用雙引號包起來的,比如:
String s = "Hello";
如果你直接打這樣:
String s = "He said "Hi"";
編譯會錯,因為 Java 會以為 "He said " 是一個字串,後面的 "Hi" 又是另一個。
要讓字串裡真的包含一個 ",你就必須**跳脫(escape)**它:
String s = "He said "Hi"";
結果輸出:
He said "Hi"
package day1;
import java.io.IOException;
import java.io.FileWriter;
import java.io.BufferedWriter;
public class Day12Demo {
private static String escapeCsv(String field){
if(field == null) return"";
boolean needQuote =field.contains(",") || field.contains(""")||field.contains("\n") || field.contains("\r");
if (field.contains(""")){
field = field.replace(""","""");
}return needQuote ? """ + field +""" : field;
}
public static void main(String[] args) {
String filename = "Day12Demo.csv";
String[] header = {"timestamp", "host", "port", "status", "note"};
String[] row1 = {"2025-10-06 15:30", "localhost", "22", "OPEN", "no problem"};
String[] row2 = {"2025-10-06 15:30", "example.com", "443", "OPEN", "response: \"OK\", fast"};
String[] row3 = {"2025-10-06 15:30", "somehost", "8080", "CLOSED", "contains,comma"};
try (BufferedWriter bw = new BufferedWriter(new FileWriter(filename))) {
for (int i = 0; i < header.length; i++) {
if (i > 0) bw.write(",");
bw.write(escapeCsv(header[i]));
}
bw.newLine();
String[][] rows = {row1, row2, row3};
for (String[] row : rows) {
for (int i = 0; i < row.length; i++) {
if (i > 0) bw.write(",");
bw.write(escapeCsv(row[i]));
}
bw.newLine();
}
System.out.println("已寫入 " + filename);
} catch (IOException e) {
e.printStackTrace();
}
}
}
今天學到了CSV的應用,用上面程式碼成功存進表格(.csv檔裡),也知道 Java 中怎麼讓資料存起來不會被誤判能順利存進去。