• 大小: 554KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-13
  • 语言: Java
  • 标签: Java  FSN  

资源简介

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 < counter; 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


评论

共有 条评论