分享一个文件上传工具类

文件上传状态枚举类:

View Code
 1     package com.hoo.enums;
 2 
 3      
 4 
 5     /**
 6 
 7      * <b>function:</b> 文件上传状态
 8 
 9      * @package com.hoo.enums
10 
11      * @fileName UploadState.java
12 
13      * @createDate 2010-10-11 下午12:18:14
14 
15      * @author hoojo
16 
17      */
18 
19     public enum UploadState {
20 
21         UPLOAD_SUCCSSS(0, "上传文件成功!"),
22 
23         UPLOAD_FAILURE(1, "上传文件失败!"),
24 
25         UPLOAD_TYPE_ERROR(2, "上传文件类型错误!"),
26 
27         UPLOAD_OVERSIZE(3, "上传文件过大!"),
28 
29         UPLOAD_ZEROSIZE(4, "上传文件为空!"),
30 
31         UPLOAD_NOTFOUND(5, "上传文件路径错误!");
32 
33         
34 
35         private String state;
36 
37         private int flag;
38 
39         public String getState() {
40 
41             return this.state;
42 
43         }
44 
45         
46 
47         public int getFlag() {
48 
49             return this.flag;
50 
51         }
52 
53         UploadState(int flag, String state) {
54 
55             this.state = state;
56 
57             this.flag = flag;
58 
59         }
60 
61     }

文件上传工具类code:

