第四章 高級文件處理(附Debug)
4.1 爲何需要XML
- XML,可擴展標記語言 = 意義+數據
- XML:數據+含義 ~ 用於傳輸數據;HTML:顯示數據
- 標簽自定義
- 純文本 ~ 跨系統 / 平臺 / 語言
- W3C 標準
- 語法 ~ 根元素 + 大小寫敏感 +屬性必須有數值&引號 + 轉義字符 + <!–>
code | 需轉義字符 | 描述 |
---|---|---|
< | < | 小於 |
> | > | 大於 |
& | & | 和號 |
&apos | ’ | 單引 |
" | ‘’ | 雙引 |
- DTD ~ 定義XML結構
<!DOCTYPE note[
<!Element note (to,from,heading,body)>
<!Element to (#PCDATA)>
<!Element from (#PCDATA)>
<!Element heading (#PCDATA)>
<!Element body (#PCDATA)>
]>
- XDL ~ DTD繼承者
- XSL ~ 如CSS之於HTML,擴展樣式表語言 ~ XSLT, XPath, XSL-FO
4.2 XML解析
-
兩方法:樹結構(DOM,讀寫)/流結構(SAX,擅長讀)
-
DOM ~ 樹結構讀入内存 ~ 大量數據有内存泄漏及程序崩潰風險 ~ 空白元素
-
DOM ~ DocumentBuilder解析類 ~ parse方法
getChildNodes ~ 返回 一個NodeList列表, 每一個元素都是Node
12結點 ~ document根結點 + Element結點 + Text結點 + ...
DOM写XML:CreatElement ~ appendChild ~ transformer
-
SAX ~ Simple API for XML ~ 事件/流模型 ~ 快速輕量
流讀取後的數據不再存儲(讀下一行代碼渣一上行,不再記得) ~ 很難同時訪問多處數據(很難同時再把他們約出來) ~ 推模型()
XMLReader類
BookHandler類
5個回調方法:
startDocument 文檔解析
endDocument 文檔結束解析
startDocument 開始訪問元素
endDocument 結束訪問
characters 訪問正文元素
-
Stax ~ Sax繼承者 ~ 拉模型(只拉感興部分,選擇性處理)
指針 ~XMLStreamReader類
迭代器 ~XMLEventReader類
-
DOM / SAX / Stax是JDK自帶 ~ 第三方庫(JDOM / DOM4J)一般多種解析方式
–JDOM ~www.jdom.org
–DOM4J ~dom4j.github.io
4.2 JSON解析
-
JS Object Notation~ 輕量數據交換格式 ~ 最早只用在JS上 ~ 獨立於編程語言
-
JSON Object ~ “K”:"V"對 ~ 逗號隔開
{"name":"JO","email":"a@b.com"}
-
JSON Array ~ 方括號存數組
[{"name":"JO","email":"a@b.com"},{"name":"JO","email":"a@b.com"}]
-
Java本身無JSON處理方法(對XML有)
第三方:org.json
GSON
Jackson
主用途:生成
解析
校驗
與JavaBean對象互解析: JavaBean ~無參構造函數+多個private的屬性+Setter/Getter方法+用於封裝數據(故又名POJO,普通Java對象)
*類名不同:
org.json包~JSONObject
GoogleGSON包~JsonObject
-
JSON 與 XML ~ 數據交換格式 ~ 可讀性/可擴展性高
JSON:編碼簡單+轉換方便+字符長度小+傳輸效率高
,會丟失顺序信息
XML:注重標簽和順序
,
4.3 图形图像+条形码+二维码
- 图像Image,像素点组成;图形Graph,矢量图
- 验证码生成:
外框+底色+干扰线+字母 ~ 不要用0、o、1、I、L
- 统计图:
两步 ~ 设定数据集->调用JFreeChart
- 条形码和二维码:
条形码 ~ 条&空 ~ 容纳一维30字母/数字
专门机构:中国物品编码中心
二维码 ~ 数字/字母/汉字/图片 抗损坏
Zxing ~ Google出品
Barcode4J ~ 只负责生成不负责解析
4.4 Docx
Word2003和之前
都是doc格式,文档格式不公开(经典微软)
Word2007和之后
都是docx格式,遵循XML路线,文档格式公开
- 常见功能
docx解析
docx生成(分成套打和完全生成) - 处理三方库
Jacob、COM4J(Windows平台)
POI,docx4j,OpenOffice/Libre Office SDK(免费)
Aspose(收费)
开源OpenXML的包 - Apache POI
纯Java工具包,无需第三方依赖
主要类:
XWPFDocument(整个文档)/Paragraph(段落)/Run(字体样式相同一个片段)/Picture/Table
Demo
1. Dom技術解析.xml文件
2.Dom技術寫.xml文件
3.SAX技術解析.xml文件
4.Stax技術寫.xml文件
5.JSON讀入生成(org.json/GSON/Jackson)
XML(1998发布)
JSON(2002发布)
*Debug of Eclipse
Run
~ alt
+shift
+x
Debug
~ alt
+shift
+D
進入Debug模式后:
F8 ~ 運行至下一斷點
F5 ~ 進入當前方法
F6 ~ 運行下一行代碼
F7 ~ 退出當前方法(回到調用層)