1. 屏幕截图
public static void main(String[] args)throws Exception { String filename = "d:\\Temp\\screen.png"; // 获取屏幕尺寸 Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize(); Rectangle rectangle = new Rectangle(dimension); // 创建图像 BufferedImage image = new Robot().createScreenCapture(rectangle); // 保存到磁盘 // @see ImageIO#getWriterFormatNames(); ImageIO.write(image, "png", new File(filename)); }
2. 缩放图像
package org.demo.common; import java.awt.Container; import java.awt.Graphics2D; import java.awt.Image; import java.awt.MediaTracker; import java.awt.RenderingHints; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGEncodeParam; import com.sun.image.codec.jpeg.JPEGImageEncoder; /** * 创建缩略图 * @author * @date 2010-6-19 * @file org.demo.common.ImageThumbnail.java */ public class ImageThumbnail { /** * @param args */ public static void main(String[] args)throws Exception { String inFilename = "d:\\Temp\\demo1.png"; String outFilename = "d:\\Temp\\demo2.png"; createThumbnail(inFilename, outFilename, 800, 600, 0.75f); } /** * 创建缩略图 * @param inFilename * @param outFilename * @param thumbWidth * @param thumbHeight * @param quality * [0.0,1.0] * @return */ public static void createThumbnail( String inFilename,String outFilename, int thumbWidth,int thumbHeight,float quality) throws IOException,InterruptedException{ // 加载图像 Image image = Toolkit.getDefaultToolkit().getImage(inFilename); // 创建图像追踪器 MediaTracker mediaTracker = new MediaTracker(new Container()); mediaTracker.addImage(image, 0); /** !必须等图像完全加载到内存之后才能执行后续操作! */ mediaTracker.waitForID(0); System.out.println("isErrorAny=" + mediaTracker.isErrorAny()); // 计算等比例缩放的实际 宽高值 double thumbRatio = thumbWidth/thumbHeight; int imageWidth = image.getWidth(null); int imageHeight = image.getHeight(null); double imageRatio = (double)imageWidth/imageHeight; if (thumbRatio < imageRatio){ // --> height thumbHeight = (int)(thumbWidth/imageRatio); } else { // --> width thumbWidth = (int)(thumbHeight * imageRatio); } // 创建内存缩略图 BufferedImage bufferedImage = new BufferedImage(thumbWidth, thumbHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = bufferedImage.createGraphics(); g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2d.drawImage(image, 0, 0, thumbWidth, thumbHeight, null); // 将内存缩略图 写入 文件 BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(outFilename)); JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bufferedImage); param.setQuality(quality,false); encoder.setJPEGEncodeParam(param); encoder.encode(bufferedImage); out.close(); } }
3. 设置 http 代理
package org.demo.common; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 设置 http 代理 * @author * @date 2010-6-19 * @file org.demo.common.HttpProxy.java */ public class HttpProxy { public static void main(String[] args)throws Exception { // 设置 http 代理 setHttpProxy("206.224.254.10", "80", "", ""); // 访问一个网页 URL url = new URL("http://www.7daili.com/"); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream(); InputStreamReader reader = new InputStreamReader(in,"utf-8"); BufferedReader bf = new BufferedReader(reader); StringBuilder sb = new StringBuilder(1024); String line = null; while((line = bf.readLine()) != null){ sb.append(line).append('\n'); } bf.close(); // 取出当前的客户端ip ip格式:[您的IP:12.34.56.78(地理位置)] String regex = "(您的IP\\:.*\\))\\s"; Pattern pattern = Pattern.compile(regex,Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(sb); if (matcher.find()){ System.out.println("--> " + matcher.group(1)); } else { System.out.println("--> " + "未找到ip"); } } /** * 设置 http 代理 * @param host * @param port * @param user * @param pass */ public static void setHttpProxy(String host,String port, String user,String pass){ System.getProperties().setProperty("http.proxyHost", host); System.getProperties().setProperty("http.proxyPort", port); System.getProperties().setProperty("http.proxyUser", user); System.getProperties().setProperty("http.proxyPassword", pass); } }
4. 解析 XML 文件
package org.demo.common; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * 解析 XML 文件 * @author * @date 2010-6-21 * @file org.demo.common.XmlTools.java */ public class XmlTools { /** * @param args */ public static void main(String[] args)throws Exception { byte[] bytes = getXml().getBytes(); ByteArrayInputStream in = new ByteArrayInputStream(bytes); // -- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document document = db.parse(in); Element root = document.getDocumentElement(); // -- 获得所有的 student 元素 List<Element> students = getChildren(root, "student"); for(int i=0; i < students.size(); i++){ Element student = students.get(i); String id = student.getAttribute("id"); // -- 获得 student 元素的所有子元素 NodeList nodeList = student.getChildNodes(); System.out.print("[id:" + id ); for(int j=0; j < nodeList.getLength(); j++){ Node node = nodeList.item(j); if(node.getNodeType() == Node.ELEMENT_NODE){ System.out.print("," + node.getNodeName() + ":" + node.getTextContent()); } } System.out.println("]"); } in.close(); } /** * 获取子元素 * @param parent * @param name * @return */ public static List<Element> getChildren(Element parent,String name){ List<Element> list = new ArrayList<Element>(); Node node = parent.getFirstChild(); while(node != null){ if(node instanceof Element){ if(name.equals(((Element)node).getTagName())){ list.add((Element)node); } } node = node.getNextSibling(); } return list; } /** * 创建一个 XML 格式的 String * @return */ public static String getXml(){ // -- StringBuilder sb = new StringBuilder(); sb.append("<?xml version='1.0' encoding='utf-8'?>"); sb.append("<root>"); sb.append(" <student id='01'>"); sb.append(" <name>Zhangs</name>"); sb.append(" <grade>A</grade>"); sb.append(" <age>20</age>"); sb.append(" </student>"); sb.append(" <student id='02'>"); sb.append(" <name>Lis</name>"); sb.append(" <grade>B</grade>"); sb.append(" <age>18</age>"); sb.append(" </student>"); sb.append("</root>"); return sb.toString(); } }
5. 创建 zip 文件
package org.demo.common; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashSet; import java.util.Set; import java.util.zip.CRC32; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * 创建 zip 文档 * @author * @date 2010-6-20 * @file org.demo.common.ZipTools.java */ public class ZipTools { public static void main(String[] args)throws Exception { // -- String base = "D:/workspace/eclipse_wk/myProject/src/src-java/org/"; String[] files = {"demo"}; createZipFile(base, "tmp.zip", files); } /** * 创建一个压缩文件 * @param base * The root path end with '/' * @param zipName * @param files * The files in base directory. * @return 该压缩文件的绝对路径 */ public static String createZipFile(String base,String zipName,String[] files){ zipName = base + zipName; ZipOutputStream zipout = null; try{ zipout = new ZipOutputStream(new FileOutputStream(zipName)); // 去除重复的 file Set<String> set = new HashSet<String>(); for(String fname : files){ set.add(fname); } for(String fname : set){ zip(zipout,new File(base + fname),""); } } catch(Exception e){ e.printStackTrace(); } finally{ try{ if(zipout != null){ zipout.flush(); zipout.close(); } }catch(Exception e){ e.printStackTrace(); } } return zipName; } /** * 将文件 file 写入到 zip 输出流中 * @param out * @param file * @param base */ private static void zip(ZipOutputStream out,File file,String base) throws IOException{ if (base == null){ base = ""; } base += file.getName(); if(file.isDirectory()){ base += '/'; ZipEntry entry = new ZipEntry(base); // 创建一个目录条目 [以 / 结尾] out.putNextEntry(entry); // 向输出流中写入下一个目录条目 File[] fileArr = file.listFiles(); // 递归写入目录下的所有文件 for(File f : fileArr){ zip(out,f,base); } } else if (file.isFile()){ ZipEntry entry = new ZipEntry(base); // 创建一个文件条目 entry.setCrc(getCRC32(file)); entry.setMethod(ZipEntry.STORED); entry.setCompressedSize(file.length()); // -- out.putNextEntry(entry); // 向输出流中写入下一个文件条目 FileInputStream in = new FileInputStream(file); // 写入文件内容 byte[] buf = new byte[1024]; int count; while((count = in.read(buf)) != -1){ out.write(buf,0,count); } in.close(); } } /** * 计算 file 的 CRC-32 校验和 * @param file * @return */ public static long getCRC32(File file)throws IOException{ // -- CRC32 crc = new CRC32(); // -- BufferedInputStream bins = new BufferedInputStream(new FileInputStream(file)); byte[] buf = new byte[1024]; int count; // -- while((count = bins.read(buf)) != -1){ crc.update(buf, 0, count); } bins.close(); return crc.getValue(); } }
6. 调整数组大小
package org.demo.common; import java.lang.reflect.Array; /** * 调整数组大小 * @author * @date 2010-6-21 * @file org.demo.common.ArrayTools.java */ public class ArrayTools { /** * @param args */ public static void main(String[] args) { int[] arr = new int[10]; arr[0] = 1; arr[1] = 2; arr[2] = 3; arr[3] = 4; arr[4] = 5; arr[5] = 6; arr[6] = 7; // 调整数组大小 int[] tmp = (int[])arrayResize(arr, 7); // 输出新数组信息 System.out.println("length=" + tmp.length); System.out.print("["); for(int i=0; i < tmp.length; i++){ System.out.print(tmp[i]); if(i < tmp.length -1){ System.out.print(","); } } System.out.println("]"); } /** * 调整数组的大小 * @param oldArray * @param newSize */ public static Object arrayResize(Object oldArray,int newSize){ // -- 数组大小 int oldSize = Array.getLength(oldArray); newSize = Math.min(oldSize, newSize); // -- 数组内 元素的类型 Class<?> type = oldArray.getClass().getComponentType(); // -- 新建数组 Object newArray = Array.newInstance(type, newSize); System.arraycopy(oldArray, 0, newArray, 0, newSize); return newArray; } }
7. 数组 -> Map
package org.demo.common; import java.util.Map; import org.apache.commons.lang.ArrayUtils; // -- // library dependencies // * commons-lang-2.5.jar // -- /** * Array to Map * @author * @date 2010-6-20 * @file org.demo.common.Array2Map.java */ public class Array2Map { @SuppressWarnings("unchecked") public static void main(String[] args) { String[][] arr = new String[][]{{"a","aa"},{"b","bb"}}; Map map = ArrayUtils.toMap(arr); System.out.println("map=" + map); } }
8. 使用 XSLT 转换 XML
package local; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import javax.xml.transform.Result; import javax.xml.transform.Source; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.sax.SAXSource; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.xml.sax.InputSource; /** * 使用 XSLT 转换 XML * @author * @date 2010-7-8 * @file local.XsltTools.java */ public class XsltTools { /** * 测试 * @param args * @throws IOException * @throws TransformerException */ public static void main(String[] args) throws Exception { String xsl = "D:/local/transform.xsl"; String xml = "D:/local/customer.xml"; InputStream in = new FileInputStream(xsl); // 构建输入输出流 ByteArrayOutputStream out = new ByteArrayOutputStream(); Source from = new StreamSource(new File(xml)); Result to = new StreamResult(out); // 构建转换器并执行转换 Transformer transformer = getTransformer(in); transformer.transform(from, to); // 输出转换后结果 String result = out.toString(); System.out.println(result); } /** * 创建并返回 transformer * @param in_xsl * @return a Transformer instance or null. */ public static Transformer getTransformer(InputStream in_xsl){ Transformer transformer = null; try { SAXSource xsl = new SAXSource(new InputSource(in_xsl)); transformer = TransformerFactory.newInstance() .newTransformer(xsl); } catch (Exception e) { e.printStackTrace(); } return transformer; } }
// customer.xml
<?xml version="1.0" encoding="utf-8"?> <mysql> <customer> <key>001</key> <firstName>Zhang</firstName> <lastName>san</lastName> <comment>This is a comment</comment> </customer> </mysql>
// transform.xsl
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/mysql"> <db2> <xsl:for-each select="customer"> <client id="{key}"> <name><xsl:value-of select="concat(firstName,lastName)"/></name> <note><xsl:value-of select="comment"/></note> </client> </xsl:for-each> </db2> </xsl:template> </xsl:stylesheet>
// 输出结果
9. 类型转换
/** * 类型转换: String -> type * @param <T> * @param value * @param type * @return */ @SuppressWarnings("unchecked") public <T>T typeConvert(String value,Class<T> type){ PropertyEditor pe = PropertyEditorManager.findEditor(type); pe.setAsText(value); return (T)pe.getValue(); }
10. java 计算日期差
/** * 计算日期差 * @param start * @param end * @return */ public static long subtract(Date start,Date end){ // 先个自计算出距离 1970-1-1 的日期差,然后相减 long one_day = 24*60*60*1000; long stime = start.getTime(); long etime = end.getTime(); long sdays = stime/one_day; long edays = etime/one_day; // 若 start < 1970-1-1,则日期差了一天,需要修正 if (stime < 0){ sdays--; } // 若 end < 1970-1-1,则日期差了一天,需要修正 if (etime < 0){ edays--; } return edays - sdays; }
11. END