View Code
   1     package com.hoo.util;
   2 
   3      
   4 
   5     import java.io.File;
   6 
   7     import java.io.FileInputStream;
   8 
   9     import java.io.FileNotFoundException;
  10 
  11     import java.io.FileOutputStream;
  12 
  13     import java.io.IOException;
  14 
  15     import java.io.InputStream;
  16 
  17     import java.text.SimpleDateFormat;
  18 
  19     import java.util.Date;
  20 
  21     import java.util.Random;
  22 
  23     import java.util.UUID;
  24 
  25     import org.apache.commons.io.FileUtils;
  26 
  27     import com.hoo.enums.UploadState;
  28 
  29      
  30 
  31     /***
  32 
  33      * <b>function:</b> 文件上传工具类
  34 
  35      * @author hoojo
  36 
  37      * @createDate Oct 9, 2010 11:12:47 PM
  38 
  39      * @file UploadFileUtils.java
  40 
  41      * @package com.hoo.util
  42 
  43      * @blog http://blog.csdn.net/IBM_hoojo
  44 
  45      * @email hoojo_@126.com
  46 
  47      * @version 1.0
  48 
  49      */
  50 
  51     public abstract class UploadFileUtils {
  52 
  53         
  54 
  55         //上传文件保存路径
  56 
  57         public static String path = "/upload/";
  58 
  59         //定义可以上传文件的后缀数组,默认"*",代表所有
  60 
  61         public static String[] filePostfixs = { "*" };
  62 
  63         public static String[] typeImages = { "gif", "jpeg", "png", "jpg", "tif", "bmp" };
  64 
  65         public static String[] typeOthers = { "html", "htm", "doc", "xls", "txt", "zip", "rar", "pdf", "cll" };
  66 
  67         
  68 
  69         //上传文件的最大长度
  70 
  71         public static long maxFileSize = 1024 * 1024 * 1024 * 2L;//2G
  72 
  73         //一次读取多少字节
  74 
  75         public static int bufferSize = 1024 * 8;
  76 
  77         
  78 
  79         private final static void init() {
  80 
  81             if (bufferSize > Integer.MAX_VALUE) {
  82 
  83                 bufferSize = 1024 * 8;
  84 
  85             } else if (bufferSize < 8) {
  86 
  87                 bufferSize = 8;
  88 
  89             }
  90 
  91             if (maxFileSize < 1) {
  92 
  93                 maxFileSize = 1024 * 1024 * 1024 * 2L;
  94 
  95             } else if (maxFileSize > Long.MAX_VALUE) {
  96 
  97                 maxFileSize = 1024 * 1024 * 1024 * 2L;
  98 
  99             }
 100 
 101         }
 102 
 103         
 104 
 105         /**
 106 
 107          * <b>function:</b>通过输入流参数上传文件
 108 
 109          * @author hoojo
 110 
 111          * @createDate Oct 9, 2010 11:22:47 PM
 112 
 113          * @param uploadFileName 文件名称
 114 
 115          * @param savePath 保存路径
 116 
 117          * @param InputStream 上传的文件的输入流
 118 
 119          * @return 是否上传成功
 120 
 121          * @throws Exception
 122 
 123          */
 124 
 125         public static UploadState upload4Stream(String fileName, String path, InputStream is) throws Exception {
 126 
 127             init();
 128 
 129             UploadState state = UploadState.UPLOAD_FAILURE;
 130 
 131             FileOutputStream fos = null;
 132 
 133            
 134 
 135             try {
 136 
 137                 path = getDoPath(path);
 138 
 139                 mkDir(path);
 140 
 141                 fos = new FileOutputStream(path + fileName);
 142 
 143                   
 144 
 145                 byte[] buffer = new byte[bufferSize];
 146 
 147                 int len = 0;
 148 
 149                 while ((len = is.read(buffer)) > 0) {
 150 
 151                     fos.write(buffer, 0, len);
 152 
 153                 }
 154 
 155                 state = UploadState.UPLOAD_SUCCSSS;
 156 
 157             } catch (FileNotFoundException e) {
 158 
 159                 state = UploadState.UPLOAD_NOTFOUND;
 160 
 161                    throw e;
 162 
 163             } catch (IOException e) {
 164 
 165                 state = UploadState.UPLOAD_FAILURE;
 166 
 167                 throw e;
 168 
 169             } finally {
 170 
 171                 if (is != null) {
 172 
 173                     is.close();
 174 
 175                 }
 176 
 177                 if (fos != null) {
 178 
 179                     fos.flush();
 180 
 181                     fos.close();
 182 
 183                 }
 184 
 185             }
 186 
 187             return state;
 188 
 189         }
 190 
 191         
 192 
 193         /**
 194 
 195          * <b>function:</b>上传文件
 196 
 197          * @author hoojo
 198 
 199          * @createDate Oct 9, 2010 11:33:27 PM
 200 
 201          * @param uploadFileName 文件名称
 202 
 203          * @param savePath 保存路径
 204 
 205          * @param uploadFile 上传的文件
 206 
 207          * @return 是否上传成功
 208 
 209          * @throws Exception
 210 
 211          */
 212 
 213         public static UploadState upload4Stream(String fileName, String path, File file) throws Exception {
 214 
 215             init();
 216 
 217             UploadState state = UploadState.UPLOAD_FAILURE;
 218 
 219             FileInputStream fis = null;
 220 
 221             try {
 222 
 223                 long size = file.length();
 224 
 225                 if (size <= 0) {
 226 
 227                     state = UploadState.UPLOAD_ZEROSIZE;
 228 
 229                 } else {
 230 
 231                     if (size <= maxFileSize) {
 232 
 233                         fis = new FileInputStream(file);
 234 
 235                         state = upload4Stream(fileName, path, fis);
 236 
 237                     } else {
 238 
 239                         state = UploadState.UPLOAD_OVERSIZE;
 240 
 241                     }
 242 
 243                 }
 244 
 245             } catch (FileNotFoundException e) {
 246 
 247                 state = UploadState.UPLOAD_NOTFOUND;
 248 
 249                    throw e;
 250 
 251             } catch (IOException e) {
 252 
 253                 state = UploadState.UPLOAD_FAILURE;
 254 
 255                 throw e;
 256 
 257             } finally {
 258 
 259                 if (fis != null) {
 260 
 261                     fis.close();
 262 
 263                 }
 264 
 265             }
 266 
 267             return state;
 268 
 269         }
 270 
 271         
 272 
 273         /**
 274 
 275          * <b>function:</b>通过数组进行验证文件类型上传
 276 
 277          * @author hoojo
 278 
 279          * @createDate Oct 10, 2010 3:39:34 PM
 280 
 281          * @param fileName 文件名称
 282 
 283          * @param path 文件路径
 284 
 285          * @param file 文件
 286 
 287          * @param allowTypes 文件后缀、类型数组
 288 
 289          * @return 返回是否上传成功
 290 
 291          * @throws Exception
 292 
 293          */
 294 
 295         public static UploadState upload4Stream(String fileName, String path, File file, String[] allowTypes) throws Exception {
 296 
 297             UploadState state = UploadState.UPLOAD_FAILURE;
 298 
 299             if (validTypeByName(fileName, allowTypes)) {
 300 
 301                 state = upload4Stream(fileName, path, file);
 302 
 303             } else {
 304 
 305                 state = UploadState.UPLOAD_TYPE_ERROR;
 306 
 307             }
 308 
 309             return state;
 310 
 311         }
 312 
 313         
 314 
 315         /**
 316 
 317          * <b>function:</b>通过数组进行验证文件类型上传
 318 
 319          * @author hoojo
 320 
 321          * @createDate Oct 10, 2010 3:43:30 PM
 322 
 323          * @param fileName 文件名称
 324 
 325          * @param path 文件路径
 326 
 327          * @param InputStream 文件输入流
 328 
 329          * @param allowTypes 文件后缀、类型数组
 330 
 331          * @return 返回是否上传成功
 332 
 333          * @throws Exception
 334 
 335          */
 336 
 337         public static UploadState upload4Stream(String fileName, String path, InputStream fs, String[] allowTypes) throws Exception {
 338 
 339             UploadState state = UploadState.UPLOAD_FAILURE;
 340 
 341             if (validTypeByName(fileName, allowTypes)) {
 342 
 343                 state = upload4Stream(fileName, path, fs);
 344 
 345             } else {
 346 
 347                 state = UploadState.UPLOAD_TYPE_ERROR;
 348 
 349             }
 350 
 351             return state;
 352 
 353         }
 354 
 355         
 356 
 357         /**
 358 
 359          * <b>function:</b> 利用FileUtils上传文件;其中maxFileSize是限制上传文件的大小
 360 
 361          * @author hoojo
 362 
 363          * @createDate Oct 9, 2010 11:49:15 PM
 364 
 365          * @param fileName 文件名称
 366 
 367          * @param path 保存路径
 368 
 369          * @param file 文件
 370 
 371          * @return 是否上传成功
 372 
 373          * @throws Exception
 374 
 375          */
 376 
 377         public static boolean upload4CopyFile(String fileName, String path, File file) throws Exception {
 378 
 379             init();
 380 
 381             boolean success = false;
 382 
 383             if (file.length() <= maxFileSize) {
 384 
 385                 path = getDoPath(path);
 386 
 387                 mkDir(path);
 388 
 389                 File destFile = new File(path, fileName);
 390 
 391                 FileUtils.copyFile(file, destFile);
 392 
 393                 success = true;
 394 
 395             }
 396 
 397             return success;
 398 
 399         }
 400 
 401         
 402 
 403         /**
 404 
 405          * <b>function:</b>上传指定文件类型的文件
 406 
 407          * @author hoojo
 408 
 409          * @createDate Oct 10, 2010 12:30:09 PM
 410 
 411          * @param fileName 文件名
 412 
 413          * @param path 路径
 414 
 415          * @param file 文件
 416 
 417          * @param allowTypes 类型、后缀数组
 418 
 419          * @return 成功上传的文件名
 420 
 421          * @throws Exception
 422 
 423          */
 424 
 425         public static boolean upload4CopyFile(String fileName, String path, File file, String[] allowTypes) throws Exception {
 426 
 427             boolean success = false;
 428 
 429             if (validTypeByName(fileName, allowTypes)) {
 430 
 431                 success = upload4CopyFile(fileName, path, file);
 432 
 433             }
 434 
 435             return success;
 436 
 437         }
 438 
 439         
 440 
 441         /**
 442 
 443          * <b>function:</b> 根据文件名和类型数组验证文件类型是否合法,flag是否忽略大小写
 444 
 445          * @author hoojo
 446 
 447          * @createDate Oct 10, 2010 11:54:54 AM
 448 
 449          * @param fileName 文件名
 450 
 451          * @param allowTypes 类型数组
 452 
 453          * @param flag 是否获得大小写
 454 
 455          * @return 是否验证通过
 456 
 457          */
 458 
 459         public static boolean validTypeByName(String fileName, String[] allowTypes, boolean flag) {
 460 
 461             String suffix = getType(fileName);
 462 
 463             boolean valid = false;
 464 
 465             if (allowTypes.length > 0 && "*".equals(allowTypes[0])) {
 466 
 467                 valid = true;
 468 
 469             } else {
 470 
 471                 for (String type : allowTypes) {
 472 
 473                     if (flag) {//不区分大小写后缀
 474 
 475                         if (suffix != null && suffix.equalsIgnoreCase(type)) {
 476 
 477                             valid = true;
 478 
 479                             break;
 480 
 481                         }
 482 
 483                     } else {//严格区分大小写
 484 
 485                         if (suffix != null && suffix.equals(type)) {
 486 
 487                             valid = true;
 488 
 489                             break;
 490 
 491                         }
 492 
 493                     }
 494 
 495                 }
 496 
 497             }
 498 
 499             return valid;
 500 
 501         }
 502 
 503         
 504 
 505         /**
 506 
 507          * <b>function:</b>根据文件名称和类型数组验证文件类型是否合法
 508 
 509          * @author hoojo
 510 
 511          * @createDate Oct 10, 2010 10:27:17 AM
 512 
 513          * @param fileName 文件名
 514 
 515          * @param allowTypes 文件类型数组
 516 
 517          * @return 是否合法
 518 
 519          */
 520 
 521         public static boolean validTypeByName(String fileName, String[] allowTypes) {
 522 
 523             return validTypeByName(fileName, allowTypes, true);
 524 
 525         }
 526 
 527         
 528 
 529         /**
 530 
 531          * <b>function:</b> 根据后缀和类型数组验证文件类型是否合法,flag是否区分后缀大小写,true严格大小写
 532 
 533          * @author hoojo
 534 
 535          * @createDate Oct 10, 2010 12:00:10 PM
 536 
 537          * @param suffix 后缀名
 538 
 539          * @param allowTypes 文件类型数组
 540 
 541          * @param flag 是否区分大小写
 542 
 543          * @return 是否合法
 544 
 545          */
 546 
 547         public static boolean validTypeByPostfix(String suffix, String[] allowTypes, boolean flag) {
 548 
 549             boolean valid = false;
 550 
 551             if (allowTypes.length > 0 && "*".equals(allowTypes[0])) {
 552 
 553                 valid = true;
 554 
 555             } else {
 556 
 557                 for (String type : allowTypes) {
 558 
 559                     if (flag) {//不区分大小写后缀
 560 
 561                         if (suffix != null && suffix.equalsIgnoreCase(type)) {
 562 
 563                             valid = true;
 564 
 565                             break;
 566 
 567                         }
 568 
 569                     } else {//严格区分大小写
 570 
 571                         if (suffix != null && suffix.equals(type)) {
 572 
 573                             valid = true;
 574 
 575                             break;
 576 
 577                         }
 578 
 579                     }
 580 
 581                 }
 582 
 583             }
 584 
 585             return valid;
 586 
 587         }
 588 
 589         
 590 
 591         /**
 592 
 593          * <b>function:</b>根据文件后缀名和类型数组,验证文件类型是否合法
 594 
 595          * @author hoojo
 596 
 597          * @createDate Oct 10, 2010 10:25:32 AM
 598 
 599          * @param suffix 后缀名
 600 
 601          * @param allowTypes 类型数组
 602 
 603          * @return 是否合法
 604 
 605          */
 606 
 607         public static boolean validTypeByPostfix(String suffix, String[] allowTypes) {
 608 
 609             return validTypeByPostfix(suffix, allowTypes, true);
 610 
 611         }
 612 
 613         
 614 
 615         /**
 616 
 617          * <b>function:</b>验证当前后缀、文件类型是否是图片类型
 618 
 619          * typeImages 可以设置图片类型
 620 
 621          * @author hoojo
 622 
 623          * @createDate Oct 10, 2010 12:17:18 PM
 624 
 625          * @param suffix 验证文件的后缀
 626 
 627          * @return 是否合法
 628 
 629          */
 630 
 631         public static boolean validTypeByPostfix4Images(String suffix) {
 632 
 633             return validTypeByPostfix(suffix, typeImages);
 634 
 635         }
 636 
 637         
 638 
 639         /**
 640 
 641          * <b>function:</b>验证当前后缀、文件类型是否是非图片类型(常用办公文件类型)
 642 
 643          * typeOthers 可以设置文件类型
 644 
 645          * @author hoojo
 646 
 647          * @createDate Oct 10, 2010 12:18:18 PM
 648 
 649          * @param suffix 验证文件的后缀
 650 
 651          * @return 是否合法
 652 
 653          */
 654 
 655         public static boolean validTypeByPostfix4Others(String suffix) {
 656 
 657             return validTypeByPostfix(suffix, typeOthers);
 658 
 659         }
 660 
 661         
 662 
 663         /**
 664 
 665          * <b>function:</b>验证当前文件名、文件类型是否是图片类型
 666 
 667          * typeImages 可以设置图片类型
 668 
 669          * @author hoojo
 670 
 671          * @createDate Oct 10, 2010 12:19:18 PM
 672 
 673          * @param fileName 验证文件的名称
 674 
 675          * @return 是否合法
 676 
 677          */
 678 
 679         public static boolean validTypeByName4Images(String fileName) {
 680 
 681             return validTypeByName(fileName, typeImages);
 682 
 683         }
 684 
 685         
 686 
 687         /**
 688 
 689          * <b>function:</b>验证当前文件名称、文件类型是否是非图片类型(常用办公文件类型)
 690 
 691          * typeOthers 可以设置文件类型
 692 
 693          * @author hoojo
 694 
 695          * @createDate Oct 10, 2010 12:21:22 PM
 696 
 697          * @param fileName 验证文件的名称
 698 
 699          * @return 是否合法
 700 
 701          */
 702 
 703         public static boolean validTypeByName4Others(String fileName) {
 704 
 705             return validTypeByName(fileName, typeOthers);
 706 
 707         }
 708 
 709         
 710 
 711         /**
 712 
 713          * <b>function:</b>传递一个路径和文件名称,删除该文件
 714 
 715          * @author hoojo
 716 
 717          * @createDate Oct 10, 2010 10:47:57 AM
 718 
 719          * @param fileName 文件名称
 720 
 721          * @param path 路径
 722 
 723          * @return 是否删除成功
 724 
 725          */
 726 
 727         public static boolean removeFile(String fileName, String path) {
 728 
 729             boolean flag = false;
 730 
 731             if (isFileExist(fileName, path)) {
 732 
 733                 File file = new File(getDoPath(path) + fileName);
 734 
 735                 flag = file.delete();
 736 
 737             }
 738 
 739             return flag;
 740 
 741         }
 742 
 743         
 744 
 745         /**
 746 
 747          * <b>function:</b>删除当前文件
 748 
 749          * @author hoojo
 750 
 751          * @createDate Oct 10, 2010 10:49:54 AM
 752 
 753          * @param file 要删除的文件
 754 
 755          * @return 是否删除成功
 756 
 757          */
 758 
 759         public static boolean removeFile(File file) {
 760 
 761             boolean flag = false;
 762 
 763             if (file != null && file.exists()) {
 764 
 765                 flag = file.delete();
 766 
 767             }
 768 
 769             return flag;
 770 
 771         }
 772 
 773         
 774 
 775         /**
 776 
 777          * <b>function:</b>删除某个文件
 778 
 779          * @author hoojo
 780 
 781          * @createDate Oct 12, 2010 9:33:06 PM
 782 
 783          * @param path 传递该文件路径
 784 
 785          * @return 删除是否成功
 786 
 787          */
 788 
 789         public static boolean removeFile(String path) {
 790 
 791             return removeFile(new File(path));
 792 
 793         }
 794 
 795         
 796 
 797         /**
 798 
 799          * <b>function:</b>删除当前文件下面所有文件
 800 
 801          * @author hoojo
 802 
 803          * @createDate Oct 12, 2010 9:27:33 PM
 804 
 805          * @param file File 要删除的文件夹下面文件的文件对象
 806 
 807          * @return 是否删除成功,如果有一个文件删除失败,将返回false
 808 
 809          */
 810 
 811         public static boolean removeFile4Dir(File file) {
 812 
 813             boolean flag = false;
 814 
 815             if (file != null && file.exists() && file.isDirectory()) {
 816 
 817                 File[] allFile = file.listFiles();
 818 
 819                 for (File f : allFile) {
 820 
 821                     flag = f.delete();
 822 
 823                     if (!flag) {
 824 
 825                         System.err.println("删除文件" + f.getAbsolutePath() + "出错了!");
 826 
 827                         break;
 828 
 829                     }
 830 
 831                 }
 832 
 833             }
 834 
 835             return flag;
 836 
 837         }
 838 
 839         
 840 
 841         /**
 842 
 843          * <b>function:</b>删除当前目录下所有文件
 844 
 845          * @author hoojo
 846 
 847          * @createDate Oct 12, 2010 9:34:41 PM
 848 
 849          * @param path 目录、路径
 850 
 851          * @return 是否成功
 852 
 853          */
 854 
 855         public static boolean removeFile4Dir(String path) {
 856 
 857             return removeFile4Dir(new File(path));
 858 
 859         }
 860 
 861         
 862 
 863         /**
 864 
 865          * <b>function:</b>删除某个文件夹下的所有文件(除目录),包含子文件夹的文件
 866 
 867          * @author hoojo
 868 
 869          * @createDate Oct 12, 2010 9:30:01 PM
 870 
 871          * @param file 即将删除文件夹对象
 872 
 873          * @return 是否删除成功
 874 
 875          */
 876 
 877         public static boolean removeAllFile4Dir(File file) {
 878 
 879             boolean flag = false;
 880 
 881             if (file != null && file.exists() && file.isDirectory()) {
 882 
 883                 File[] allFile = file.listFiles();
 884 
 885                 for (File f : allFile) {
 886 
 887                     if (!f.isDirectory()) {
 888 
 889                         flag = f.delete();
 890 
 891                     } else {
 892 
 893                         flag = removeAllFile4Dir(f);
 894 
 895                     }
 896 
 897                     if (!flag) {
 898 
 899                         System.err.println("删除文件" + f.getAbsolutePath() + "出错了!");
 900 
 901                         break;
 902 
 903                     }
 904 
 905                 }
 906 
 907             }
 908 
 909             return flag;
 910 
 911         }
 912 
 913         
 914 
 915         /**
 916 
 917          * <b>function:</b>删除某个目录下所有文件(不包含文件夹,包含文件夹下的文件)
 918 
 919          * @author hoojo
 920 
 921          * @createDate Oct 12, 2010 9:36:17 PM
 922 
 923          * @param path
 924 
 925          * @return
 926 
 927          */
 928 
 929         public static boolean removeAllFile4Dir(String path) {
 930 
 931             return removeAllFile4Dir(new File(path));
 932 
 933         }
 934 
 935         
 936 
 937         /**
 938 
 939          * <b>function:</b> 传入一个文件名,得到这个文件名称的后缀
 940 
 941          * @author hoojo
 942 
 943          * @createDate Oct 9, 2010 11:30:46 PM
 944 
 945          * @param fileName 文件名
 946 
 947          * @return 后缀名
 948 
 949          */
 950 
 951         public static String getSuffix(String fileName) {
 952 
 953              int index = fileName.lastIndexOf(".");
 954 
 955              if (index != -1) {
 956 
 957                  String suffix = fileName.substring(index);//后缀
 958 
 959                  return suffix;
 960 
 961              } else {
 962 
 963                  return null;
 964 
 965              }
 966 
 967         }
 968 
 969         
 970 
 971         /**
 972 
 973          * <b>function:</b>和文件后缀一样,不同的是没有“.”
 974 
 975          * @author hoojo
 976 
 977          * @createDate Oct 10, 2010 2:42:43 PM
 978 
 979          * @param fileName 文件名称
 980 
 981          * @return
 982 
 983          */
 984 
 985         public static String getType(String fileName) {
 986 
 987             int index = fileName.lastIndexOf(".");
 988 
 989             if (index != -1) {
 990 
 991                 String suffix = fileName.substring(index + 1);//后缀
 992 
 993                 return suffix;
 994 
 995             } else {
 996 
 997                 return null;
 998 
 999             }
1000 
1001        }
1002 
1003         
1004 
1005         /**
1006 
1007          * <b>function:</b> 传递一个文件名称和一个新名称,组合成一个新的带后缀文件名
1008 
1009          * 当传递的文件名没有后缀,会添加默认的后缀
1010 
1011          * @author hoojo
1012 
1013          * @createDate Oct 9, 2010 10:53:06 PM
1014 
1015          * @param fileName 文件名称
1016 
1017          * @param newName 新文件名称
1018 
1019          * @param nullSuffix 为没有后缀的文件所添加的后缀;eg:txt
1020 
1021          * @return String 文件名称
1022 
1023          */
1024 
1025         public static String getNewFileName(String fileName, String newName, String nullSuffix) {
1026 
1027             String suffix = getSuffix(fileName);
1028 
1029             if (suffix != null) {
1030 
1031                 newName += suffix;
1032 
1033             } else {
1034 
1035                 newName = newName.concat(".").concat(nullSuffix);
1036 
1037             }
1038 
1039             return newName;
1040 
1041         }
1042 
1043         
1044 
1045         /**
1046 
1047          * <b>function:</b> 利用uuid产生一个随机的name
1048 
1049          * @author hoojo
1050 
1051          * @createDate Oct 9, 2010 10:45:27 PM
1052 
1053          * @param fileName 带后缀的文件名称
1054 
1055          * @return String 随机生成的name
1056 
1057          */
1058 
1059         public static String getRandomName(String fileName) {
1060 
1061             String randomName = UUID.randomUUID().toString();
1062 
1063             return getNewFileName(fileName, randomName, "txt");
1064 
1065         }
1066 
1067         
1068 
1069         /**
1070 
1071          * <b>function:</b> 用当前日期、时间和1000以内的随机数组合成的文件名称
1072 
1073          * @author hoojo
1074 
1075          * @createDate Oct 9, 2010 11:01:47 PM
1076 
1077          * @param fileName 文件名称
1078 
1079          * @return 新文件名称
1080 
1081          */
1082 
1083         public static String getNumberName(String fileName) {
1084 
1085             SimpleDateFormat format = new SimpleDateFormat("yyMMddhhmmss");
1086 
1087             int rand = new Random().nextInt(1000);
1088 
1089             String numberName = format.format(new Date()) + rand;
1090 
1091             return getNewFileName(fileName, numberName, "txt");
1092 
1093         }
1094 
1095         
1096 
1097         /**
1098 
1099          * <b>function:</b>判断该文件是否存在
1100 
1101          * @author hoojo
1102 
1103          * @createDate Oct 10, 2010 12:00:44 AM
1104 
1105          * @param fileName 文件名称
1106 
1107          * @param path 目录
1108 
1109          * @return 是否存在
1110 
1111          */
1112 
1113         public static boolean isFileExist(String fileName, String path) {
1114 
1115             File file = new File(getDoPath(path) + fileName);
1116 
1117             return file.exists();
1118 
1119         }
1120 
1121         
1122 
1123         /**
1124 
1125          * <b>function:</b>返回可用的文件名
1126 
1127          * @author hoojo
1128 
1129          * @createDate Oct 10, 2010 1:02:45 AM
1130 
1131          * @param fileName 文件名
1132 
1133          * @param path 路径
1134 
1135          * @return 可用文件名
1136 
1137          */
1138 
1139         public static String getBracketFileName(String fileName, String path) {
1140 
1141             return getBracketFileName(fileName, fileName, path, 1);
1142 
1143         }
1144 
1145         
1146 
1147         
1148 
1149         /**
1150 
1151          * <b>function:</b>递归处理文件名称,直到名称不重复(对文件名、目录文件夹都可用)
1152 
1153          * eg: a.txt --> a(1).txt
1154 
1155          * 文件夹upload--> 文件夹upload(1)
1156 
1157          * @author hoojo
1158 
1159          * @createDate Oct 10, 2010 12:56:27 AM
1160 
1161          * @param fileName 文件名称
1162 
1163          * @param path 文件路径
1164 
1165          * @param num 累加数字,种子
1166 
1167          * @return 返回没有重复的名称
1168 
1169          */
1170 
1171         public static String getBracketFileName(String fileName, String bracketName, String path, int num) {
1172 
1173             boolean exist = isFileExist(bracketName, path);
1174 
1175             if (exist) {
1176 
1177                 int index = fileName.lastIndexOf(".");
1178 
1179                 String suffix = "";
1180 
1181                 bracketName = fileName;
1182 
1183                 if (index != -1) {
1184 
1185                     suffix = fileName.substring(index);
1186 
1187                     bracketName = fileName.substring(0, index);
1188 
1189                 }
1190 
1191                 bracketName += "(" + num + ")" + suffix;
1192 
1193                 num++;
1194 
1195                 bracketName = getBracketFileName(fileName, bracketName, path, num);
1196 
1197             }
1198 
1199             return bracketName;
1200 
1201         }
1202 
1203         
1204 
1205         /**
1206 
1207          * <b>function:</b>处理后的系统文件路径
1208 
1209          * @author hoojo
1210 
1211          * @createDate Oct 10, 2010 12:49:31 AM
1212 
1213          * @param path 文件路径
1214 
1215          * @return 返回处理后的路径
1216 
1217          */
1218 
1219         public static String getDoPath(String path) {
1220 
1221             path = path.replace("\\", "/");
1222 
1223             String lastChar = path.substring(path.length() - 1);
1224 
1225             if (!"/".equals(lastChar)) {
1226 
1227                 path += "/";
1228 
1229             }
1230 
1231             return path;
1232 
1233         }
1234 
1235         
1236 
1237         /**
1238 
1239          * <b>function:</b> 创建指定的path路径目录
1240 
1241          * @author hoojo
1242 
1243          * @createDate Oct 9, 2010 11:03:49 PM
1244 
1245          * @param path 目录、路径
1246 
1247          * @return 是否创建成功
1248 
1249          * @throws Exception
1250 
1251          */
1252 
1253         public static boolean mkDir(String path) throws Exception {
1254 
1255             File file = null;
1256 
1257             try {
1258 
1259                 file = new File(path);
1260 
1261                 if (!file.exists()) {
1262 
1263                     return file.mkdirs();
1264 
1265                 }
1266 
1267             } catch (RuntimeException e) {
1268 
1269                 throw e;
1270 
1271             } finally {
1272 
1273                 file = null;
1274 
1275             }
1276 
1277             return false;
1278 
1279         }
1280 
1281         
1282 
1283         /**
1284 
1285          * 创建缩略图
1286 
1287          * @param file 上传的文件流
1288 
1289          * @param height 最小的尺寸
1290 
1291          * @throws IOException
1292 
1293          */
1294 
1295         /*public static void writeBrevityPic(File file, float width, float height) throws IOException {
1296 
1297             Image src = javax.imageio.ImageIO.read(file); // 构造Image对象
1298 
1299             int old_w = src.getWidth(null); // 得到源图宽
1300 
1301             int old_h = src.getHeight(null);
1302 
1303             int new_w = 0;
1304 
1305             int new_h = 0; // 得到源图长
1306 
1307             float tempdouble;
1308 
1309             if (old_w >= old_h) {
1310 
1311                 tempdouble = old_w / width;
1312 
1313             } else {
1314 
1315                 tempdouble = old_h / height;
1316 
1317             }
1318 
1319      
1320 
1321             if (old_w >= width || old_h >= height) { // 如果文件小于锁略图的尺寸则复制即可
1322 
1323                 new_w = Math.round(old_w / tempdouble);
1324 
1325                 new_h = Math.round(old_h / tempdouble);// 计算新图长宽
1326 
1327                 while (new_w > width && new_h > height) {
1328 
1329                     if (new_w > width) {
1330 
1331                         tempdouble = new_w / width;
1332 
1333                         new_w = Math.round(new_w / tempdouble);
1334 
1335                         new_h = Math.round(new_h / tempdouble);
1336 
1337                     }
1338 
1339                     if (new_h > height) {
1340 
1341                         tempdouble = new_h / height;
1342 
1343                         new_w = Math.round(new_w / tempdouble);
1344 
1345                         new_h = Math.round(new_h / tempdouble);
1346 
1347                     }
1348 
1349                 }
1350 
1351                 BufferedImage tag = new BufferedImage(new_w, new_h, BufferedImage.TYPE_INT_RGB);
1352 
1353                 tag.getGraphics().drawImage(src, 0, 0, new_w, new_h, null); // 绘制缩小后的图
1354 
1355                 FileOutputStream newimage = new FileOutputStream(file); // 输出到文件流
1356 
1357                 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
1358 
1359                 JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(tag);
1360 
1361                 param.setQuality((float) (100 / 100.0), true);// 设置图片质量,100最大,默认70
1362 
1363                 encoder.encode(tag, param);
1364 
1365                 encoder.encode(tag); // 将JPEG编码
1366 
1367                 newimage.close();
1368 
1369             }
1370 
1371         }*/
1372 
1373         
1374 
1375         public static void main(String[] args) throws Exception {
1376 
1377             String path = "F:/Example Exercise/ExtJS/MultiUpload/WebRoot/upload";
1378 
1379             //System.out.println(mkDir(path));
1380 
1381             System.out.println(getDoPath(path));
1382 
1383             System.out.println(getBracketFileName("a.txt", getDoPath(path)));
1384 
1385             System.out.println(getNumberName("a.jpg"));
1386 
1387             System.out.println(getNumberName("a.jpg"));
1388 
1389             System.out.println(getNewFileName("a", "bbb", "txt"));
1390 
1391             System.out.println(getRandomName("a.htm"));
1392 
1393             System.out.println(getSuffix("a.jpg"));
1394 
1395             System.out.println(getType("a.jpg"));
1396 
1397             //List<File> list = getFiles(path);
1398 
1399             //List<File> list = getFiles(path, "xml");
1400 
1401             //List<File> list = getFiles(path, typeImages);
1402 
1403             //List<File> list = getFiles(path, typeOthers);
1404 
1405             //List<File> list = getFiles(path, typeImages, false);
1406 
1407             /*List<File> list = getFiles(path, "GIF", true);
1408 
1409             for (File f : list) {
1410 
1411                 System.out.println("Name:" + f.getName());
1412 
1413                 System.out.println(f.getAbsolutePath() + "#" + f.getPath());
1414 
1415             }*/
1416 
1417             System.out.println(removeFile("a.txt", path));
1418 
1419             System.out.println("#############################################");
1420 
1421             System.out.println("###" + validTypeByName("a", new String[]{"*"}));
1422 
1423             System.out.println("###" + validTypeByName("a.JPG", typeImages));
1424 
1425             System.out.println("###" + validTypeByName("a.JPG", typeImages, false));
1426 
1427             System.out.println(validTypeByPostfix("cals", new String[]{"*", "b"}));
1428 
1429             System.out.println(validTypeByPostfix("b", new String[]{"cal", "B"}, false));
1430 
1431         }
1432 
1433     }

