- 浏览: 67866 次
- 来自: ...
文章分类
最新评论
-
jyjava:
大哥你代码调试过吗
`itext 隐藏pdf工具栏 菜单栏 -
88567free:
3Q,需要这个
eclipse 相同变量的高亮 及颜色 -
whg333:
我也是不知道怎么的就弄没了,呵呵,谢了~
eclipse 相同变量的高亮 及颜色 -
尤迪安:
Thank you!
eclipse 相同变量的高亮 及颜色
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Result; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.sax.SAXTransformerFactory; import javax.xml.transform.sax.TransformerHandler; import javax.xml.transform.stream.StreamResult; import org.xml.sax.SAXException; import org.xml.sax.helpers.AttributesImpl; import com.sbdcpn.upload.FtpClient; import com.sbdcpn.utils.Log; import com.sbdcpn.xmlparse.pagecfg.PageCfgXMLUtil; public class BigDataWriteXmlBo { private final int records = 1000; /** * 将数据保存到xml上 * @throws ParserConfigurationException * @throws IOException * @throws TransformerException * @throws SAXException * @throws InterruptedException */ @SuppressWarnings({ "unchecked", "rawtypes" }) public void generateXML() throws IOException, TransformerException, SAXException, InterruptedException{ SAXTransformerFactory fac = (SAXTransformerFactory) SAXTransformerFactory.newInstance(); TransformerHandler handler = fac.newTransformerHandler(); Transformer transformer = handler.getTransformer(); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");// // 设置输出采用的编码方式 transformer.setOutputProperty(OutputKeys.INDENT, "yes");// 是否自动添加额外的空白 transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");// 是否忽略xml声明 //文件名 :前七位SWPM001为电文号+14位日期(年月日时分秒) StringBuffer fileName = new StringBuffer("SWPM001_"); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); fileName.append(sdf.format(new Date())).append(".xml"); FileOutputStream fos = new FileOutputStream(fileName.toString()); Result resultxml = new StreamResult(fos); handler.setResult(resultxml); //Message标签的属性 AttributesImpl msgAtt = new AttributesImpl(); msgAtt.addAttribute("", "", "MsgID", "", "SWPM001"); msgAtt.addAttribute("", "", "ResourceID", "", "SW"); handler.startDocument(); handler.startElement("", "", "Message", msgAtt); //空属性 AttributesImpl fieldAtt = new AttributesImpl(); //取得总记录数,进行分页处理 long count = queryAllRows(); long page = count / records; if (count % records != 0) { page = page + 1; } String four = "\n "; String eight = "\n "; //开始行号,结束行号 long start = 1, end = records; //根据页数进行循环 for (long j = 1; j <= page; j++) { // 分页取得目录数据 List<Map> data = this.queryStockInventory(start, end); //按行循环一页中的数据 for (int i = 0; i < data.size(); i++) { handler.characters(four.toCharArray(), 0, four.length());//行缩进 Map<String, String> rec = data.get(i); //行结点属性 AttributesImpl dataRowAtt = new AttributesImpl(); dataRowAtt.addAttribute("", "", "id", "", String.valueOf(start - 1 + i)); // 行结点 handler.startElement("", "", "DataRow", dataRowAtt); rec.remove("row_num"); Iterator it = rec.entrySet().iterator(); //按列循环生成数据结点 while (it.hasNext()) { handler.characters(eight.toCharArray(), 0, eight.length());// 列缩进 Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next(); String key = entry.getKey(); String value = entry.getValue(); // 用字段名作为标签名,对应的数据作为内容 handler.startElement("", "", key, fieldAtt); handler.characters(value.toCharArray(), 0, value.length()); handler.endElement("", "", key); } handler.characters(four.toCharArray(), 0, four.length());//行缩进 handler.endElement("", "", "DataRow"); } start = end + 1; end = end + records; handler.endDocument();// 文档结束,同步到磁盘 handler.startDocument(); } handler.endElement("", "", "Message"); handler.endDocument(); fos.close();//不关闭的话,后面删除不了文件 uploadFile(fileName.toString());// 上传文件至ftp } /** * 把生成出来的文件,上传到ftp;上传失败后,1分钟后再次尝试上传,连续三次不成功便停止 * @param fileName 文件名 * @param filePath 路径 * @throws InterruptedException */ private void uploadFile(String fileName) throws InterruptedException { String[] path = PageCfgXMLUtil.getInstance().getPageConstByKey("stockFtpXmlPath").split(" "); int reSend = 1; //上传失败时,1分钟后再次尝试 while (reSend <= 3) { FtpClient ftp = new FtpClient(); ftp.Connect(path[0], Integer.parseInt(path[1]));// ip与端口 ftp.Login(path[3], path[4]);// 用户名与密码 ftp.SetCurDir(path[2]);// 目录 boolean isUpload = ftp.PutFile(fileName, fileName); ftp.DisConnect(); if (isUpload) { _log.showLog(fileName + "成功上传到FTP服务器上!"); break; } else { _log.showLog(fileName + "尝试" + reSend + "次后,上传到FTP服务器失败!"); reSend++; Thread.sleep(60000); } } File file = new File(fileName); String flag = file.delete() ? "成功!" : "失败!"; _log.showLog("删除临时文件:" + fileName + flag); } /** * 分页查询,示例查询,假设数据有十万条 * @return */ @SuppressWarnings("rawtypes") private List queryStockInventory(long start, long end) { StringBuffer insertInto = new StringBuffer(); insertInto.append(" SELECT") .append(" tmp_stock_inv.*") .append(" FROM(") .append(" SELECT *,") .append("rownum row_num") .append(" FROM table") .append(" WHERE rownum <=").append(end) .append(") tmp_stock_inv") .append(" WHERE") .append(" tmp_stock_inv.row_num >=").append(start); _log.showLog("查询:" + insertInto.toString()); return _dao.query(insertInto.toString()); } /** * 取得总记录数 * @return */ @SuppressWarnings("unchecked") private int queryAllRows() { StringBuffer insertInto = new StringBuffer(); insertInto.append("SELECT count(*) rows_count FROM stock_inventory WHERE stock_qty > 0"); _log.showLog("查询总记录数:" + insertInto.toString()); Map<String,String> rs = (Map<String,String>)_dao.queryOneRow(insertInto.toString()); return Integer.parseInt(rs.get("rows_count")); } }
发表评论
-
SAX解析xml
2011-03-13 18:13 592import java.io.FileInputStream; ... -
dom4j解析xml
2011-02-26 16:15 991import java.io.StringReader; ... -
FTP客户端
2011-02-19 11:02 1700import java.io.DataInputStre ... -
java dom方法生成xml,少量数据时,可以使用
2011-02-17 15:34 1345import java.io.FileOutputStr ... -
BigDecimal
2010-12-07 20:14 2506BigDecimal的应用: package com.p ... -
`itext 隐藏pdf工具栏 菜单栏
2010-07-07 23:10 2923package example.iText; impor ... -
图片缩放
2008-06-10 12:00 732private BufferedImage reSizeIma ... -
jar扩展包位置
2009-02-05 17:10 967当你需要外部包时,把它放在jdk\jre\ext文件夹中就行了 ... -
javamail 发送邮件 乱码处理
2009-03-19 10:45 983import java.io.UnsupportedEnc ... -
读取资源文件
2009-03-20 12:35 679import java.io.IOException; im ... -
反射无参方法
2009-08-05 16:00 765import java.io.File; import ja ... -
BASE64Encoder
2009-08-06 09:39 2007package com.avetti.util; /** ... -
java 知识点
2009-08-18 09:25 762Ljava.lang.String 表示一个 ... -
将对象保存到文件
2009-09-01 10:39 986从文件读取对象 /** * get file p ... -
将数据导出到excel与日期格式的设置
2009-09-01 11:54 2011//将数据导出到excel private HSSFWork ... -
下载文件
2009-09-01 13:05 936//从站点上下载文件 public File downloa ... -
日期计算与格式化
2009-09-01 13:12 794import java.util.Calendar; imp ... -
在JList或者JTable的中加入checkbox
2009-12-30 22:56 1272public class RadioButtonPan ... -
Java 位运算符
2009-12-31 11:13 810Java定义的位运算(bitwiseoperators)直 ... -
将文件夹中的文件压缩到zip
2010-02-05 11:00 1202import java.util.zip.ZipEntry; ...
相关推荐
在Java编程中,日期处理和数据操作是两个非常重要的领域,尤其当涉及到数据持久化时,如生成XML文件。XML是一种广泛使用的结构化数据交换格式,适用于存储和传输数据。以下是一些关于“java日期和查询数据库生成XML...
1. 使用DOM解析大型XML文件可能导致内存溢出,此时应考虑使用SAX或StAX。 2. 如果XML结构固定且复杂,使用XSD文件生成Java类可以减少手动编码的工作量,也有助于保持代码与XML结构的一致性。 3. 在处理XML文件时,...
- Java注解(Annotations):在JAXB中,注解用于标记Java类和字段,以便于自动生成XML绑定代码。 - Streaming:对于大型XML文件,理解如何使用StAX进行高效处理,避免内存溢出。 通过分析和实践这些源代码,你可以...
Java解析XML是Java开发中常见的任务,特别是在处理结构化数据时。XML(eXtensible Markup Language)是一种标记语言,广泛用于存储和传输数据。它具有自解释性、可读性强的特点,使得数据交换和存储变得更为灵活。...
在Java开发过程中,XML(可扩展标记语言)是一种非常重要的数据交换格式,它不仅用于配置文件,也广泛应用于Web服务的数据交互中。因此,掌握如何使用Java解析XML是非常必要的技能。本文将详细介绍Java中四种常用的...
DOM 解析器的优点是它可以随机访问 XML 文件的任何部分,但是它需要将整个 XML 文件加载到内存中,可能会导致内存溢出。 * Pull 解析器是一种基于拉取的解析器,它可以将 XML 文件解析为一系列事件,然后使用回调...
在Java编程中,生成XML文件是一项常见的任务,用于数据存储、配置传递或者数据交换等场景。本篇文章将详细讲解如何使用Java来生成XML文件,并基于提供的部分代码进行解析。 首先,XML(eXtensible Markup Language...
- 性能优化:在处理大量数据时,考虑使用SAX或StAX等事件驱动的解析器,它们按需处理XML,减少了内存消耗。 JDOM.jar是Java开发中处理XML文档的一个强大工具,其简洁的API和内存中操作的特性使其在许多场景下成为...
在Java中,通过FreeMarker API,可以将XML数据动态地渲染到Word模板中,实现模板化的文档生成。 4. **模板设计**: 在Word中,可以预先设计好模板,包含固定的格式、样式和占位符。这些占位符将在运行时被Java程序...
在处理大量数据时,使用 POI 的默认用户模式(UserModel)读取 Excel 文件可能会导致内存溢出问题,因为该模式会将整个文件加载到内存中。本文将详细介绍如何解决由 POI 用户模式引发的内存溢出问题,并提供相应的...
此外,还可以引入第三方库如JAXB(Java Architecture for XML Binding)进行对象与XML的映射,简化解析和生成XML的过程。 总之,XMLDemo是Java环境下解析XML的实例,它展示了DOM或SAX解析方法,可以方便地部署到...
对于小型XML文件,DOM解析是可行的,但当处理大型文件时,由于内存消耗大和加载时间长,可能会导致性能问题甚至内存溢出。 2. SAX(Simple API for XML Parsing):SAX是一种事件驱动的解析器,它不会将整个XML文档...
- 为了防止内存溢出,SAX解析器不会一次性加载整个XML文件,而是按需处理。 - 在处理大型XML文件时,SAX解析是更优的选择,但它的缺点是需要编写更多的代码来处理事件。 - 在解析过程中,需要注意异常处理,如文件不...
- 适用于大文件:对于非常大的XML文件,SAX解析能有效避免内存溢出问题。 3. SAX解析的缺点: - 编程复杂:需要处理大量事件回调,且无法直接访问父元素或兄弟元素。 - 不支持随机访问:只能按照文档顺序处理,...
在实际应用中,TransformerHandler可以用于各种场景,比如动态生成XML报告、数据转换、XML格式化等。由于TransformerHandler是基于事件的,因此它非常适合处理流式数据,可以在处理大型XML文件时避免内存溢出的问题...
1. **内存管理**:大文件可能导致内存溢出,因此需要谨慎处理XML解析,可以使用流式解析器如SAX(Simple API for XML)而不是DOM(Document Object Model),因为DOM会将整个XML文档加载到内存中。 2. **性能优化**...
在处理大文件时,XML解析成为了一个关键的技术挑战,因为传统的DOM(Document Object Model)解析方式会一次性加载整个文件到内存,对于大文件可能会导致性能问题甚至内存溢出。 这篇博客文章"XML 大文件 解析"可能...
整个XML文档必须加载到内存,对于非常大的XML文件,这可能导致性能下降甚至内存溢出。此外,解析和构建DOM树的过程也相对较慢。 7. **相关技术**:除了DOM,还有其他XML解析方法,如SAX(Simple API for XML)和...
DOM4J和JDOM是两种流行的Java XML处理库,它们都是用于解析、操作和生成XML文档的工具。在Java世界中,XML作为一种数据交换格式,广泛应用于配置文件、数据传输和文档存储等领域。理解DOM4J和JDOM的特性和用途对于...