- 相關(guān)推薦
java如何處理BOM文本
說起B(yǎng)OM,這個疑問還比擬費事,由于BOM不可見,但用順序做不一樣編碼文本處置時分卻經(jīng)常須要思索到BOM的疑問。在此之前,先對BOM做個容易見解。以下是小編為大家搜索整理的java如何處理BOM文本,希望能給大家?guī)韼椭?更多精彩內(nèi)容請持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!
下面舉個例子,針對UTF-8的文件BOM做個處理:
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òu)建一個新的字符串,然后用Dom4j解析處理,這樣就不會報錯了。
其他編碼的方式處理思路類似,其實可以寫一個通用的自動識別的BOM的工具,去掉BOM信息,返回字符串。
不過這個處理過程已經(jīng)有牛人解決過了:http://koti.mbnet.fi/akini/java/unicodereader/
不同的系統(tǒng)對BOM的支持
因為一些系統(tǒng)或程序不支持BOM,因此帶有BOM的Unicode文件有時會帶來一些問題。
1.JDK1.5以及之前的Reader都不能處理帶有BOM的UTF-8編碼的文件,解析這種格式的xml文件時,會拋出異常:Content is not allowed in prolog.
2.Linux/UNIX 并沒有使用 BOM,因為它會破壞現(xiàn)有的 ASCII 文件的語法約定。
不同的編輯工具對BOM的處理也各不相同。使用Windows自帶的記事本將文件保存為UTF-8編碼的時候,記事本會自動在文件開頭插入BOM(雖然BOM對UTF-8來說并不是必須的),但是editplus就不會這樣做。
BOM與XML
XML解析讀取XML文檔時,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.**)可用于判斷當前流中是否檢測到了bom。
BOM基本簡介
采用計算機輔助企業(yè)生產(chǎn)管理,首先要使計算機能夠讀出企業(yè)所制造的產(chǎn)品構(gòu)成和所有要涉及的物料,為了便于計算機識別,必須把用圖1示表達的產(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è)計的基礎(chǔ),這些數(shù)據(jù)的某些表現(xiàn)形式是我們大家感到熟悉的匯總報表。
文件作用
BOM是PDM/MRPⅡ/ERP信息化系統(tǒng)中最重要的基礎(chǔ)數(shù)據(jù),其組織格式設(shè)計合理與否直接影響到系統(tǒng)的處理性能,因此,根據(jù)實際的使用環(huán)境,靈活地設(shè)計合理且有效的BOM是十分重要的。
BOM不僅是MRPⅡ系統(tǒng)中重要的輸入數(shù)據(jù),而且是財務(wù)部門核算成本,制造部門組織生產(chǎn)等的重要依據(jù),因此,BOM的影響面最大,對它的準確性要求也最高。正確地使用與維護BOM是管理系統(tǒng)運行期間十分重要的工作。
此外,BOM還是CIMS/MIS/MRPⅡ/ERP與CAD,CAPP等子系統(tǒng)的重要接口,是系統(tǒng)集成的關(guān)鍵之處,因此,用計算機實現(xiàn)BOM管理時,應(yīng)充分考慮它與其他子系統(tǒng)的信息交換問題。
BOM信息在MRPⅡ/ERP系統(tǒng)中被用于MRP計算,成本計算,庫存管理。BOM有各種形式,這些形式取決于它的用途,BOM的具體用途有:
1、是計算機識別物料的基礎(chǔ)依據(jù)。
2、是編制計劃的依據(jù)。
3、是配套和領(lǐng)料的依據(jù)。
4、根據(jù)它進行加工過程的跟蹤。
5、是采購和外協(xié)的依據(jù)。
6、根據(jù)它進行成本的計算。
7、可以作為報價參考。
8、進行物料追溯。
9、使設(shè)計系列化,標準化,通用化。
【java如何處理BOM文本】相關(guān)文章:
Java如何讀取文本文件12-15
java如何構(gòu)造12-11
java圖片處理功能介紹12-09
新手如何學習Java07-06
如何學習JAVA開發(fā)04-26
如何創(chuàng)建java包03-27
Java的就業(yè)前景如何03-23
Java編程中異常處理的方法12-16
如何創(chuàng)建java包名03-28