資源簡介
Java解析fsn文件源碼,包含詳細注釋,可以參考使用

代碼片段和文件信息
package?action;
import?java.util.ArrayList;
import?tools.FsnTools;
import?bean.FsnBody;
import?bean.FsnModel;
public?class?FsnReaderAction?{
public?final?static?int?intstep=2;???//Uint16字節長度
public?final?static?int?stringstep=4;?//Uint32字節長度
public?final?static?int?fsnHeadLengh=32;//fsn文件頭字節長度
public?final?static?int?fsnPerBodyNoImg=100;?//fsn文件體每條記錄,不包括圖像信息的字節長度
public?final?static?int?fsnPerBodyImg=1644;?//fsn文件體每條記錄,包括圖像信息的字節長度
public?int?filePos=0;?//fsn文件字節流當前指針位置
public?FsnModel?fm;???//本實例解析的FsnMedel對象
public?String?fsnFilePath?;//FSN文件的存儲完整路徑,包括文件名
public?FsnReaderAction(String?filePath){
this.fsnFilePath=filePath;
}
public?FsnModel?readFsnFile()?throws?Exception?{
// FsnModel?ret=null;
try{
this.fm=new?FsnModel(this.fsnFilePath);
//hzyimport?把文件轉成字節流數組
byte[]?fsnbytes?=FsnTools.toByteArray(this.fsnFilePath);
this.fm.setSize(fsnbytes.length);
System.out.println(“File?Lengh:?“+fsnbytes.length);
//?讀取頭文件
setHead(fsnbytes);
long?counter?=?this.fm.getCounter();?//?冠字號信息條數
// System.out.println(“this.fm.getHeadString()[2]=“+this.fm.getHeadString()[2]);
int?size?=?this.fm.getHeadString()[2]?!=?0x2D???fsnPerBodyImg?:?fsnPerBodyNoImg;
// System.out.println(“this.fm.getHeadString()[2]??=“+this.fm.getHeadString()[2]?);
// System.out.println(“counter?=“+counter);
// System.out.println(“size=“+size);
// System.out.println(“counter?=*?size“+counter?*?size);
// System.out.println(“fsnHeadLengh=“+fsnHeadLengh);
//如果fsn文件的長度合一致
if?(counter?*?size?+?fsnHeadLengh?==?fsnbytes.length)?{
ArrayList?list?=?new?ArrayList();
long?ValutaSum=0;
for?(int?i?=?0;?i? FsnBody?body?=?new?FsnBody();
boolean?noException=false;??//處理過程中沒有異常
//每條fsn信息均從i?*?size?+?32(頭的長度)處起始
int?thisPosSart=i?*?size?+?fsnHeadLengh;
//此處處理非常重要,在讀取圖片文件前一定要做處理因為圖片字節流長度固定,644位,getSnoExpImg方法只讀到圖片信息中有數據部分對應的字節流,后面的都是空值,將不再讀取
//某條圖片數據讀完以后,filePos不一定會移至這個圖片數據對應的結尾位置,要在讀取下一條數據時,強制將filePos指向下一條圖片信息對應字節流起始位置
if(filePos filePos=thisPosSart;
}
body?=?getSnoExpImg(fsnbytes);
body.setRecordNum(i+1);??//此條fsn記錄在fsn文件中的順序
ValutaSum?+=?body.getValuta();
if(size!=fsnPerBodyNoImg){
testSnoImg(fsnbytes);??//校驗圖片數據合法性,如果不合法,將拋出異
//map.put(“ImageSno“?imageSno);?//圖片BufferedImage對象?,不能將此數據放入map,一是數據量大時內存溢出,二是效率大打折
byte[]?imgbytes=FsnTools.byteCopy(fsnbytes?thisPosSart+fsnPerBodyNoImg?size-fsnPerBodyNoImg);
body.setImageBytes(imgbytes);?//圖片字節數組數據
imgbytes=null;?//及時釋放圖片字節數組對象,釋放內
}else{
//map.put(“ImageSno“?null);
body.setImageBytes(null);
}
noException=true;
if(noException){???//當沒有異常時記錄解析數據
list.add(body);
}else{
if(this.fm.isPermitException()){??//當有異常時,如果fsn配置文件允許記錄異常,則記錄,否則不記錄
list.add(body);
}
}
}
this.fm.setBodys(lis
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????301??2017-07-23?16:09??TestFsn\.classpath
?????文件????????383??2017-07-23?16:09??TestFsn\.project
?????文件????????598??2017-07-23?16:09??TestFsn\.settings\org.eclipse.jdt.core.prefs
?????文件???????6436??2017-07-23?21:46??TestFsn\bin\action\FsnReaderAction.class
?????文件???????3593??2017-07-23?21:39??TestFsn\bin\bean\FsnBody.class
?????文件???????3812??2017-07-23?21:36??TestFsn\bin\bean\FsnModel.class
?????文件????3192680??2017-07-23?21:46??TestFsn\bin\test\20150914910101.FSN
?????文件???????2270??2017-07-23?21:47??TestFsn\bin\test\FsnTest.class
?????文件??????10053??2017-07-23?21:38??TestFsn\bin\tools\FsnTools.class
?????文件???????9646??2017-07-23?21:46??TestFsn\src\action\FsnReaderAction.java
?????文件???????3686??2017-07-23?21:39??TestFsn\src\bean\FsnBody.java
?????文件???????3163??2017-07-23?21:36??TestFsn\src\bean\FsnModel.java
?????文件????????990??2017-07-23?21:47??TestFsn\src\test\FsnTest.java
?????文件??????12589??2017-07-23?21:38??TestFsn\src\tools\FsnTools.java
?????目錄??????????0??2017-07-23?16:10??TestFsn\bin\action
?????目錄??????????0??2017-07-23?21:35??TestFsn\bin\bean
?????目錄??????????0??2017-07-23?21:46??TestFsn\bin\test
?????目錄??????????0??2017-07-23?21:37??TestFsn\bin\tools
?????目錄??????????0??2017-07-23?16:10??TestFsn\src\action
?????目錄??????????0??2017-07-23?21:35??TestFsn\src\bean
?????目錄??????????0??2017-07-23?21:46??TestFsn\src\test
?????目錄??????????0??2017-07-23?21:37??TestFsn\src\tools
?????目錄??????????0??2017-07-23?16:09??TestFsn\.settings
?????目錄??????????0??2017-07-23?21:37??TestFsn\bin
?????目錄??????????0??2017-07-23?21:37??TestFsn\src
?????目錄??????????0??2017-07-23?16:09??TestFsn
-----------?---------??----------?-----??----
??????????????3250200????????????????????26
- 上一篇:會議室預定系統的Java實現
- 下一篇:西安軟件公司java筆試題
評論
共有 條評論