版权所有,转载请注明出处 本文出自: http://www.cnblogs.com/hoojo/archive/2012/02/10/2345234.html

转载于:https://www.cnblogs.com/wangrs/archive/2012/04/30/2476855.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/462049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

静态库和动态库的区别

库是写好的&#xff0c;现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说&#xff0c;库是一种可执行代码的二进制形式&#xff0c;可…

257. Binary Tree Paths

1、问题描述 2、代码&#xff08;非本人所写&#xff0c;十分精彩的C代码&#xff09; int pathsNum(struct TreeNode* root); void Traverse(struct TreeNode* root, char** array, char* spre, int* pindex); char* stringAdd(char* s, int val);char** binaryTreePaths(stru…

HDOJ树形DP专题之Centroid

题目链接 这题跟Balance Act那题差不多&#xff0c;求图的质点。我直接将那题改了一下提交&#xff0c;结果PE了一次&#xff0c;又WA了一次&#xff0c;最后发现是单case&#xff0c;多case的提交为什么WA呢&#xff1f; View Code 1 #include <stdio.h>2 #include <…

LAMP平台--部署Discuz论坛

环境&#xff1a;为了推广公司的产品并为客户服务提供一个交流平台&#xff0c;公司购买了一套Discuz论坛系统&#xff0c;要求安装到现有的LAMP服务器中&#xff0c;并简单划分论坛版块。需求&#xff1a;部署论坛服务器&#xff0c;安装Discuz论坛系统添加新区和版块产品发布…

