java解析FSN文件.doc
JAVA读取WORD文档解决方案
JAVA读取WORD文档解决方案在Java中读取Word文档需要使用特定的Java库或API来解析和处理Word文档格式(.doc或.docx)。
在下面的解决方案中,我们将介绍两种流行的Java库,即Apache POI和JavaFX的XSSF。
1. Apache POI:Apache POI是一个流行的开源Java库,用于处理Microsoft Office 格式的文件,包括Word文档。
下面是使用Apache POI库读取Word文档的步骤:1.1 添加Apache POI依赖库到项目中。
在Maven项目中,可以在pom.xml文件中添加以下依赖项:```xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>```1.2 使用`XWPFDocument`类打开Word文档。
下面是一个示例代码:```javaFileInputStream fis = newFileInputStream("path/to/word/document.docx");XWPFDocument document = new XWPFDocument(fis);fis.close(;```1.3 使用`XWPFParagraph`类和`XWPFRun`类来遍历Word文档中的段落和文本。
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.getHeadStr ing()[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<FsnBody> list = new ArrayList<FsnBody>();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<thisPosSart){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(list) ;}}catch(Exception e){this.fm.setAnalysisExcepted(true);this.fm.setAnalysisErrorMsg(e.getMessage());//写日志}return this.fm;}/*** 获取Fsn每条记录中的图片对象* @param fsnBytes fsn文件的byte字节流对* @return*/public void testSnoImg(byte[] fsnBytes) throws Exception{ //冠字号码的个数int num = parseInt(fsnBytes);//每个冠字号码的图像宽int height = parseInt(fsnBytes);int width = parseInt(fsnBytes);int Reserve2 = parseInt(fsnBytes);// 图片三维不能小于0if(num<=0||height<=0||width<=0){throw new Exception("图片数据读取失败,长宽和字符数均不能小于等于0");}//冠字号码个数不能多于12if(num>12){throw new Exception("图片数据读取失败,冠字号码个数不能多");}//图片大小不能多于图片缓冲区的总大小,减去108位,包括100位其他字段和8位图像metalong mutiall = 4 * width * num;if (mutiall > fsnPerBodyImg - 108){throw new Exception("图像数据读取失败,图像长度大于图像缓冲器长度");}//int i = 0;//while ( i < width * num) {//byte[] pic=parseByte(fsnBytes,4);//String s=MessageUtil.toBinaryString(pic);//i++;//}}public FsnBody getSnoExpImg(byte[] fsnBytes) {FsnBody body = new FsnBody();// 设置日期时间int data = parseInt(fsnBytes);int time = parseInt(fsnBytes);// System.out.println("data="+data);// System.out.println("time="+time);/*if(time<0){time=-time;}*/int y = data >> 9;int m = (data - (y << 9)) >> 5;int d = data - (y << 9) - (m << 5);int hh = time >> 11;int mm = (time - (hh << 11)) >> 5;int ss = (time - (hh << 11) - (mm << 5)) << 1;/*String DateStr= StrUtil.numAddZero(String.valueOf((y + 1980) ),4)+ "-" + StrUtil.numAddZero(String.valueOf(m),2) + "-" +StrUtil.numAddZero(String.valueOf(d),2);String TimeStr=hh + ":" + mm+ ":" + ss;body.setDateStr(DateStr);body.setTimeStr( TimeStr);//*///*StringBuffer DateBuf=new StringBuffer();StringBuffer TimeBuf=new StringBuffer();DateBuf.append( y + 1980);DateBuf.append( "-");DateBuf.append( FsnTools.numAddZero(m,2) );DateBuf.append( "-");DateBuf.append( FsnTools.numAddZero(d,2) );TimeBuf.append(FsnTools.numAddZero(hh,2) );TimeBuf.append(":");TimeBuf.append(FsnTools.numAddZero(mm,2) );TimeBuf.append(":");TimeBuf.append(FsnTools.numAddZero(ss,2 ));body.setDateStr(DateBuf.toString());body.setTimeStr( TimeBuf.toString());body.setDateStr(DateBuf.toString());body.setTimeStr( TimeBuf.toString());body.setDateTime( body.getDateStr() + " " + body.getTimeStr());// 设置货币真假残和旧币标志body.setTfFlag(parseInt(fsnBytes));// 设置货币错误StringBuffer errorCode = new StringBuffer();/*for (int i = 0; i < 3; i++) {int code = parseInt(fsnBytes);if (code < 13 && code > 0) {errorCode += code + ",";}}if ("1".equals(map.get("TfFlag")))errorCode = errorCode.substring(0, stIndexOf(","));elseerrorCode = "0";*/for (int i = 0; i < 3; i++) {int code = parseInt(fsnBytes);if(i==0){errorCode.append(code);}else{errorCode.append(":") ;errorCode.append(code);}}body.setErrorCode(errorCode.toString());// 设置币种标志String moneyFlag = "";for (int i = 0; i < 4; i++) {int flag = parseInt(fsnBytes);if (flag != 0) {moneyFlag += (char) flag;}}body.setMoneyFlag( moneyFlag);// 设置年版或版本号标志int ver = parseInt(fsnBytes);//body.setVer(FsnTool.deMoneyVer(ver));body.setVer(ver);// 设置币body.setValuta(parseInt(fsnBytes));// 设置冠字号位body.setCharNum(parseInt(fsnBytes));// 设置冠字StringBuffer no = new StringBuffer();for (int i = 0; i < 12; i++) {int No = parseInt(fsnBytes);if (No != 0)no.append( (char) No);}body.setSno(no.toString());// 设置机具编号StringBuffer machineSNo =new StringBuffer();for (int i = 0; i < 24; i++) {int Msno = parseInt(fsnBytes);if (Msno != 0)machineSNo.append( (char) Msno);}body.setMachineSno( machineSNo.toString());// 设置冠字号保留字body.setReserve1( parseInt(fsnBytes));// System.out.println("时间="+body.getDateStr() + " " +body.getTimeStr()+"|真假币标志="+body.getTfFlag()+"|表示最多3组假币特征码="+body.getErrorCode()+"|"+// "|币种标志="+body.getMoneyFlag()+"|年版或版本号标志="+body.getVer()+"|币值="+body.getValuta()+"|冠字号码字符数="+body.getCharNum()+"|存放识别的冠字号码="+// body.getSno()+"|机具编号="+body.getMachineSno()+"|保留字1="+body.getRecordNum());return body;}public void setHead(byte[] fsnBytes) throws Exception { this.filePos=0; //读取文件头数据的当前指针位置,设置字节位移从0开始if(this.fm==null){this.fm=new FsnModel(this.fsnFilePath);}int[] headStart = new int[4];for (int i = 0; i < 4; i++) {headStart[i] = parseInt(fsnBytes);// System.out.println("headStart["+i+"]="+headStart[i]);}fm.setHeadStart(headStart);int[] headString = new int[6];for (int i = 0; i < 6; i++) {headString[i] = parseInt(fsnBytes);// System.out.println("headString["+i+"] ="+headString[i]);}fm.setHeadString(headString);long counter =parseLong(fsnBytes);// System.out.println("counter="+counter);fm.setCounter(counter);int[] headEnd = new int[4];for (int i = 0; i < 4; i++) {headEnd[i] = parseInt(fsnBytes);// System.out.println("headEnd["+i+"]="+headEnd[i]);}fm.setHeadEnd(headEnd);}public int parseInt(byte[] fsnBytes){intret=(int)FsnTools.demarshallintLittle(fsnBytes,filePos,intstep);this.filePos +=intstep;// System.out.println("this.filePos="+this.filePos+"||ret="+ret);return ret;}public long parseLong(byte[] fsnBytes){longret=FsnTools.demarshallintLittle(fsnBytes,filePos,stringstep);this.filePos +=stringstep;return ret;}public byte[] parseByte(byte[] fsnBytes,int length){byte[] ret=FsnTools.convertByteMarshall(fsnBytes,filePos,length);this.filePos +=length;return ret;}}package bean;public class FsnBody {private String DateStr; //验钞启动日期private String TimeStr; //验钞启动时间/**日期+时间* 指定年月日的日期数据的产生算法为: Date = ((Year-1980)<<9) + (Month<<5) + Day其中:Year为年份,大于等于1980;Month为月份;Day为日;指定时分秒的时间数据产生算法为:Time = (Hour<<11) + (Minute<<5) + (Second>>1)其中:0≤Hour < 24,0≤Minute < 60,0≤Second < 60*/private String DateTime; //验钞启动日期+时间private int TfFlag; //真假币标志,0为假币或可疑币,1为真币,2为残币(清分机适用),3为旧币(清分机适用);private String ErrorCode; //表示最多3组假币特征码(特征码有12种,分别为1,2,3,4,5,6,7,8,9,10,11,12),真币时填0;如果只有一组特征码,把特征码填在ErrorCode[0],则其余两组填0;如果有两组特征码,把特征码填在ErrorCode[0]和ErrorCode[1],剩余的一组填0private String MoneyFlag; //币种标志,最多4位大写ASCII英文字母,不足4位的其余位填0:CNY:人民币private int Ver; //年版或版本号标志;人民币用作年版标志,值填0,1,2,分别代表1990,1999,2005三个年版,可根据实际情况扩充;其余币种填9999(表示不考虑年版);private int Valuta; //币值,最大币值为50000private int CharNum; //冠字号码字符数,指明存储在数组SNo的号码个数;private String Sno; //存放识别的冠字号码,每个数组元素存放一位号码(ASCII 字符),最多12位,不足12位的其余位填0;private String MachineSno; //机具编号,必须为24位,每个数组元素存放一位ASCII字符,不足24位的其余位填0;private int Reserve1; //保留字1private int RecordNum; //冠字号信息在Fsn文件中的行号,从1开始private byte[] ImageBytes; //冠字号信息的图片数据字节数组,保存的原始格式,未转换private String ImgStr; //图片压缩后的字符串private String accNo=""; //冠字号信息产生的账号,Atm等自助存取款机才会有此值public String getDateStr() {return DateStr;}public void setDateStr(String dateStr) {DateStr = dateStr;}public String getTimeStr() {return TimeStr;}public void setTimeStr(String timeStr) {TimeStr = timeStr;}public String getDateTime() {return DateTime;}public void setDateTime(String dateTime) {DateTime = dateTime;}public int getTfFlag() {return TfFlag;}public void setTfFlag(int tfFlag) {TfFlag = tfFlag;}public String getErrorCode() {return ErrorCode;}public void setErrorCode(String errorCode) { ErrorCode = errorCode;}public String getMoneyFlag() {return MoneyFlag;}public void setMoneyFlag(String moneyFlag) { MoneyFlag = moneyFlag;}public int getVer() {return Ver;}public void setVer(int ver) {Ver = ver;}public int getValuta() {return Valuta;}public void setValuta(int valuta) {Valuta = valuta;}public int getCharNum() {return CharNum;}public void setCharNum(int charNum) {CharNum = charNum;}public String getSno() {return Sno;}public void setSno(String sno) {Sno = sno;}public String getMachineSno() {return MachineSno;}public void setMachineSno(String machineSno) { MachineSno = machineSno;}public int getReserve1() {return Reserve1;}public void setReserve1(int reserve1) { Reserve1 = reserve1;}public int getRecordNum() {return RecordNum;}public void setRecordNum(int recordNum) {RecordNum = recordNum;}public byte[] getImageBytes() {return ImageBytes;}public void setImageBytes(byte[] imageBytes) {ImageBytes = imageBytes;}public String getImgStr() {return ImgStr;}public void setImgStr(String imgStr) {ImgStr = imgStr;}public String getAccNo() {return accNo;}public void setAccNo(String accNo) {this.accNo = accNo;}}package bean;import java.util.ArrayList;public class FsnModel implements Comparable<FsnModel>{private int[] headStart; // Fsn文件头起始标志,由4个16比特无符号数据组成,内容为十进制数,分别是20,10,7,26;private int[] headString; // Fsn文件体内容,详情参见<冠字号码文件格式说明.doc>private long counter; // 32比特无符号数值,记录当前冠字号码的记录数。
java解析富文本,保留原格式
java解析富文本,保留原格式在Java 中解析富文本并保留原格式通常涉及到处理HTML 内容。
富文本通常以HTML 的形式表示,因此你可以使用Java 中的一些库来解析和处理HTML。
一个常用的库是Jsoup,它是一个用于解析、提取和操作HTML 文档的Java 库。
以下是一个简单的示例,演示了如何使用Jsoup 解析富文本:首先,你需要在你的项目中引入Jsoup,你可以在Maven 项目中添加以下依赖:```xml<dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.14.3</version> <!-- 请根据实际情况调整版本号--></dependency>```然后,你可以使用以下代码解析富文本:```javaimport org.jsoup.Jsoup;import org.jsoup.nodes.Document;public class RichTextParser {public static void main(String[] args) {String richText = "<p>This is <b>rich</b> <i>text</i> with <a href=\"URL\">links</a>.</p>";// 解析富文本String parsedText = parseRichText(richText);// 输出解析后的文本System.out.println(parsedText);}public static String parseRichText(String richText) {// 使用Jsoup 解析HTMLDocument document = Jsoup.parse(richText);// 获取解析后的文本String parsedText = document.text();return parsedText;}}```这个例子中,`Jsoup.parse(richText)` 会将富文本转换成一个`Document` 对象,然后通过`document.text()` 获取其中的纯文本内容。
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.getHeadStr ing()[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<FsnBody> list = new ArrayList<FsnBody>();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<thisPosSart){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(list) ;}}catch(Exception e){this.fm.setAnalysisExcepted(true);this.fm.setAnalysisErrorMsg(e.getMessage());//写日志}return this.fm;}/*** 获取Fsn每条记录中的图片对象* @param fsnBytes fsn文件的byte字节流对* @return*/public void testSnoImg(byte[] fsnBytes) throws Exception{ //冠字号码的个数int num = parseInt(fsnBytes);//每个冠字号码的图像宽int height = parseInt(fsnBytes);int width = parseInt(fsnBytes);int Reserve2 = parseInt(fsnBytes);// 图片三维不能小于0if(num<=0||height<=0||width<=0){throw new Exception("图片数据读取失败,长宽和字符数均不能小于等于0");}//冠字号码个数不能多于12if(num>12){throw new Exception("图片数据读取失败,冠字号码个数不能多");}//图片大小不能多于图片缓冲区的总大小,减去108位,包括100位其他字段和8位图像metalong mutiall = 4 * width * num;if (mutiall > fsnPerBodyImg - 108){throw new Exception("图像数据读取失败,图像长度大于图像缓冲器长度");}//int i = 0;//while ( i < width * num) {//byte[] pic=parseByte(fsnBytes,4);//String s=MessageUtil.toBinaryString(pic);//i++;//}}public FsnBody getSnoExpImg(byte[] fsnBytes) {FsnBody body = new FsnBody();// 设置日期时间int data = parseInt(fsnBytes);int time = parseInt(fsnBytes);// System.out.println("data="+data);// System.out.println("time="+time);/*if(time<0){time=-time;}*/int y = data >> 9;int m = (data - (y << 9)) >> 5;int d = data - (y << 9) - (m << 5);int hh = time >> 11;int mm = (time - (hh << 11)) >> 5;int ss = (time - (hh << 11) - (mm << 5)) << 1;/*String DateStr= StrUtil.numAddZero(String.valueOf((y + 1980) ),4)+ "-" + StrUtil.numAddZero(String.valueOf(m),2) + "-" +StrUtil.numAddZero(String.valueOf(d),2);String TimeStr=hh + ":" + mm+ ":" + ss;body.setDateStr(DateStr);body.setTimeStr( TimeStr);//*///*StringBuffer DateBuf=new StringBuffer();StringBuffer TimeBuf=new StringBuffer();DateBuf.append( y + 1980);DateBuf.append( "-");DateBuf.append( FsnTools.numAddZero(m,2) );DateBuf.append( "-");DateBuf.append( FsnTools.numAddZero(d,2) );TimeBuf.append(FsnTools.numAddZero(hh,2) );TimeBuf.append(":");TimeBuf.append(FsnTools.numAddZero(mm,2) );TimeBuf.append(":");TimeBuf.append(FsnTools.numAddZero(ss,2 ));body.setDateStr(DateBuf.toString());body.setTimeStr( TimeBuf.toString());body.setDateStr(DateBuf.toString());body.setTimeStr( TimeBuf.toString());body.setDateTime( body.getDateStr() + " " + body.getTimeStr());// 设置货币真假残和旧币标志body.setTfFlag(parseInt(fsnBytes));// 设置货币错误StringBuffer errorCode = new StringBuffer();/*for (int i = 0; i < 3; i++) {int code = parseInt(fsnBytes);if (code < 13 && code > 0) {errorCode += code + ",";}}if ("1".equals(map.get("TfFlag")))errorCode = errorCode.substring(0, stIndexOf(","));elseerrorCode = "0";*/for (int i = 0; i < 3; i++) {int code = parseInt(fsnBytes);if(i==0){errorCode.append(code);}else{errorCode.append(":") ;errorCode.append(code);}}body.setErrorCode(errorCode.toString());// 设置币种标志String moneyFlag = "";for (int i = 0; i < 4; i++) {int flag = parseInt(fsnBytes);if (flag != 0) {moneyFlag += (char) flag;}}body.setMoneyFlag( moneyFlag);// 设置年版或版本号标志int ver = parseInt(fsnBytes);//body.setVer(FsnTool.deMoneyVer(ver));body.setVer(ver);// 设置币body.setValuta(parseInt(fsnBytes));// 设置冠字号位body.setCharNum(parseInt(fsnBytes));// 设置冠字StringBuffer no = new StringBuffer();for (int i = 0; i < 12; i++) {int No = parseInt(fsnBytes);if (No != 0)no.append( (char) No);}body.setSno(no.toString());// 设置机具编号StringBuffer machineSNo =new StringBuffer();for (int i = 0; i < 24; i++) {int Msno = parseInt(fsnBytes);if (Msno != 0)machineSNo.append( (char) Msno);}body.setMachineSno( machineSNo.toString());// 设置冠字号保留字body.setReserve1( parseInt(fsnBytes));// System.out.println("时间="+body.getDateStr() + " " +body.getTimeStr()+"|真假币标志="+body.getTfFlag()+"|表示最多3组假币特征码="+body.getErrorCode()+"|"+// "|币种标志="+body.getMoneyFlag()+"|年版或版本号标志="+body.getVer()+"|币值="+body.getValuta()+"|冠字号码字符数="+body.getCharNum()+"|存放识别的冠字号码="+// body.getSno()+"|机具编号="+body.getMachineSno()+"|保留字1="+body.getRecordNum());return body;}public void setHead(byte[] fsnBytes) throws Exception { this.filePos=0; //读取文件头数据的当前指针位置,设置字节位移从0开始if(this.fm==null){this.fm=new FsnModel(this.fsnFilePath);}int[] headStart = new int[4];for (int i = 0; i < 4; i++) {headStart[i] = parseInt(fsnBytes);// System.out.println("headStart["+i+"]="+headStart[i]);}fm.setHeadStart(headStart);int[] headString = new int[6];for (int i = 0; i < 6; i++) {headString[i] = parseInt(fsnBytes);// System.out.println("headString["+i+"] ="+headString[i]);}fm.setHeadString(headString);long counter =parseLong(fsnBytes);// System.out.println("counter="+counter);fm.setCounter(counter);int[] headEnd = new int[4];for (int i = 0; i < 4; i++) {headEnd[i] = parseInt(fsnBytes);// System.out.println("headEnd["+i+"]="+headEnd[i]);}fm.setHeadEnd(headEnd);}public int parseInt(byte[] fsnBytes){intret=(int)FsnTools.demarshallintLittle(fsnBytes,filePos,intstep);this.filePos +=intstep;// System.out.println("this.filePos="+this.filePos+"||ret="+ret);return ret;}public long parseLong(byte[] fsnBytes){longret=FsnTools.demarshallintLittle(fsnBytes,filePos,stringstep);this.filePos +=stringstep;return ret;}public byte[] parseByte(byte[] fsnBytes,int length){byte[] ret=FsnTools.convertByteMarshall(fsnBytes,filePos,length);this.filePos +=length;return ret;}}package bean;public class FsnBody {private String DateStr; //验钞启动日期private String TimeStr; //验钞启动时间/**日期+时间* 指定年月日的日期数据的产生算法为: Date = ((Year-1980)<<9) + (Month<<5) + Day其中:Year为年份,大于等于1980;Month为月份;Day为日;指定时分秒的时间数据产生算法为:Time = (Hour<<11) + (Minute<<5) + (Second>>1)其中:0≤Hour < 24,0≤Minute < 60,0≤Second < 60*/private String DateTime; //验钞启动日期+时间private int TfFlag; //真假币标志,0为假币或可疑币,1为真币,2为残币(清分机适用),3为旧币(清分机适用);private String ErrorCode; //表示最多3组假币特征码(特征码有12种,分别为1,2,3,4,5,6,7,8,9,10,11,12),真币时填0;如果只有一组特征码,把特征码填在ErrorCode[0],则其余两组填0;如果有两组特征码,把特征码填在ErrorCode[0]和ErrorCode[1],剩余的一组填0private String MoneyFlag; //币种标志,最多4位大写ASCII英文字母,不足4位的其余位填0:CNY:人民币private int Ver; //年版或版本号标志;人民币用作年版标志,值填0,1,2,分别代表1990,1999,2005三个年版,可根据实际情况扩充;其余币种填9999(表示不考虑年版);private int Valuta; //币值,最大币值为50000private int CharNum; //冠字号码字符数,指明存储在数组SNo的号码个数;private String Sno; //存放识别的冠字号码,每个数组元素存放一位号码(ASCII 字符),最多12位,不足12位的其余位填0;private String MachineSno; //机具编号,必须为24位,每个数组元素存放一位ASCII字符,不足24位的其余位填0;private int Reserve1; //保留字1private int RecordNum; //冠字号信息在Fsn文件中的行号,从1开始private byte[] ImageBytes; //冠字号信息的图片数据字节数组,保存的原始格式,未转换private String ImgStr; //图片压缩后的字符串private String accNo=""; //冠字号信息产生的账号,Atm等自助存取款机才会有此值public String getDateStr() {return DateStr;}public void setDateStr(String dateStr) {DateStr = dateStr;}public String getTimeStr() {return TimeStr;}public void setTimeStr(String timeStr) {TimeStr = timeStr;}public String getDateTime() {return DateTime;}public void setDateTime(String dateTime) {DateTime = dateTime;}public int getTfFlag() {return TfFlag;}public void setTfFlag(int tfFlag) {TfFlag = tfFlag;}public String getErrorCode() {return ErrorCode;}public void setErrorCode(String errorCode) { ErrorCode = errorCode;}public String getMoneyFlag() {return MoneyFlag;}public void setMoneyFlag(String moneyFlag) { MoneyFlag = moneyFlag;}public int getVer() {return Ver;}public void setVer(int ver) {Ver = ver;}public int getValuta() {return Valuta;}public void setValuta(int valuta) {Valuta = valuta;}public int getCharNum() {return CharNum;}public void setCharNum(int charNum) {CharNum = charNum;}public String getSno() {return Sno;}public void setSno(String sno) {Sno = sno;}public String getMachineSno() {return MachineSno;}public void setMachineSno(String machineSno) { MachineSno = machineSno;}public int getReserve1() {return Reserve1;}public void setReserve1(int reserve1) { Reserve1 = reserve1;}public int getRecordNum() {return RecordNum;}public void setRecordNum(int recordNum) {RecordNum = recordNum;}public byte[] getImageBytes() {return ImageBytes;}public void setImageBytes(byte[] imageBytes) {ImageBytes = imageBytes;}public String getImgStr() {return ImgStr;}public void setImgStr(String imgStr) {ImgStr = imgStr;}public String getAccNo() {return accNo;}public void setAccNo(String accNo) {this.accNo = accNo;}}package bean;import java.util.ArrayList;public class FsnModel implements Comparable<FsnModel>{private int[] headStart; // Fsn文件头起始标志,由4个16比特无符号数据组成,内容为十进制数,分别是20,10,7,26;private int[] headString; // Fsn文件体内容,详情参见<冠字号码文件格式说明.doc>private long counter; // 32比特无符号数值,记录当前冠字号码的记录数。
java文件解析获取方法和方法
java文件解析获取方法和方法There are multiple ways to parse and retrieve methods from a Java file. One common approach is to use a library like JavaParser, which allows for easy manipulation of Java code. By leveraging the JavaParser library, developers can access the abstract syntax tree (AST) of a Java file, enabling them to extract methods and other code elements programmatically.使用JavaParser这样的库是解析和获取Java文件中方法的常见方法之一。
借助JavaParser库,开发人员可以访问Java文件的抽象语法树(AST),从而使他们能够以编程方式提取方法和其他代码元素。
Another way to parse a Java file for methods is to use regular expressions. Regular expressions can help to identify method signatures and names within the Java file, allowing developers to extract this information for further processing. While this approach may be more manual and error-prone than using a library like JavaParser, it can still be effective in certain scenarios.解析Java文件中的方法的另一种方法是使用正则表达式。
NFS报文分析范文
NFS报文分析范文NFS(Network File System)是一种在网络上共享文件系统的协议。
它允许多台计算机通过网络连接和共享文件和目录,使得用户可以像访问本地文件一样访问远程文件。
NFS协议采用客户端-服务器的模型,其中客户端是需要访问远程文件的计算机,而服务器则存储和管理文件。
NFS报文是在客户端和服务器之间传输的协议数据单元,用于进行文件访问和操作。
在NFS报文中,最常见的操作类型包括读取文件、写入文件、创建目录、删除文件等。
下面我们将对其中几种常见的操作类型进行分析。
1. 读取文件(Read):客户端向服务器发送一个读取请求,请求读取指定文件的内容。
报文头中包含了操作类型为Read,报文体中包含了读取的文件句柄、读取的起始位置和读取的字节数。
服务器接收到请求后,会读取文件的对应部分内容,并将内容返回给客户端。
2. 写入文件(Write):客户端向服务器发送一个写入请求,请求将指定数据写入到指定文件中。
报文头中包含了操作类型为Write,报文体中包含了写入的文件句柄、写入的起始位置和写入的数据。
服务器接收到请求后,会将数据写入到文件的对应位置。
3. 创建目录(Create):客户端向服务器发送一个创建目录的请求,请求在指定目录下创建一个新的子目录。
报文头中包含了操作类型为Create,报文体中包含了创建的目录路径和权限等信息。
服务器接收到请求后,会在指定目录下创建一个新的子目录,并返回创建结果给客户端。
4. 删除文件(Remove):客户端向服务器发送一个删除文件的请求,请求删除指定的文件。
报文头中包含了操作类型为Remove,报文体中包含了要删除的文件路径。
服务器接收到请求后,会删除指定的文件,并返回删除结果给客户端。
除了以上提到的几种操作类型,NFS协议还支持许多其他操作类型,如重命名文件、列出目录内容、获取文件属性等。
总结起来,NFS报文分析涉及到了报文头和报文体的解析,通过解析报文头可以获取操作类型和相关参数,而解析报文体可以获取操作所需的具体数据。
java中对json进行解析(使用net.sf.json)
net.sf.json依赖的包很多。
有commons-collections,commons-beanutils.jar,commons-httpclient.jar,commons-lang.jar,ezmorph-1.0.5.jar,morph-1.1.1.jar1./**2.* 从一个JSON 对象字符格式中得到一个java对象,形如:3.* {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...}}4.* @param object5.* @param clazz6.* @return7.*/8. public static Object getDTO(String jsonString, Class clazz){9. JSONObject jsonObject = null;10. try{11. setDataFormat2JAVA();12. jsonObject = JSONObject.fromObject(jsonString);13. }catch(Exception e){14. e.printStackTrace();15. }16. return JSONObject.toBean(jsonObject, clazz);17. }18.19./**20.* 从一个JSON 对象字符格式中得到一个java对象,其中beansList是一类的集合,形如:21.* {"id" : idValue, "name" : nameValue, "aBean" : {"aBeanId" : aBeanIdValue, ...},22.* beansList:[{}, {}, ...]}23.* @param jsonString24.* @param clazz25.* @param map 集合属性的类型(key : 集合属性名, value : 集合属性类型clas s) eg: ("beansList" : Bean.class)26.* @return27.*/28. public static Object getDTO(String jsonString, Class clazz, Map map){29. JSONObject jsonObject = null;30. try{31. setDataFormat2JAVA();32. jsonObject = JSONObject.fromObject(jsonString);33. }catch(Exception e){34. e.printStackTrace();35. }36. return JSONObject.toBean(jsonObject, clazz, map);37. }38.39./**40.* 从一个JSON数组得到一个java对象数组,形如:41.* [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]42.* @param object43.* @param clazz44.* @return45.*/46. public static Object[] getDTOArray(String jsonString, Class clazz){47. setDataFormat2JAVA();48. JSONArray array = JSONArray.fromObject(jsonString);49. Object[] obj = new Object[array.size()];50. for(int i = 0; i < array.size(); i++){51. JSONObject jsonObject = array.getJSONObject(i);52. obj[i] = JSONObject.toBean(jsonObject, clazz);53. }54. return obj;55. }56.57./**58.* 从一个JSON数组得到一个java对象数组,形如:59.* [{"id" : idValue, "name" : nameValue}, {"id" : idValue, "name" : nameValue}, ...]60.* @param object61.* @param clazz62.* @param map63.* @return64.*/65. public static Object[] getDTOArray(String jsonString, Class clazz, Map map){66. setDataFormat2JAVA();67. JSONArray array = JSONArray.fromObject(jsonString);68. Object[] obj = new Object[array.size()];69. for(int i = 0; i < array.size(); i++){70. JSONObject jsonObject = array.getJSONObject(i);71. obj[i] = JSONObject.toBean(jsonObject, clazz, map);72. }73. return obj;74. }75./**76.* 从一个JSON数组得到一个java对象集合77.* @param object78.* @param clazz79.* @return80.*/81. public static List getDTOList(String jsonString, Class clazz){82. setDataFormat2JAVA();83. JSONArray array = JSONArray.fromObject(jsonString);84. List list = new ArrayList();85. for(Iterator iter = array.iterator(); iter.hasNext();){86. JSONObject jsonObject = (JSONObject)iter.next();87. list.add(JSONObject.toBean(jsonObject, clazz));88. }89. return list;90. }91.92./**93.* 从一个JSON数组得到一个java对象集合,其中对象中包含有集合属性94.* @param object95.* @param clazz96.* @param map 集合属性的类型97.* @return98.*/99. public static List getDTOList(String jsonString, Class clazz, Map map){ 100. setDataFormat2JAVA();101. JSONArray array = JSONArray.fromObject(jsonString);102. List list = new ArrayList();103. for(Iterator iter = array.iterator(); iter.hasNext();){104. JSONObject jsonObject = (JSONObject)iter.next();105. list.add(JSONObject.toBean(jsonObject, clazz, map));106. }107. return list;108. }109.110./**111.* 从json HASH表达式中获取一个map,该map支持嵌套功能112.* 形如:{"id" : "johncon", "name" : "小强"}113.* 注意commons-collections版本,必须包含mons.collections.map. MultiKeyMap114.* @param object115.* @return116.*/117. public static Map getMapFromJson(String jsonString) {118. setDataFormat2JAVA();119. JSONObject jsonObject = JSONObject.fromObject(jsonString);120. Map map = new HashMap();121. for(Iterator iter = jsonObject.keys(); iter.hasNext();){122. String key = (String)iter.next();123. map.put(key, jsonObject.get(key));124. }125. return map;126. }127.128./**129.* 从json数组中得到相应java数组130.* json形如:["123", "456"]131.* @param jsonString132.* @return133.*/134. public static Object[] getObjectArrayFromJson(String jsonString) {135. JSONArray jsonArray = JSONArray.fromObject(jsonString);136. return jsonArray.toArray();137. }138.139./**140.* 把数据对象转换成json字符串141.* DTO对象形如:{"id" : idValue, "name" : nameValue, ...}142.* 数组对象形如:[{}, {}, {}, ...]143.* map对象形如:{key1 : {"id" : idValue, "name" : nameValue, ...}, key2 : {}, ...}144.* @param object145.* @return146.*/147. public static String getJSONString(Object object) throws Exception{148. String jsonString = null;149.//日期值处理器150. JsonConfig jsonConfig = new JsonConfig();151. jsonConfig.registerJsonValueProcessor(java.util.Date.class, new JsonDateValue Processor());152. if(object != null){153. if(object instanceof Collection || object instanceof Object[]){154. jsonString = JSONArray.fromObject(object, jsonConfig).toString(); 155. }else{156. jsonString = JSONObject.fromObject(object, jsonConfig).toString(); 157. }158. }159. return jsonString == null ? "{}" : jsonString; 160. }。
java解析文件代码
java解析文件代码Java解析文件是编写Java应用程序开发过程中非常常见的操作。
它通常被用来读取和操作各种文件类型,如文本文件、XML文件、JSON 文件等。
在本篇文章中,我将通过几个步骤为您详细介绍Java解析文件的操作。
第一步:打开文件在Java中,使用FileInputStream或FileReader打开文件并将其读取到内存中。
在使用FileInputStream时,您可以通过调用read 方法一次读取一个字节,或者调用read(byte[] b, int off, int len)方法一次读取多个字节。
当使用FileReader时,您可以一次读取一个字符或一行字符。
下面是一个示例:```FileInputStream fis = new FileInputStream("file.txt");int content;while ((content = fis.read()) != -1) {// 处理读取到的字节}fis.close();```上述代码将文件"file.txt"一次读取一个字节,并在读取到文件结束符时停止读取。
要一次读取多个字节,请使用以下代码:```byte[] buffer = new byte[1024];int len;while ((len = fis.read(buffer)) != -1) {// 处理读取到的字节数组}```第二步:解析文件内容Java中有多种方式可以解析文件内容,如使用BufferedReader 读取文本文件、使用SAX解析XML、使用GSON解析JSON等。
这里我们以解析JSON为例,使用GSON库来完成。
首先,您需要导入GSON的jar包。
然后,在Java程序中创建以下代码:```Gson gson = new Gson();MyObject obj = gson.fromJson(new FileReader("file.json"), MyObject.class);```上述代码将JSON格式的文件"file.json"解析成Java对象MyObject(MyObject类是您自己定义的Java对象类),使您可以轻松地访问JSON文件中的数据。
java解析文件夹获取文件的相对路径
java解析文件夹获取文件的相对路径标题:深度解析Java文件夹解析:获取文件相对路径的实用技巧在软件开发领域,Java语言一直是最受欢迎的编程语言之一。
在Java 中,经常会涉及到文件夹解析和获取文件的相对路径,这是一个非常实用的技巧。
本文将深度探讨如何在Java中解析文件夹并获取文件的相对路径,帮助读者更深入地理解这一关键主题。
一、文件夹解析概述在Java中,文件夹解析是指对指定文件夹进行遍历,获取其中的文件和子文件夹的过程。
在实际应用中,我们经常需要对文件夹进行解析,以便获取文件的相对路径、进行文件操作等。
Java中提供了多种方式来实现文件夹解析,包括递归遍历、使用File类、使用NIO等。
接下来,我们将分别对这些方式进行深入探讨。
二、递归遍历文件夹递归遍历是一种常见而又经典的文件夹解析方式。
通过递归算法,我们可以深入地遍历文件夹中的所有文件和子文件夹,并获取它们的相对路径。
在Java中,可以通过编写递归函数来实现文件夹的深度遍历,从而获取文件的相对路径。
下面是一个简单的示例代码:```javapublic class FileUtil {public static void listFiles(File dir) {if (dir.isDirectory()) {File[] files = dir.listFiles();for (File file : files) {if (file.isDirectory()) {listFiles(file);} else {String relativePath =file.getAbsolutePath().substring(dir.getAbsolutePath().length() + 1);System.out.println(relativePath);}}}}public static void main(String[] args) {File folder = new File("path_to_your_folder");listFiles(folder);}}```以上代码演示了如何通过递归遍历文件夹,获取文件的相对路径。
fsn 2018格式 解析
fsn 2018格式 解析
FSN文件是指银行业使用的一种文件格式,它包含5个部分:- 头部:用于通信参数、版本、日期等基础信息的描述。
- 凭证部分:记录客户所有产生的交易,可以快速查询客户的资金流向。
- 利息计算区:根据不同的产品,记录了每日和月底/季度/年终的利息计算公式。
- 信息区:保存成千上万个客户的相关信息,例如证件号码、账户类型、银行卡号等。
- 尾部:通常是控制位和补位,用于保证完整性和正确性。
FSN文件提供了多种优势,如安全性、稳定性、物理与逻辑隔离以及更好的信息管理。
随着AI技术的引入,银行可以对FSN文件进行数据分析、数据挖掘和模型建立,以提供更高质量、更智能的服务,从而提高业务运营效率。
java读写json格式的文件方法详解
java读写json格式的文件方法详解.txt41滴水能穿石,只因为它永远打击同一点。
42火柴如果躲避燃烧的痛苦,它的一生都将黯淡无光。
Java 读写json格式的文件方法详解文章录入: 责任编辑: 2837【字体:小大】一、要解决这个问题首先要知道json格式是什么?JSON格式:比如学生有学号,姓名,性别等。
用json表示则为:{"studno":"11111","studname":"wwww","studsex":"男"}(各个字段都是字符型)这代表一个学生的信息。
如果多个呢?[{"studno":"122222","studname":"wwww","studsex":"男"}, {"studno":"11111","studname":"xxxx","studsex":"男"}, {"studno":"33333","studname":"ssss","studsex":"男"}]这就是json格式。
二、那如何操作json格式的文件呢?这个更简单了,说白了就是直接读写文件,再把读出来的文件内容格式化成json就可以了。
三、具体操作。
1.我有一个实体类,如下:public class ElectSet {public String xueqi;public String xuenian;public String startTime;public String endTime;public int menshu;public String isReadDB;//{"xueqi":,"xuenian":,"startTime":,"endTime":,"renshu":,"isReadDB":}public String getXueqi() {return xueqi;}public void setXueqi(String xueqi) {this.xueqi = xueqi;}public String getXuenian() {return xuenian;}public void setXuenian(String xuenian) {this.xuenian = xuenian;}public String getStartTime() {return startTime;}public void setStartTime(String startTime) {this.startTime = startTime;}public String getEndTime() {return endTime;}public void setEndTime(String endTime) {this.endTime = endTime;}public int getMenshu() {return menshu;}public void setMenshu(int menshu) {this.menshu = menshu;}public String getIsReadDB() {return isReadDB;}public void setIsReadDB(String isReadDB) {this.isReadDB = isReadDB;}}2.有一个json格式的文件,存的就是他的信息,如下Sets.json:{"xuenian":"2007-2008","xueqi":"1","startTime":"2009-07-1908:30","endTime":"2009-07-22 18:00","menshu":"10","isReadDB":"Y"}3.具体操作./** 取出文件内容,填充对象*/public ElectSet findElectSet(String path){ElectSet electset=new ElectSet();String sets=ReadFile(path);//获得json文件的内容JSONObject jo=JSONObject.fromObject(sets);//格式化成json对象//System.out.println("------------" jo);//String name = jo.getString("xuenian");//System.out.println(name);electset.setXueqi(jo.getString("xueqi"));electset.setXuenian(jo.getString("xuenian"));electset.setStartTime(jo.getString("startTime"));electset.setEndTime(jo.getString("endTime"));electset.setMenshu(jo.getInt("menshu"));electset.setIsReadDB(jo.getString("isReadDB"));return electset;}//设置属性,并保存public boolean setElect(String path,String sets){try {writeFile(path,sets);return true;} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();return false;}}//读文件,返回字符串public String ReadFile(String path){File file = new File(path);BufferedReader reader = null;String laststr = "";try {//System.out.println("以行为单位读取文件内容,一次读一整行:"); reader = new BufferedReader(new FileReader(file));String tempString = null;int line = 1;//一次读入一行,直到读入null为文件结束while ((tempString = reader.readLine()) != null) {//显示行号System.out.println("line " line ": " tempString);laststr = laststr tempString;line ;}reader.close();} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e1) {}}}return laststr;}//把json格式的字符串写到文件public void writeFile(String filePath, String sets) throws IOException {FileWriter fw = new FileWriter(filePath);PrintWriter out = new PrintWriter(fw);out.write(sets);out.println();fw.close();out.close();}4.调用,使用(在网站的controller里调用的)//取出json对象public void GetElectSettings(HttpServletRequest request,HttpServletResponse response) throws Exception {ElectSet electset=new ElectSet();String absPath = request.getRealPath("\\");String filePath = absPath "public\\sets\\electSets.json";electset=businessService.findElectSets(filePath);//这里是调用,大家自己改改,我调用的业务层的。
java json解析代码
java json解析代码在Java中,常用的解析JSON的代码有以下几种:- 使用`org.json`包:```javaString jsonString = "{ "Info" : { " Name" : " test" }, " data" : [ { " Img" : " test.jpg" } ] }";JSONObject obj = new JSONObject(jsonString);String name = obj.getJSONObject("Info").getString("Name");```- 使用`jackson`库:```javaString jsonString = "{ "Info" : { " Name" : " test" }, " data" : [ { " Img" : " test.jpg" } ] }";ObjectMapper mapper = new ObjectMapper();Dat dat = mapper.readValue(jsonString, Dat.class);System.out.println(dat.getInfo().getName());```- 使用`google gson`库:```javaString jsonString = "{ "Info" : { " Name" : " test" }, " data" : [ { " Img" : " test.jpg" } ] }";JsonParser parser = new JsonParser();JsonObject obj = parser.parseString(jsonString).getAsJsonObject();System.out.println(obj.getAsJsonObject("Info").get("Name").getAsString());```- 使用`fastjson`库:```javaString jsonString = "{ "Info" : { " Name" : " test" }, " data" : [ { " Img" :" test.jpg" } ] }";JSONObject obj = JSON.parseObject(jsonString);String name = obj.getJSONObject("Info").getString("Name");```你可以根据实际情况选择适合的解析代码。
Java解析(读取)Json数据
Java解析(读取)Json数据以前看过书上说,XML是web service间传输信息的标准格式吧,就看了看XML。
最近在做个⽹站,⼜说是有了JSON,第⼀回听说就看了看,总结总结⼀下。
1.JSON介绍 JSON⽐XML简单,主要体现在传输相同信息的情况下,⽂件的⼤⼩不同。
JSON只⽤于传输信息,XML还可以⽤于配置⽂件的使⽤。
JSON中的符号主要有: " , [ {:2.JSON中的数组和对象 2.1数组(JSONArray) 数组⽤⼀对[],表⽰存放的是⼀般的数组数据。
如:["11","22","33"],表⽰这是⼀个JSONArray数组,⾥⾯有3个数据:”11“,”22“,”33“。
当然可以是复杂的数据,就是所谓的嵌套定义吧。
2.对象(JSONObject) 对象⽤⼀对{},来表⽰其中JSON通⽤的”键-值“对。
如:{"sex1":"female","name0":"zhangsan"},表⽰的是⼀个JSON对象,⾥⾯有两组数据(键值对),sex1=female,name0=zhangsan。
当然这⾥键对应的数据值,可以是复杂的JSON对象或者数组。
3.代码⽰例3.1基本的JSONArray与JSONObject操作import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class ObjectAndArray1 {public static void main(String args[]){JSONObject jsonObj = new JSONObject();jsonObj.put("name0", "zhangsan");jsonObj.put("sex1", "female");System.out.println(jsonObj); //输出为:{"sex1":"female","name0":"zhangsan"}JSONArray jsonArray = new JSONArray();jsonArray.add("11");jsonArray.add("22");jsonArray.add("33");System.out.println(jsonArray); //输出为:["11","22","33"]}}3.2由java⾃带的数据结构转换为JSON⽂本import java.util.HashMap;import java.util.Map;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class ObjectAndArray2{public static void main(String args[]){//可以由数组,列表等⽣成JSONArrayString list[]={"11","22"};JSONArray jsonarray = JSONArray.fromObject(list);jsonarray.add("33");System.out.println(jsonarray); //输出为:["11","22","33"]//可以由Map⽣成JSONObjectMap<String,Object> map=new HashMap<String,Object>();map.put("NO1", "第⼀个");map.put("NO2", "第⼆个");map.put("NO3", jsonarray);JSONObject jsonObj = JSONObject.fromObject(map);System.out.println(jsonObj); //输出为:{"NO3":["11","22","33"],"NO2":"第⼆个","NO1":"第⼀个"}}}3.3读取JSON⽂本JSONArray必须⽤下标读取内部数据。
java解析office文件大全
java解析office⽂件⼤全读取OFFICE⽂件纯⽂本package org.css.resource.businesssoft.searchengine.quwenjiansuo;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import org.apache.poi.POITextExtractor;import org.apache.poi.POIXMLDocument;import org.apache.poi.POIXMLTextExtractor;import org.apache.poi.extractor.ExtractorFactory;import ermodel.HSSFCell;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.apache.poi.hwpf.extractor.WordExtractor;import org.apache.poi.openxml4j.exceptions.OpenXML4JException;import org.apache.poi.openxml4j.opc.OPCPackage;import ermodel.XSSFCell;import ermodel.XSSFRow;import ermodel.XSSFSheet;import ermodel.XSSFWorkbook;import org.apache.poi.xwpf.extractor.XWPFWordExtractor;import org.apache.xmlbeans.XmlException;/**** @author lizh**/public class CovertFile {/*** 从word 2003⽂档中提取纯⽂本* @param is* @return* @throws IOException*/public static String extractTextFromDOC(InputStream is) throws IOException {WordExtractor ex = new WordExtractor(is); // is是WORD⽂件的InputStreamreturn ex.getText();}/*** 从word 2007⽂档中提取纯⽂本* @param fileName* @return*/public static String extractTextFromDOC2007(String fileName) {try {OPCPackage opcPackage = POIXMLDocument.openPackage(fileName);POIXMLTextExtractor ex = new XWPFWordExtractor(opcPackage);return ex.getText();} catch (Exception e) {return "";}}/*** 从excel 2003⽂档中提取纯⽂本* @param is* @return* @throws IOException*/private static String extractTextFromXLS(InputStream is) throws IOException {StringBuffer content = new StringBuffer();HSSFWorkbook workbook = new HSSFWorkbook(is); // 创建对Excel⼯作簿⽂件的引⽤for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {if (null != workbook.getSheetAt(numSheets)) {HSSFSheet aSheet = workbook.getSheetAt(numSheets); // 获得⼀个sheetfor (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {if (null != aSheet.getRow(rowNumOfSheet)) {HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得⼀⾏for (short cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {if (null != aRow.getCell(cellNumOfRow)) {HSSFCell aCell = aRow.getCell(cellNumOfRow); // 获得列值if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {content.append(aCell.getNumericCellValue());} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { content.append(aCell.getBooleanCellValue());} else {content.append(aCell.getStringCellValue());}}}}}}}return content.toString();}/*** 从excel 2007⽂档中提取纯⽂本* @param fileName* @return* @throws Exception*/private static String extractTextFromXLS2007(String fileName)throws Exception {StringBuffer content = new StringBuffer();// 构造 XSSFWorkbook 对象,strPath 传⼊⽂件路径XSSFWorkbook xwb = new XSSFWorkbook(fileName);// 循环⼯作表Sheetfor (int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++) {XSSFSheet xSheet = xwb.getSheetAt(numSheet);if (xSheet == null) {continue;}// 循环⾏Rowfor (int rowNum = 0; rowNum <= xSheet.getLastRowNum(); rowNum++) {XSSFRow xRow = xSheet.getRow(rowNum);if (xRow == null) {continue;}// 循环列Cellfor (int cellNum = 0; cellNum <= xRow.getLastCellNum(); cellNum++) {XSSFCell xCell = xRow.getCell(cellNum);if (xCell == null) {continue;}if (xCell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {content.append(xCell.getBooleanCellValue());} else if (xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {content.append(xCell.getNumericCellValue());} else {content.append(xCell.getStringCellValue());}}}}return content.toString();}/*** 从excel 2007⽂档中提取纯⽂本* @param fileName* @return*/public static String getXLS2007(String fileName){String doc = "";try{doc = extractTextFromXLS2007(fileName);return doc;}catch(Exception e){return "";}}/*** 从ppt 2003、2007⽂档中提取纯⽂本* @param fileName* @return*/public static String getPPTX(String fileName){String doc = "";try{File inputFile = new File(fileName);POITextExtractor extractor = ExtractorFactory.createExtractor(inputFile);doc = extractor.getText();return doc;}catch(Exception e){return "";}}public static void main(String[] args) {try {// String wordFile = "D:/松⼭⾎战.docx";// String wordText2007 = CovertFile.extractTextFromDOC2007(wordFile);// System.out.println("wordText2007=======" + wordText2007);//// InputStream is = new FileInputStream("D:/XXX研发中⼼技术岗位职位需求.xls"); // String excelText = CovertFile.extractTextFromXLS(is);// System.out.println("text2003==========" + excelText);// String excelFile = "D:/zh.xlsx";// String excelText2007 = CovertFile.extractTextFromXLS2007(excelFile);// System.out.println("excelText2007==========" + excelText2007);String pptFile = "D:/zz3.ppt";String pptx = CovertFile.getPPTX(pptFile);System.out.println("pptx==========" + pptx);} catch (Exception e) {e.printStackTrace();}}}最后突然发现其实只⽤两⾏代码就能搞定office 2003 - office 2007POITextExtractor extractor = ExtractorFactory.createExtractor(f);return extractor.getText();于是我泪流满⾯....⽩忙乎了..顺路奉上解析pdf的吧package com.lingjoin.extractors;import java.io.BufferedReader;import java.io.FileNotFoundException;import java.io.IOException;import java.io.StringReader;import java.util.Date;import org.apache.pdfbox.pdmodel.PDDocument;import org.apache.pdfbox.pdmodel.PDDocumentInformation;import org.apache.pdfbox.util.PDFTextStripper;import com.lingjoin.paser.LingJoinFile;/*** PDF解析器** @author Ansj**/public class PDFExtractor extends AbstractExtractor {private String getContent(LingJoinFile f) {// TODO Auto-generated method stubPDDocument doc = null ;try {doc = PDDocument.load(f);PDFTextStripper stripper = new PDFTextStripper();/*** 设置⽂件的信息*/this.setLingJoinFileInfo(f, doc.getDocumentInformation());return stripper.getText(doc);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (doc != null) {try {doc.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}return "";}private BufferedReader getContentReader(LingJoinFile f) {return new BufferedReader(new StringReader(this.getContent(f)));}/**** 项⽬名称:FilePaser* 类描述:设置⽂件的信息* 创建⼈:ANSJ* 创建时间:2010-4-14 下午04:27:57* 修改备注:* @version*/private void setLingJoinFileInfo(LingJoinFile f, PDDocumentInformation info) { if (info.getAuthor() != null) {f.setlAuthor(info.getAuthor());}// try {// if (info.getModificationDate() != null) {// Date date = info.getModificationDate().getTime();// f.setlModificationDate(date.getTime());// }// } catch (IOException e) {//// TODO Auto-generated catch block// e.printStackTrace();// }//设置标题// if (info.getTitle() != null) {// f.setlTitle(info.getTitle());// }}public void paserFileToReader(LingJoinFile f) throws Exception {f.setlContentReader(this.getContentReader(f)) ;}public void paserFileToString(LingJoinFile f) throws Exception {// TODO Auto-generated method stubf.setlContent(this.getContent(f)) ;}public PDFExtractor(Integer typeFlag) {// TODO Auto-generated constructor stubthis.typeFlag = typeFlag ;}private Integer typeFlag = null ;public Integer getTypeFlag() {// TODO Auto-generated method stubreturn typeFlag;}}。
JAVA文件读取和解析
JAVA⽂件读取和解析前⾯两种可以设置编码格式。
1.第⼀种:xml⽂件的读取和Sax解析InputSource inputSource = new InputSource(new FileInputStream(file));inputSource.setEncoding("UTF-8");List<Map<String, String>> list = reader.getList(file);public static List<Map<String, String>> getList(File file) throws Exception{InputSource inputSource = new InputSource(new FileInputStream(file));inputSource.setEncoding("UTF-8");SAXParserFactory sf = SAXParserFactory.newInstance();SAXParser sp = sf.newSAXParser();XML_LOG_READ_OUT reader = new XML_LOG_READ_OUT();sp.parse(inputSource, reader);return reader.getList();}2.第⼆种:TXT⽂件读取和解析InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8"); BufferedReader br= new BufferedReader(read);//BufferedReader读取⽂件String s = null;int i = 0;while((s = br.readLine()) != null){if(i > 0){Map<String, String> map = new HashMap<String, String>();String[] str = s.split("\t");//根据tab键划分}}i++;}br.close();}3,第三种txt⽂件读取BufferedReader br = new BufferedReader(new FileReader(file));//构造⼀个BufferedReader类来读取⽂件String s = null;int i = 0;while((s = br.readLine())!=null){//使⽤readLine⽅法,⼀次读⼀⾏if(i>0){String[] str = s.split("\t");String time = str[0].replace("/", "-");SimpleDateFormat sdfInput = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = sdfInput.parse(time);result.append(System.lineSeparator()+"时间是:"+sdfInput.format(date));}i++;}br.close();}。
java解析json格式数据
java解析json格式数据java返回json数据⽅式1、⾃⼰全部⼿动写这种⽅法是⽤servlet的内置对象response返回到前台。
注意,java⾥的引号要⽤的转义字符“\”)protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8");response.setContentType("application/json;charset=utf-8");PrintWriter out = response.getWriter();//或:ServletOutputStream out = response.getOutputStream();//但两个不要⼀起⽤!out.write("[{\"id\":1,\"name\":default}]");out.flush();out.close();}⽅式2、jackson解析,SpringMVC内置的解析器⽰例1protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding("utf-8");response.setContentType("application/json;charset=utf-8");PrintWriter out = response.getWriter();Object result = new Object();// jackson核⼼对象ObjectMapper objectMap = new ObjectMapper();objectMap.writeValue(out, result );}⽰例2public class JackSonTest {//解析@Testpublic void test1() throws Exception{// 对象嵌套数组嵌套对象String json1 = "{\"id\":1,\"name\":\"JAVAEE-1703\",\"stus\":[{\"id\":101,\"name\":\"刘⼀\",\"age\":16}]}";// 数组String json2 = "[\"北京\",\"天津\",\"杭州\"]";//1、ObjectMapper mapper=new ObjectMapper();Grade grade=mapper.readValue(json1, Grade.class);System.out.println(grade);//2、ArrayList<String> list=mapper.readValue(json2,new TypeReference<ArrayList<String>>() {});System.out.println(list);}//⽣成@Testpublic void test2() throws JsonProcessingException{ArrayList<Student> list=new ArrayList<>();for(int i=1;i<3;i++){list.add(new Student(101+i, "码⼦", 20+i));}Grade grade=new Grade(100001,"张三", list);ObjectMapper mapper=new ObjectMapper();//将对象转换为JSON格式字符串String json=mapper.writeValueAsString(grade);System.out.println(json);}}相关jar包jackson-core-2.2.3.jarjackson-annotations-2.2.3.jarjackson-databind-2.2.3.jar⽅式3、⽤Spring框架@ResponseBody的注解 @RequestMapping("/login") @ResponseBody public User login(User user){ return user; }User字段:userName pwd。
Java解析json数据
Java解析json数据1.依赖jar包import org.json.JSONArray;import org.json.JSONObject;2.代码实例(⼀)json字符串的格式是{k:v, k:v, k:[{k:v},{k:v},{k:v}]}{"totalpages":"1","currpage":"1","totalrecords":"31","griddata":[{"tagkey":"YK011011012","unitkey":"YK01101","timestamp":"2019/7/16 10:24:29","value":"22.9","tagstatus":"0","sysgroup":"安全监测监控系统","createtime":"2019/7/16 10:24:29","unitname":"南屯煤矿","groupkey":"YK01","sortnum":"1","tagname":"三采避难硐室外温度","description":"","tagtype":"温度","engunit":"℃","datatype":"1","minraw":"45","maxraw":"-5","loalarmlimit":"35","hialarmlimit":"0"},{"tagkey":"YK011011225","unitkey":"YK01101","timestamp":"2019/7/16 10:24:29","value":"28.2","tagstatus":"0","sysgroup":"安全监测监控系统","createtime":"2019/7/16 10:24:29","unitname":"南屯煤矿","groupkey":"YK01","sortnum":"1","tagname":"七采西部变电所温度","description":"","tagtype":"温度","engunit":"℃","datatype":"1","minraw":"45","maxraw":"-5","loalarmlimit":"34","hialarmlimit":"0"}]}代码解析:package yk.bigdata.dl.ias.fileParse;import org.json.JSONArray;import org.json.JSONObject;/*** @Author: cjj* @Date: Created in 10:43 2019/7/16* @Description: 解析json数据*/public class TagValueJsonFileParse {public static void main(String[] args) {JsonParse();}public static String JsonParse(){String jsonStr ="{'totalpages':'1','currpage':'1','totalrecords':'31','griddata':[{'tagkey':'YK011011012','unitkey':'YK01101',},{'tagkey':'YK011011225','unitkey':'YK01102',}]}";// 因为json字符串是⼤括号包围,所以⽤JSONObject解析JSONObject jsonObj = new JSONObject(jsonStr);// 获取数组JSONArray jsonArr = jsonObj.getJSONArray("griddata");// 遍历数组⾥⾯的jsonfor(int i=0;i<jsonArr.length();i++){JSONObject tagValue = jsonArr.getJSONObject(i);String tagkey = tagValue.getString("tagkey");String unitkey = tagValue.getString("unitkey");System.out.println(tagkey+" , "+ unitkey);}return null;}}3.代码实例(⼆)json字符串的格式是:[{k:v},{k:v},{k:v}][{"iconCls":"","children":[],"text":"断电状态"},{"iconCls":"","children":[],"text":"风门"},{"iconCls":"","children":[],"text":"风速"},{"iconCls":"","children":[],"text":"风筒开关"},{"iconCls":"","children":[],"text":"负压"},{"iconCls":"","children":[],"text":"激光甲烷"},{"iconCls":"","children":[],"text":"甲烷"},{"iconCls":"","children":[],"text":"局扇"},{"iconCls":"","children":[],"text":"馈电状态"},{"iconCls":"","children":[],"text":"温度"},{"iconCls":"","children":[],"text":"⼀氧化碳"},{"iconCls":"","children":[],"text":"主扇"}]代码解析:JSONObject jsonObject;JSONArray jsonArray = new JSONArray(jsonStr); // 直接解析成数组for(int i=0;i<jsonArray.length();i++){jsonObject = jsonArray.getJSONObject(i);String str = jsonObject.getString("text");System.out.println(str);}。
19.JAVA-从文件中解析json、并写入Json文件(详解)
19.JAVA-从⽂件中解析json、并写⼊Json⽂件(详解)1.json介绍json与xml相⽐, 对数据的描述性⽐XML较差,但是数据体积⼩,传递速度更快.json数据的书写格式是"名称:值对",⽐如:"Name" : "John" //name为名称,值对为"john"字符串值对类型共分为:数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 false)数组(在⽅括号[]中)对象(在花括号{}中)null当然数组也可以包含多对象:{"employees": [{ "Name":"John" , "Age":19 },{ "Name":"Anna" , "Age":22 },{ "Name":"Peter", "Age":23 }]}表⽰"employees"对象中有3个对象数组(每个对象数组表⽰⼀条员⼯信息),其中并列的数据都必须⽤逗号","隔开.2.json包使⽤在上公布了很多JAVA下的json解析⼯具(还有C/C++等等相关的),其中org.json和json-lib⽐较简单,两者使⽤上差不多,这⾥我们使⽤org.json,org.json下载地址为:3.json解析3.1解析步骤⾸先通过new JSONObject(String)来构造⼀个json对象,并将json字符串传递进来.然后通过getXXX(String key)⽅法去获取对应的值.3.2 example.json⽰例⽂件如下:{"FLAG": 1,"NAME": "example","ARRAYS":[{"Name": "array1","String": "哈哈哒1"},{"Name": "array2","String": "哈哈哒2"},{"Name": "array3","String": "哈哈哒3"},{"Name": "array4","String": "哈哈哒4"}]}3.3解析代码如下:@Testpublic void JsonParser() throws Exception{char cbuf[] = new char[10000];InputStreamReader input =new InputStreamReader(new FileInputStream(new File("src//example.json")),"UTF-8");int len =input.read(cbuf);String text =new String(cbuf,0,len);//1.构造⼀个json对象JSONObject obj = new JSONObject(text.substring(text.indexOf("{"))); //过滤读出的utf-8前三个标签字节,从{开始读取 //2.通过getXXX(String key)⽅法获取对应的值System.out.println("FLAG:"+obj.getString("FLAG"));System.out.println("NAME:"+obj.getString("NAME"));//获取数组JSONArray arr = obj.getJSONArray("ARRAYS");System.out.println("数组长度:"+arr.length());for(int i=0;i<arr.length();i++){JSONObject subObj = arr.getJSONObject(i);System.out.println("数组Name:"+subObj.getString("Name")+" String:"+subObj.getString("String"));}}打印如下:4.写json⽂件4.1写json步骤⾸先通过new JSONObject()来构造⼀个空的json对象如果要写单对象内容,则通过JSONObject .put(key,value)来写⼊如果要写多数组对象内容,则通过JSONObject .accumulate (key,value)来写⼊最后通过JSONObject .toString()把数据导⼊到⽂件中.4.2写⽰例如下:@Testpublic void JsonWrite() throws Exception{OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("exampleWrite.json"),"UTF-8");JSONObject obj=new JSONObject();//创建JSONObject对象obj.put("FLAG","1");for(Integer i=1;i<4;i++){JSONObject subObj=new JSONObject();//创建对象数组⾥的⼦对象subObj.put("Name","array"+i);subObj.put("String","⼩⽩"+i);obj.accumulate("ARRAYS",subObj);}System.out.println(obj.toString());osw.write(obj.toString());osw.flush();//清空缓冲区,强制输出数据osw.close();//关闭输出流}打印如下:。
Java解析JSON格式数据
Java解析JSON格式数据转Java解析JSON格式的数据主要⽤到两个类JSONObject和JSONArray,这两个类在json-lib-2.4-jdk15包中,在使⽤JSONObject时除了需要这个包外还需要相关的依赖包不导⼊这些包在运⾏时就会报错。
1.不包含数组的json数据,Java类的字段中也没有List。
现在有⼀个User类如下:有两个字段id和name,json格式字符串如下:String objectStr="{\"name\":\"JAVA\",\"id\":\"1\"}";将该字符串解析成对应的User类,代码如下所⽰:import net.sf.json.JSONObject;public class Demo {public static void main(String[] args) {String objectStr="{\"name\":\"JAVA\",\"id\":\"1\"}";JSONObject jsonObject = JSONObject.fromObject(objectStr);User user = (User) JSONObject.toBean(jsonObject, User.class);System.out.println(user.getId());System.out.println(user.getName());}}运⾏结果:2.json数据为数组格式import java.util.List;import java.util.ArrayList;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class Demo {public static void main(String[] args) {String arrayStr="[{\"name\":\"JAVA\",\"id\":\"1\"}, {\"name\":\"C#\",\"id\":\"2\"}]";JSONArray jsonArray = JSONArray.fromObject(arrayStr);List<User> list = new ArrayList<>();for(int i = 0;i<jsonArray.size();i++) {JSONObject jsonObject = JSONObject.fromObject(jsonArray.get(i).toString());User user = (User) JSONObject.toBean(jsonObject, User.class);list.add(user);}for (User user : list) {System.out.println("userID:" + user.getId() + " userName:" + user.getName());}}}3.接送数据中包含数组这种情况直接解析会找不到对应的List类型,需要加⼀个classmap来确定类型,代码如下:import java.util.List;import java.util.Map;import java.util.ArrayList;import java.util.HashMap;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class Demo {public static void main(String[] args) {String ObjectStr="{\"name\":\"JAVA\",\"id\":\"1\",\"goodsList\":[{\"name\":\"JAVA\",\"id\":\"1\"}, {\"name\":\"C#\",\"id\":\"2\"}]}"; JSONObject jsonObject = JSONObject.fromObject(ObjectStr);Map classmap = new HashMap<>();classmap.put("goodsList", Goods.class);User user = (User) JSONObject.toBean(jsonObject, User.class, classmap);System.out.println(user.getId());List<Goods> list = user.getGoodsList();for (Goods goods : list) {System.out.println("userID:" + goods.getId() + " userName:" + goods.getName());}}}。
Java解析JSON文件
List<类型> list=JSON.parseArray(JSON字符串,类型.class);
解析方式Gson来自lib中引入jar包即可使用
对象转字符串 String json = new Gson().toJSON(要转换的对象);
字符串转对象 类型 对象名 = new Gson().fromJson(JSON字符串, 类型.class);
FastJson
同样需要引入jar包
对象转字符串
String json=JSON.toJSONString(要转换的对象); 字符串转对象
登录后才能查看或发表评论立即登录或者逛逛博客园首页
JSON格 式 介 绍
Java解析 JSON文件
JavaScript Object Notation的缩写,为JavaScript的对象格式,只允许使用UTF-8编码
支持的几种数据类型:
键值对:{"key": value} 注意key必须用双引号 数值 数组 字符串 布尔 空值 null
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//System.out.println("fsnHeadLengh="+fsnHeadLengh);
//如果fsn文件的长度合一致
if(counter * size +fsnHeadLengh== fsnbytes.length) {
imgbytes=null;//及时释放图片字节数组对象,释放内}else{
//map.put("ImageSno", null); body.setImageBytes(null);
}
noException=true;
if(noException){//当没有异常时记录解析数据
list.add(body);
body.setDateStr(DateBuf.toString());
body.setTimeStr( TimeBuf.toString());
body.setDateStr(DateBuf.toString());
body.setTimeStr( TimeBuf.toString());
body.setDateTime( body.getDateStr() +" "+ body.getTimeStr());
ArrayList<FsnBody> list =newArrayList<FsnBody>();
longValutaSum=0;
for(inti = 0; i < counter; i++) {
FsnBody body =newFsnBody();
booleannoException=false;//处理过程中没有异常
String TimeStr=hh + ":" + mm+ ":" +ss;
body.setDateStr(DateStr); body.setTimeStr( TimeStr);
//*/
//*
StringBuffer DateBuf=newStringBuffer();
StringBuffer TimeBuf=newStringBuffer();
StringDateStr=StrUtil.numAddZero(String.valueOf((y+1980)),4)+
"-" + StrUtil.numAddZero(String.valueOf(m),2) + "-"+
StrUtil.numAddZero(String.valueOf(d),2);
//设置日期时间
intdata =parseInt(fsnBytes);
inttime = parseInt(fsnBytes);
//System.out.println("data="+data);
//System.out.println("time="+time);
/*if(time<0){
time=-time; }*/
DateBuf.append( y + 1980); DateBuf.append("-");
DateBuf.append( FsnTools.numAddZero(m,2));
DateBuf.append("-");
DateBuf.append( FsnTools.numAddZero(d,2) );
对象,不能将此数据放入map,一是数据量大时内存溢出,二是效率大打折
byte[] imgbytes=FsnTools.byteCopy(fsnbytes, thisPosSart+fsnPerBodyNoImg, size-fsnPerBodyNoImg);
body.setImageBytes(imgbytes);//图片字节数组数据
byte[] fsnbytes =FsnTools.toByteArray(this.fsnFilePath);
this.fm.setSize(fsnbytes.length);
System.out.println("File Lengh: "+fsnbytes.length);
//读取头文件
setHead(fsnbytes);
if (code < 13 && code > 0) {
errorCode += code +",";
}
}
if ("1".equals(map.get("TfFlag")))
errorCode =errorCode.substring(0,
stIndexOf(","));
else
publicfinalstaticintfsnPerBodyImg=1644;//fsn文件体每条记录,包括
图像信息的字节长度
publicintfilePos=0;//fsn文件字节流当前指针位置
publicFsnModelfm;//本实例解析的FsnMedel对象
publicStringfsnFilePath;//FSN文件的存储完整路径,包括文件名
packageaction;
importjava.util.ArrayList;
importtools.FsnTools;
importbean.FsnBody;
importbean.FsnModel;
publicclassFsnReaderAction {
publicfinalstaticintintstep=2;//Uint16字节长度
fsnPerBodyNoImg;
//System.out.println("this.fm.getHeadString()[2]
="+this.fm.getHeadString()[2] );
//System.out.println("counter="+counter);
//System.out.println("size="+size);
body.setRecordNum(i+1);//此条fsn记录在fsn文件中的顺序
ValutaSum +=body.getValuta();
if(size!=fsnPerBodyNoImg){
testSnoImg(fsnbytes);//校验图片数据合法性,如果不合
法,将抛出异
//map.put("ImageSno",imageSno);//图片BufferedImage
//每条fsn信息均从i * size + 32(头的长度)处起始intthisPosSart=i * size +fsnHeadLengh;
//此处处理非常重要,在读取图片文件前一定要做处理因为图片字节流长度固定,644位,getSnoExpImg方法只读到图片信息中有数据部分对应的字节流,后
面的都是空值,将不再读取
}else{
if(this.fm.isPermitException()){//当有异常时,如果
fsn配置文件允许记录异常,则记录,否则不记录
list.add(body); }
} }
this.fm.setBodys(list);
}
}catch(Exception e){
this.fm.setAnalysisExcepted(true);
位图像meta
longmutiall = 4 * width * num;
if(mutiall >fsnPerBodyImg- 108){
thrownewException("图像数据读取失败,图像长度大于图像缓冲器长度");
}
//int i = 0;
//while ( i < width * num) {
if(num<=0||height<=0||width<=0){
thrownewException("图片数据读取失败,长宽和字符数均不能小于等于0");
}
//冠字号码个数不能多于12 if(num>12){
thrownewException("图片数据读取失败,冠字号码个数不能多"); }
//图片大小不能多于图片缓冲区的总大小,减去108位,包括100位其他字段和8
//冠字号码的个数
intnum = parseInt(fsnBytes);
//每个冠字号码的图像宽
intheight = parseInt(fsnBytes);
intwidth = parseInt(fsnBytes);
intReserve2 = parseInt(fsnBytes);
//图片三维不能小于0
//某条图片数据读完以后,filePos不一定会移至这个图片数据对应的结尾位置,要在读取下一条数据时,强制将filePos指向下一条图片信息对应字节流起
始位置
if(filePos<thisPosSart){
filePos=thisPosSart;
}
body = getSnoExpImg(fsnbytes);
longcounter =this.fm.getCounter();//冠字号信息条数//