代码
Dom4J解析XML
1 //一.Document对象相关
2 //1.读取XML文件,获得document对象.
3 SAXReader reader = new SAXReader();
4 Document document = reader.read(new File("input.xml"));
5 //2.解析XML形式的文本,得到document对象.
6 String text = "<members></members>";
7 Document document = DocumentHelper.parseText(text);
8 //3.主动创建document对象.
9 Document document = DocumentHelper.createDocument();
10 Element root = document.addElement("members");// 创建根节点
11 //二.节点相关
12 //1.获取文档的根节点.
13 Element rootElm = document.getRootElement();
14 //2.取得某节点的单个子节点.
15 Element memberElm=root.element("member");// "member"是节点名
16 //3.取得节点的文字
17 String text=memberElm.getText();
18 //也可以用:
19 String text=root.elementText("name");这个是取得根节点下的name字节点的文字.
20 //4.取得某节点下名为"member"的所有字节点并进行遍历.
21 List nodes = rootElm.elements("member");
22 for (Iterator it = nodes.iterator(); it.hasNext();) {
23 Element elm = (Element) it.next();
24 // do something
25 }
26 //5.对某节点下的所有子节点进行遍历.
27 for(Iterator it=root.elementIterator();it.hasNext();){
28 Element element = (Element) it.next();
29 // do something
30 }
31 //6.在某节点下添加子节点.
32 Element ageElm = newMemberElm.addElement("age");
33 //7.设置节点文字.
34 ageElm.setText("29");
35 //8.删除某节点.
36 parentElm.remove(childElm);// childElm是待删除的节点,parentElm是其父节点
37 //三.属性相关.
38 //1.取得某节点下的某属性
39 Element root=document.getRootElement();
40 Attribute attribute=root.attribute("size");// 属性名name
41 //2.取得属性的文字
42 String text=attribute.getText();
43 //也可以用:
44 String text2=root.element("name").attributeValue("firstname");这个是取得根节点下name字节点的属性firstname的值.
45 //3.遍历某节点的所有属性
46 Element root=document.getRootElement();
47 for(Iterator it=root.attributeIterator();it.hasNext();){
48 Attribute attribute = (Attribute) it.next();
49 String text=attribute.getText();
50 System.out.println(text);
51 }
52 //4.设置某节点的属性和文字.
53 newMemberElm.addAttribute("name", "sitinspring");
54 //5.设置属性的文字
55 Attribute attribute=root.attribute("name");
56 attribute.setText("sitinspring");
57 //6.删除某属性
58 Attribute attribute=root.attribute("size");// 属性名name
59 root.remove(attribute);
60 //四.将文档写入XML文件.
61 //1.文档中全为英文,不设置编码,直接写入的形式.
62 XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
63 writer.write(document);
64 writer.close();
65 //2.文档中含有中文,设置编码格式写入的形式.
66 OutputFormat format = OutputFormat.createPrettyPrint();
67 format.setEncoding("GBK"); // 指定XML编码
68 XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
69 writer.write(document);
70 writer.close();
71 //五.字符串与XML的转换
72 //1.将字符串转化为XML
73 String text = "<members> <member>sitinspring</member> </members>";
74 Document document = DocumentHelper.parseText(text);
75 //2.将文档或节点的XML转化为字符串.
76 SAXReader reader = new SAXReader();
77 Document document = reader.read(new File("input.xml"));
78 Element root=document.getRootElement();
79 String docXmlText=document.asXML();
80 String rootXmlText=root.asXML();
81 Element memberElm=root.element("member");
82 String memberXmlText=memberElm.asXML();
83 //六.使用XPath快速找到节点.
84 //读取的XML文档示例
85 //<?xml version="1.0" encoding="UTF-8"?>
86 //<projectDescription>
87 //<name>MemberManagement</name>
88 //<comment></comment>
89 //<projects>
90 //<project>PRJ1</project>
91 //<project>PRJ2</project>
92 //<project>PRJ3</project>
93 //<project>PRJ4</project>
94 //</projects>
95 //<buildSpec>
96 //<buildCommand>
97 //<name>org.eclipse.jdt.core.javabuilder</name>
98 //<arguments>
99 //</arguments>
100 //</buildCommand>
101 //</buildSpec>
102 //<natures>
103 //<nature>org.eclipse.jdt.core.javanature</nature>
104 //</natures>
105 //</projectDescription>
106 //使用XPath快速找到节点project.
107 public static void main(String[] args){
108 SAXReader reader = new SAXReader();
109 try{
110 Document doc = reader.read(new File("sample.xml"));
111 List projects = doc.selectNodes("/projectDescription/projects/project");
112 Iterator it=projects.iterator();
113 while(it.hasNext()){
114 Element elm=(Element)it.next();
115 System.out.println(elm.getText());
116 }
117 }
118 catch(Exception ex){
119 ex.printStackTrace();
120 }
121 }
122
生成验证码
解析properties
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Properties;
public class TestMain {
//根据key读取value
public static String readValue(String filePath,String key) {
Properties props = new Properties();
try {
InputStream in = new BufferedInputStream (new FileInputStream(filePath));
props.load(in);
String value = props.getProperty (key);
System.out.println(key+value);
return value;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
//读取properties的全部信息
public static void readProperties(String filePath) {
Properties props = new Properties();
try {
InputStream in = new BufferedInputStream (new FileInputStream(filePath));
props.load(in);
Enumeration en = props.propertyNames();
while (en.hasMoreElements()) {
String key = (String) en.nextElement();
String Property = props.getProperty (key);
System.out.println(key+Property);
}
} catch (Exception e) {
e.printStackTrace();
}
}
//写入properties信息
public static void writeProperties(String filePath,String parameterName,String parameterValue) {
Properties prop = new Properties();
try {
InputStream fis = new FileInputStream(filePath);
//从输入流中读取属性列表(键和元素对)
prop.load(fis);
//调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。
//强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
OutputStream fos = new FileOutputStream(filePath);
prop.setProperty(parameterName, parameterValue);
//以适合使用 load 方法加载到 Properties 表中的格式,
//将此 Properties 表中的属性列表(键和元素对)写入输出流
prop.store(fos, "Update '" + parameterName + "' value");
} catch (IOException e) {
System.err.println("Visit "+filePath+" for updating "+parameterName+" value error");
}
}
public static void main(String[] args) {
readValue("info.properties","url");
writeProperties("info.properties","age","21");
readProperties("info.properties" );
System.out.println("OK");
}
}
package com.banding.web.servlet;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ImageServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置Content-type响应头
resp.setContentType("image/jpeg");
//设置http头,不允许客户端缓存验证码图片(单个是指针对某一个浏览器生效)
resp.setHeader("pragma", "No-cache");
resp.setHeader("Cache-Control", "No-cache");
resp.setDateHeader("Expires", 0);
//向客户端输出二进制数据
OutputStream out = resp.getOutputStream();
//以下代码用来生成验证码图片
int width = 56;
int height = 17;
BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
Graphics g = image.getGraphics();
g.fillRect(0, 0, width, height);
g.setFont(new Font("Times New Roman",Font.ITALIC,18));
String checkCode= "";
Random random = new Random();
for(int i = 0; i < 4; i++){
String rand = String.valueOf(random.nextInt(10));
checkCode += rand;
//随即设置数字颜色,增加识别验证码的难度,防止识别软件盗用使用
g.setColor(new Color(20+random.nextInt(110),
20+random.nextInt(110),
20+random.nextInt(110)));
g.drawString(rand, i * 10 + 8, 16);
}
g.dispose(); //生成图片完毕
//将产生的验证码存Session中
req.getSession().setAttribute("checkCode",checkCode);
ImageIO.write(image,"JPEG",out);
}
}