ACM中java快速入门

2019独角兽企业重金招聘Python工程师标准>>> ACM中java快速入门 附&#xff1a; Chapter I. Java的优缺点各种书上都有&#xff0c;这里只说说用Java做ACM-ICPC的特点&#xff1a; (1) 最明显的好处是&#xff0c;学会Java&#xff0c;可以参加Java Challenge …

OV7725的帧率和PCLK寄存器设置

一、OV7725的PCLK的改变和以下几个寄存器有关&#xff1a; 1&#xff1a;OX0D&#xff08;COM4&#xff09;&#xff1b; ------------------------------------------------------------------------------------------------------------------ 0X0D COM4 41 …

演示:两台交换机成环后的STP计算原则

演示&#xff1a;两台交换机成环后的STP计算原则演示目标&#xff1a;理解两台交换机成环后&#xff0c;STP的计算原则&#xff0c;重点理解PID的作用。演示环境&#xff1a;如下图7.49所示。演示背景&#xff1a;上图所示的环境为两台交换机的生成树环境&#xff0c;其中S1有较…

引水入城

最近在搞提高组的题,这是某天早上给的T1 T1最难还行 原题目 最近考试考多了就是见题打暴力,打搜索, 然而这题真是搜索, 但是并不能只搜索,会T,没亲测,但一定有效 这并不是考试题,所以看看标签(理直气壮的理由) 是BFS啊... 那就用DFS吧 这里的DP一开始看没有什么感觉,但是做着做…

