MyUtils.java
上传用户:ouhalaa
上传日期:2016-03-17
资源大小:10210k
文件大小:8k
源码类别:

Web服务器

开发平台:

Java

  1. package com.lhq.prj.bms.core;
  2. import java.awt.Image;
  3. import java.awt.image.BufferedImage;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileNotFoundException;
  7. import java.io.FileOutputStream;
  8. import java.io.IOException;
  9. import java.lang.reflect.Field;
  10. import java.lang.reflect.InvocationTargetException;
  11. import java.lang.reflect.Method;
  12. import java.util.ArrayList;
  13. import java.util.Collection;
  14. import java.util.List;
  15. import java.util.Random;
  16. import org.apache.commons.collections.CollectionUtils;
  17. import org.apache.commons.lang.StringUtils;
  18. import com.sun.image.codec.jpeg.JPEGCodec;
  19. import com.sun.image.codec.jpeg.JPEGEncodeParam;
  20. import com.sun.image.codec.jpeg.JPEGImageEncoder;
  21. /**
  22.  * MyUtils.java Create on 2008-9-17 下午10:45:20
  23.  * 
  24.  * 工具类
  25.  * 
  26.  * Copyright (c) 2008 by MTA.
  27.  * 
  28.  * @author 廖瀚卿
  29.  * @version 1.0
  30.  */
  31. public class MyUtils {
  32. public static void main(String[] s) {
  33. List conditions = new ArrayList();
  34. MyUtils.addToCollection(conditions, MyUtils.split("a,b-c d,e f-g", " ,-"));
  35. System.out.println(conditions);// output[a, b, c, d, e, f, g]
  36. }
  37. /**
  38.  * 删除文件
  39.  * 
  40.  * @param filePathAndName
  41.  *          String 文件路径及名称 如c:/fqf.txt
  42.  * @param fileContent
  43.  *          String
  44.  * @return boolean
  45.  */
  46. public static boolean delFile(String filePathAndName) {
  47. File myDelFile = new java.io.File(filePathAndName);
  48. if (!myDelFile.exists()) {
  49. return true;
  50. }
  51. return myDelFile.delete();
  52. }
  53. /**
  54.  * 上传文件
  55.  * 
  56.  * @param uploadFileName
  57.  *          被上传的文件名称
  58.  * @param savePath
  59.  *          文件的保存路径
  60.  * @param uploadFile
  61.  *          被上传的文件
  62.  * @return newFileName
  63.  */
  64. public static String upload(String uploadFileName, String savePath, File uploadFile) {
  65. String newFileName = getRandomName(uploadFileName, savePath);
  66. try {
  67. FileOutputStream fos = new FileOutputStream(savePath + newFileName);
  68. FileInputStream fis = new FileInputStream(uploadFile);
  69. byte[] buffer = new byte[1024];
  70. int len = 0;
  71. while ((len = fis.read(buffer)) > 0) {
  72. fos.write(buffer, 0, len);
  73. }
  74. } catch (FileNotFoundException e) {
  75. e.printStackTrace();
  76. } catch (IOException e) {
  77. e.printStackTrace();
  78. }
  79. return newFileName;
  80. }
  81. /**
  82.  * 根据路径创建一系列的目录
  83.  * 
  84.  * @param path
  85.  */
  86. public static void mkDirectory(String path) {
  87. File file;
  88. try {
  89. file = new File(path);
  90. if (!file.exists()) {
  91. file.mkdirs();
  92. }
  93. } catch (RuntimeException e) {
  94. e.printStackTrace();
  95. } finally {
  96. file = null;
  97. }
  98. }
  99. /**
  100.  * 将对象数组的每一个元素分别添加到指定集合中,调用Apache commons collections 中的方法
  101.  * 
  102.  * @param collection
  103.  *          目标集合对象
  104.  * @param arr
  105.  *          对象数组
  106.  */
  107. public static void addToCollection(Collection collection, Object[] arr) {
  108. if (null != collection && null != arr) {
  109. CollectionUtils.addAll(collection, arr);
  110. }
  111. }
  112. /**
  113.  * 将字符串已多个分隔符拆分为数组,调用Apache commons lang 中的方法
  114.  * 
  115.  * <pre>
  116.  *    Example:
  117.  *     String[] arr = StringUtils.split(&quot;a b,c d,e-f&quot;, &quot; ,-&quot;);
  118.  *     System.out.println(arr.length);//输出6
  119.  * </pre>
  120.  * 
  121.  * @param str
  122.  *          目标字符串
  123.  * @param separatorChars
  124.  *          分隔符字符串
  125.  * @return 字符串数组
  126.  */
  127. public static String[] split(String str, String separatorChars) {
  128. return StringUtils.split(str, separatorChars);
  129. }
  130. /**
  131.  * 调用指定字段的setter方法
  132.  * 
  133.  * <pre>
  134.  *    Example:
  135.  *    User user = new User();
  136.  *    MyUtils.invokeSetMethod(&quot;userName&quot;, user, new Object[] {&quot;张三&quot;});
  137.  * </pre>
  138.  * 
  139.  * @param fieldName
  140.  *          字段(属性)名称
  141.  * @param invokeObj
  142.  *          被调用方法的对象
  143.  * @param args
  144.  *          被调用方法的参数数组
  145.  * @return 成功与否
  146.  */
  147. public static boolean invokeSetMethod(String fieldName, Object invokeObj, Object[] args) {
  148. boolean flag = false;
  149. Field[] fields = invokeObj.getClass().getDeclaredFields(); // 获得对象实体类中所有定义的字段
  150. Method[] methods = invokeObj.getClass().getDeclaredMethods(); // 获得对象实体类中所有定义的方法
  151. for (Field f : fields) {
  152. String fname = f.getName();
  153. if (fname.equals(fieldName)) {// 找到要更新的字段名
  154. String mname = "set" + (fname.substring(0, 1).toUpperCase() + fname.substring(1));// 组建setter方法
  155. for (Method m : methods) {
  156. String name = m.getName();
  157. if (mname.equals(name)) {
  158. // 处理Integer参数
  159. if (f.getType().getSimpleName().equalsIgnoreCase("integer") && args.length > 0) {
  160. args[0] = Integer.valueOf(args[0].toString());
  161. }
  162. // 处理Boolean参数
  163. if (f.getType().getSimpleName().equalsIgnoreCase("boolean") && args.length > 0) {
  164. args[0] = Boolean.valueOf(args[0].toString());
  165. }
  166. try {
  167. m.invoke(invokeObj, args);
  168. flag = true;
  169. } catch (IllegalArgumentException e) {
  170. flag = false;
  171. e.printStackTrace();
  172. } catch (IllegalAccessException e) {
  173. flag = false;
  174. e.printStackTrace();
  175. } catch (InvocationTargetException e) {
  176. flag = false;
  177. e.printStackTrace();
  178. }
  179. }
  180. }
  181. }
  182. }
  183. return flag;
  184. }
  185. /**
  186.  * 判断文件是否存在
  187.  * 
  188.  * @param fileName
  189.  * @param dir
  190.  * @return
  191.  */
  192. public static boolean isFileExist(String fileName, String dir) {
  193. File files = new File(dir + fileName);
  194. return (files.exists()) ? true : false;
  195. }
  196. /**
  197.  * 获得随机文件名,保证在同一个文件夹下不同名
  198.  * 
  199.  * @param fileName
  200.  * @param dir
  201.  * @return
  202.  */
  203. public static String getRandomName(String fileName, String dir) {
  204. String[] split = fileName.split("\.");// 将文件名已.的形式拆分
  205. String extendFile = "." + split[split.length - 1].toLowerCase(); // 获文件的有效后缀
  206. Random random = new Random();
  207. int add = random.nextInt(1000000); // 产生随机数10000以内
  208. String ret = add + extendFile;
  209. while (isFileExist(ret, dir)) {
  210. add = random.nextInt(1000000);
  211. ret = fileName + add + extendFile;
  212. }
  213. return ret;
  214. }
  215. /**
  216.  * 创建缩略图
  217.  * 
  218.  * @param file
  219.  *          上传的文件流
  220.  * @param height
  221.  *          最小的尺寸
  222.  * @throws IOException
  223.  */
  224. public static void createMiniPic(File file, float width, float height) throws IOException {
  225. Image src = javax.imageio.ImageIO.read(file); // 构造Image对象
  226. int old_w = src.getWidth(null); // 得到源图宽
  227. int old_h = src.getHeight(null);
  228. int new_w = 0;
  229. int new_h = 0; // 得到源图长
  230. float tempdouble;
  231. if (old_w >= old_h) {
  232. tempdouble = old_w / width;
  233. } else {
  234. tempdouble = old_h / height;
  235. }
  236. if (old_w >= width || old_h >= height) { // 如果文件小于锁略图的尺寸则复制即可
  237. new_w = Math.round(old_w / tempdouble);
  238. new_h = Math.round(old_h / tempdouble);// 计算新图长宽
  239. while (new_w > width && new_h > height) {
  240. if (new_w > width) {
  241. tempdouble = new_w / width;
  242. new_w = Math.round(new_w / tempdouble);
  243. new_h = Math.round(new_h / tempdouble);
  244. }
  245. if (new_h > height) {
  246. tempdouble = new_h / height;
  247. new_w = Math.round(new_w / tempdouble);
  248. new_h = Math.round(new_h / tempdouble);
  249. }
  250. }
  251. BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
  252. tag.getGraphics().drawImage(src, 0, 0, new_w, new_h, null); // 绘制缩小后的图
  253. FileOutputStream newimage = new FileOutputStream(file); // 输出到文件流
  254. JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
  255. JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tag);
  256. param.setQuality((float) (100 / 100.0), true);// 设置图片质量,100最大,默认70
  257. encoder.encode(tag, param);
  258. encoder.encode(tag); // 将JPEG编码
  259. newimage.close();
  260. }
  261. }
  262. /**
  263.  * 判断文件类型是否是合法的,就是判断allowTypes中是否包含contentType
  264.  * 
  265.  * @param contentType
  266.  *          文件类型
  267.  * @param allowTypes
  268.  *          文件类型列表
  269.  * @return 是否合法
  270.  */
  271. public static boolean isValid(String contentType, String[] allowTypes) {
  272. if (null == contentType || "".equals(contentType)) {
  273. return false;
  274. }
  275. for (String type : allowTypes) {
  276. if (contentType.equals(type)) {
  277. return true;
  278. }
  279. }
  280. return false;
  281. }
  282. }