- 相關(guān)推薦
java如何處理BOM文本
說起B(yǎng)OM,這個(gè)疑問還比擬費(fèi)事,由于BOM不可見,但用順序做不一樣編碼文本處置時(shí)分卻經(jīng)常須要思索到BOM的疑問。在此之前,先對BOM做個(gè)容易見解。以下是小編為大家搜索整理的java如何處理BOM文本,希望能給大家?guī)韼椭?更多精彩內(nèi)容請持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
下面舉個(gè)例子,針對UTF-8的文件BOM做個(gè)處理:
Stringxmla=StringFileToolkit.file2String(newFile("D:projectsmailpostsrca.xml"),"UTF-8");
byte[]b=xmla.getBytes("UTF-8");
Stringxml=newString(b,3,b.length-3,"UTF-8");
Documentdoc1=DocumentHelper.parseText(xml);
Elemente1=(Element)doc1.selectSingleNode("/ResponseData/Body/RetDesc");
Elemente2=(Element)doc1.selectSingleNode("/ResponseData/Head/RespID");
Elemente3=(Element)doc1.selectSingleNode("/ResponseData/Body/RetCode");
Elemente4=(Element)doc1.selectSingleNode("/ResponseData/Body/RetDesc");
思路是:先按照UTF-8編碼讀取文件后,跳過前三個(gè)字符,重新構(gòu)建一個(gè)新的字符串,然后用Dom4j解析處理,這樣就不會(huì)報(bào)錯(cuò)了。
其他編碼的方式處理思路類似,其實(shí)可以寫一個(gè)通用的自動(dòng)識別的BOM的工具,去掉BOM信息,返回字符串。
不過這個(gè)處理過程已經(jīng)有牛人解決過了:http://koti.mbnet.fi/akini/java/unicodereader/
不同的系統(tǒng)對BOM的支持
因?yàn)橐恍┫到y(tǒng)或程序不支持BOM,因此帶有BOM的Unicode文件有時(shí)會(huì)帶來一些問題。
1.JDK1.5以及之前的Reader都不能處理帶有BOM的UTF-8編碼的文件,解析這種格式的xml文件時(shí),會(huì)拋出異常:Content is not allowed in prolog.
2.Linux/UNIX 并沒有使用 BOM,因?yàn)樗鼤?huì)破壞現(xiàn)有的 ASCII 文件的語法約定。
不同的編輯工具對BOM的處理也各不相同。使用Windows自帶的記事本將文件保存為UTF-8編碼的時(shí)候,記事本會(huì)自動(dòng)在文件開頭插入BOM(雖然BOM對UTF-8來說并不是必須的),但是editplus就不會(huì)這樣做。
BOM與XML
XML解析讀取XML文檔時(shí),W3C定義了3條規(guī)則:
1.如果文檔中有BOM,就定義了文件編碼;
2.如果文檔中沒有BOM,就查看XML聲明中的編碼屬性;
3.如果上述兩者都沒有,就假定XML文檔采用UTF-8編碼。
Java處理文件BOM頭的方式
一、 使用apache的工具類,以BOMStream為例:
BOMStream,api參考:http://commons.apache.org/io/apidocs/org/apache/commons/io/input/BOMInputStream.html
該類的構(gòu)造方式:
BOMInputStream bomIn = new BOMInputStream(in) //僅能檢測到UTF8的bom,且在流中exclude掉bom
BOMInputStream bomIn = new BOMInputStream(in, include); //同上,且指定是否包含也可以指定檢測多種編碼的bom,但目前僅支持UTF-8/UTF-16LE/UTF-16BE三種,對于UTF32之類不支持。
BOMInputStream bomIn = new BOMInputStream(in, ByteOrderMark.UTF_16LE, ByteOrderMark.UTF_16BE);
有用的方法:
bomIn.hasBOM()、hasBOM(ByteOrderMask.**)可用于判斷當(dāng)前流中是否檢測到了bom。
BOM基本簡介
采用計(jì)算機(jī)輔助企業(yè)生產(chǎn)管理,首先要使計(jì)算機(jī)能夠讀出企業(yè)所制造的產(chǎn)品構(gòu)成和所有要涉及的物料,為了便于計(jì)算機(jī)識別,必須把用圖1示表達(dá)的產(chǎn)品結(jié)構(gòu)轉(zhuǎn)化成某種數(shù)據(jù)格式,這種以數(shù)據(jù)格式來描述產(chǎn)品結(jié)構(gòu)的文件就是物料清單,即是BOM。它是定義產(chǎn)品結(jié)構(gòu)的技術(shù)文件,因此,它又稱為產(chǎn)品結(jié)構(gòu)表或產(chǎn)品結(jié)構(gòu)樹。在某些工業(yè)領(lǐng)域,可能稱為“配方”、“要素表”或其它名稱。
在MRPⅡ和ERP系統(tǒng)中,物料一詞有著廣泛的含義,它是所有產(chǎn)品,半成品,在制品,原材料,配套件,協(xié)作件,易耗品等等與生產(chǎn)有關(guān)的物料的統(tǒng)稱。
在通常的MRPⅡ和ERP系統(tǒng)中BOM是指由雙親件及子件所組成的關(guān)系樹。BOM可以是自頂向下分解的形式或是以自底向上跟蹤的形式提供信息。
在MRPⅡ和ERP系統(tǒng)中BOM是一種數(shù)據(jù)之間的組織關(guān)系,利用這些數(shù)據(jù)之間層次關(guān)系可以作為很多功能模塊設(shè)計(jì)的基礎(chǔ),這些數(shù)據(jù)的某些表現(xiàn)形式是我們大家感到熟悉的匯總報(bào)表。
文件作用
BOM是PDM/MRPⅡ/ERP信息化系統(tǒng)中最重要的基礎(chǔ)數(shù)據(jù),其組織格式設(shè)計(jì)合理與否直接影響到系統(tǒng)的處理性能,因此,根據(jù)實(shí)際的使用環(huán)境,靈活地設(shè)計(jì)合理且有效的BOM是十分重要的。
BOM不僅是MRPⅡ系統(tǒng)中重要的輸入數(shù)據(jù),而且是財(cái)務(wù)部門核算成本,制造部門組織生產(chǎn)等的重要依據(jù),因此,BOM的影響面最大,對它的準(zhǔn)確性要求也最高。正確地使用與維護(hù)BOM是管理系統(tǒng)運(yùn)行期間十分重要的工作。
此外,BOM還是CIMS/MIS/MRPⅡ/ERP與CAD,CAPP等子系統(tǒng)的重要接口,是系統(tǒng)集成的關(guān)鍵之處,因此,用計(jì)算機(jī)實(shí)現(xiàn)BOM管理時(shí),應(yīng)充分考慮它與其他子系統(tǒng)的信息交換問題。
BOM信息在MRPⅡ/ERP系統(tǒng)中被用于MRP計(jì)算,成本計(jì)算,庫存管理。BOM有各種形式,這些形式取決于它的用途,BOM的具體用途有:
1、是計(jì)算機(jī)識別物料的基礎(chǔ)依據(jù)。
2、是編制計(jì)劃的依據(jù)。
3、是配套和領(lǐng)料的依據(jù)。
4、根據(jù)它進(jìn)行加工過程的跟蹤。
5、是采購和外協(xié)的依據(jù)。
6、根據(jù)它進(jìn)行成本的計(jì)算。
7、可以作為報(bào)價(jià)參考。
8、進(jìn)行物料追溯。
9、使設(shè)計(jì)系列化,標(biāo)準(zhǔn)化,通用化。
【java如何處理BOM文本】相關(guān)文章:
java處理BOM文本的方法12-06
Java如何讀取文本文件04-24
Java 異常處理09-27
的java圖像處理的方法10-30
java圖像處理的方法11-02
Java的異常處理及應(yīng)用09-21
java圖像處理的方法大全12-04
java圖片處理功能介紹04-26
在Java里處理文件的技巧09-23