程序员必知8大排序3大查找(一)

每天都在叫嚣自己会什么技术&#xff0c;什么框架&#xff0c;可否意识到你每天都在被这些新名词、新技术所迷惑&#xff0c;.NET、XML等等技术固然诱人&#xff0c;可是如果自己的基础不扎实&#xff0c;就像是在云里雾里行走一样&#xff0c;只能看到眼前&#xff0c;不能看到…

最详细的U-BOOT源码分析及移植

本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上&#xff1a; 1、u-boot工程的总体结构 2、u-boot的流程、主要的数据结构、内存分配。 3、u-boot的重要细节&#xff0c;主要分析流程中各函数的功能。 4、基于FS2410板子的u-boot移植。实现了NOR Flash和NAND Flash启动,…

织梦教程

/************************************************************************************************************************************************** 织梦 文件说明 很详细 http://bbs.admin5.com/thread-1952932-1-1.html /****************************************…

TinyXML:一个优秀的C++ XML解析器

2019独角兽企业重金招聘Python工程师标准>>> 读取和设置xml配置文件是最常用的操作&#xff0c;试用了几个C的XML解析器&#xff0c;个人感觉TinyXML是使用起来最舒服的&#xff0c;因为它的API接口和Java的十分类似&#xff0c;面向对象性很好。 TinyXML是一个开源…

《C++标准程序库》学习笔记5 — 第七章

1.(P252) 迭代器的分类及其能力&#xff1a;input迭代器只能读取元素一次。如果复制input迭代器&#xff0c;并使原迭代器和新产生副本都向前读取&#xff0c;可能会遍历到不同的值。output迭代器类似。 2.(P258) C不允许修改任何基本类型&#xff08;包括指针&#xff09;的暂…

Android无线调试——抛开USB数据线

开发Android的朋友都知道&#xff0c;真机调试需要把手机与PC相连&#xff0c;然后把应用部署到真机上进行安装和调试。长长的USB线显得很麻烦&#xff0c;而且如果需要USB接口与其他设备连接的话显得很不方便。今天介绍一种不通过USB线就可以进行真机调试的方法。首先让手机与…

VS2017动态链接库(.dll)的生成与使用

这里以VS2017为例子&#xff0c;讲解一下动态链接库&#xff08;.dll&#xff09;的生成与使用。 一、动态链接库&#xff08;.dll&#xff09;的生成 1、打开&#xff1a;“文件”-“新建”-“项目” 2、打开&#xff1a;“已安装”-“模板”-“Visual C”-“Win32”-“Win3…

Mysql安装后在服务里找不到和服务启动不起来的解决方法

一&#xff0c;在安装完Mysql数据库后&#xff0c;发现在控制面板->管理->服务中找不到Mysql的服务启动 解决方法如下&#xff1a;开启命令行&#xff0c;按照如下步骤即可&#xff1b; 1.进入到mysql的安装包&#xff0c;在bin里执行&#xff1a;mysqld.exe -install …

弹出框

<!DOCTYPE html> <html xmlns"http://www.w3.org/1999/xhtml"> <head> <meta http-equiv"Content-Type" content"text/html; charsetgb2312" /> <title>AlertBox 弹出层&#xff08;信息提示框&#xff09;效果&l…

easyUI 绑定右键菜单在数据行上显示

easyUI的显示数据的div都有一个样式,如下图 所有的表格都有一个datagrid-cell的样式那么这个时候我们就可以利用jquery来做时间的绑定了 下面是主要的js代码: /*绑定右键*/$(".datagrid-cell").live(contextmenu,function(e){//显示快捷菜单$(#mm).menu(show, {left:…

web前端细解cookie那些事

web前端细解cookie那些事&#xff0c;在互联网时代&#xff0c;IT行业飞速发展&#xff0c;带动了web前端开发行业的兴趣。由于行业新兴起时间不久&#xff0c;专业人才缺乏&#xff0c;薪资待遇较高&#xff0c;已成为众多IT学子选择就业的首选&#xff0c;今天就为分享一些有…

一个C程序的编译过程(Linux环境下Gcc)

一 以下是C程序一般的编译过程&#xff1a; 从图中看到&#xff1a; 将编写的一个c程序&#xff08;源代码 &#xff09;转换成可以在硬件上运行的程序&#xff08;可执行代码 &#xff09;&#xff0c;需要进行编译阶段 和链接这两个阶段。 其中&#xff0c; 1. 编译阶段先通…