分享一个文件的工具类
1 package com.cn.shupu.util; 2 3 import java.io.BufferedReader; 4 import java.io.File; 5 import java.io.FileInputStream; 6 import java.io.FileNotFoundException; 7 import java.io.FileOutputStream; 8 import java.io.FileWriter; 9 import java.io.IOException; 10 import java.io.InputStream; 11 import java.io.InputStreamReader; 12 import java.io.OutputStream; 13 import java.io.RandomAccessFile; 14 import java.nio.ByteBuffer; 15 import java.nio.channels.FileChannel; 16 import java.text.DecimalFormat; 17 import java.text.ParseException; 18 import java.text.SimpleDateFormat; 19 import java.util.ArrayList; 20 import java.util.Arrays; 21 import java.util.Collections; 22 import java.util.Date; 23 import java.util.HashMap; 24 import java.util.List; 25 import java.util.Map; 26 import java.util.Random; 27 28 import org.springframework.web.multipart.MultipartFile; 29 import org.springframework.web.multipart.MultipartHttpServletRequest; 30 import org.springframework.web.multipart.commons.CommonsMultipartFile; 31 32 import net.sf.json.JSONObject; 33 34 /** 35 * 文件工具类 涵盖绝大多数的文件操作 36 * 38 * @version 创建时间:2016年11月14日 下午3:03:21 39 */ 40 public class FileTools { 41 public FileTools() { 42 43 } 44 45 /** 46 * formatPath 转义文件目录 47 * 48 * @param path 49 * @return 50 */ 51 public static String formatPath(String path) { 52 return path.replaceAll("\\\\", "/"); 53 } 54 55 /** 56 * combainPath文件路径合并 57 * 58 * @param eins 59 * @param zwei 60 * @return 61 */ 62 private static String combainPath(String eins, String zwei) { 63 String dori = ""; 64 eins = null == eins ? "" : formatPath(eins); 65 zwei = null == zwei ? "" : formatPath(zwei); 66 if (!eins.endsWith("/") && zwei.indexOf("/") != 0) { 67 dori = eins + "/" + zwei; 68 } else { 69 dori = (eins + zwei).replaceAll("//", "/"); 70 } 71 return dori; 72 } 73 74 /** 75 * list2Array 列表转换数组 76 * 77 * @param list 78 * @return 79 */ 80 private static String[] list2Array(List list) { 81 String array[] = (String[]) list.toArray(new String[list.size()]); 82 return array; 83 } 84 85 /** 86 * cp 复制文件 87 * 88 * @param source 89 * @param destination 90 * @param loop 91 * @return 92 */ 93 public static List<File> cp(String source, String destination, boolean loop) { 94 List<File> list = new ArrayList(); 95 try { 96 File srcFile = new File(source); 97 File desFile = new File(destination); 98 list.addAll(cp(srcFile, desFile, loop)); 99 } catch (Exception ex) { 100 ex.printStackTrace(); 101 } 102 return list; 103 } 104 105 /** 106 * cp 复制文件 107 * 108 * @param source 109 * @param destination 110 * @param loop 111 * @return 112 */ 113 public static List<File> cp(File source, File destination, boolean loop) { 114 List<File> list = new ArrayList(); 115 try { 116 if (!source.exists() || source.isDirectory()) { 117 throw new FileNotFoundException(); 118 } 119 list.add(cp(source, destination)); 120 if (loop) { 121 String[] subFile = source.list(); 122 for (String subPath : subFile) { 123 String src = combainPath(source.getPath(), subPath);// 子文件原文件路径 124 String des = combainPath(destination.getPath(), subPath);// 子文件目标路径 125 File subfile = new File(src); 126 if (subfile.isFile()) { 127 list.add(cp(src, des)); 128 } else if (subfile.isDirectory() && loop) { 129 list.addAll(cp(src, des, loop)); 130 } 131 } 132 } 133 } catch (Exception ex) { 134 ex.printStackTrace(); 135 } 136 return list; 137 } 138 139 /** 140 * cp 单文件复制文件 141 * 142 * @param source 143 * @param destination 144 * @return 145 */ 146 public static File cp(String source, String destination) { 147 File desFile = null; 148 try { 149 File srcFile = new File(source); 150 desFile = new File(destination); 151 desFile = cp(srcFile, desFile); 152 } catch (Exception ex) { 153 ex.printStackTrace(); 154 } 155 return desFile; 156 } 157 158 /** 159 * cp 单文件复制文件 160 * 161 * @param source 162 * @param destination 163 * @return 164 */ 165 public static File cp(File source, File destination) { 166 FileInputStream in = null; 167 FileOutputStream out = null; 168 FileChannel inc = null; 169 FileChannel outc = null; 170 try { 171 if (!source.exists() || source.isDirectory()) { 172 throw new FileNotFoundException(); 173 } 174 if (source.getPath().equals(destination.getPath())) { 175 return source; 176 } 177 long allbytes = du(source, false); 178 if (!destination.exists()) { 179 destination.createNewFile(); 180 } 181 in = new FileInputStream(source.getPath()); 182 out = new FileOutputStream(destination); 183 inc = in.getChannel(); 184 outc = out.getChannel(); 185 ByteBuffer byteBuffer = null; 186 long length = 2097152;// 基本大小,默认2M 187 long _2M = 2097152; 188 while (inc.position() < inc.size()) { 189 if (allbytes > (64 * length)) {// 如果文件大小大于128M 缓存改为64M 190 length = 32 * _2M; 191 } else if (allbytes > (32 * length)) {// 如果文件大小大于64M 缓存改为32M 192 length = 16 * _2M; 193 } else if (allbytes > (16 * length)) {// 如果文件大小大于32M 缓存改为16M 194 length = 8 * _2M; 195 } else if (allbytes > (8 * length)) {// 如果文件大小大于16M 缓存改为8M 196 length = 4 * _2M; 197 } else if (allbytes > (4 * length)) {// 如果文件大小大于8M 缓存改为4M 198 length = 2 * _2M; 199 } else if (allbytes > (2 * length)) {// 如果文件大小大于4M 缓存改为2M 200 length = _2M; 201 } else if (allbytes > (length)) {// 如果文件大小大于2M 缓存改为1M 202 length = _2M / 2; 203 } else if (allbytes < length) {// 如果文件小于基本大小,直接输出 204 length = allbytes; 205 } 206 allbytes = inc.size() - inc.position(); 207 byteBuffer = ByteBuffer.allocateDirect((int) length); 208 inc.read(byteBuffer); 209 byteBuffer.flip(); 210 outc.write(byteBuffer); 211 outc.force(false); 212 } 213 } catch (Exception ex) { 214 ex.printStackTrace(); 215 } finally { 216 try { 217 if (null != inc) { 218 inc.close(); 219 } 220 if (null != outc) { 221 outc.close(); 222 } 223 if (null != in) { 224 in.close(); 225 } 226 if (null != out) { 227 out.close(); 228 } 229 } catch (Exception ex) { 230 ex.printStackTrace(); 231 } 232 } 233 return destination; 234 } 235 236 /** 237 * rename 文件重命名 238 * 239 * @param filePath 240 * @param from 241 * @param to 242 * @return 243 */ 244 public static File rename(String filePath, String from, String to) { 245 File newFile = null; 246 try { 247 File oldFile = new File(combainPath(filePath, from)); 248 newFile = new File(combainPath(filePath, to)); 249 rename(newFile, oldFile); 250 } catch (Exception ex) { 251 ex.printStackTrace(); 252 } 253 return newFile; 254 } 255 256 /** 257 * rename 文件重命名 258 * 259 * @param to 260 * @param from 261 * @return 262 */ 263 public static File rename(File from, File to) { 264 try { 265 String newPath = to.getPath(); 266 String oldPath = from.getPath(); 267 if (!oldPath.equals(newPath)) { 268 if (!to.exists()) { 269 from.renameTo(to); 270 } 271 } 272 } catch (Exception ex) { 273 ex.printStackTrace(); 274 } 275 return to; 276 } 277 278 /** 279 * mv 移动文件 280 * 281 * @param fileName 282 * @param source 283 * @param destination 284 * @param cover 285 */ 286 public static void mv(String fileName, String source, String destination, boolean cover) { 287 try { 288 if (!source.equals(destination)) { 289 File oldFile = new File(combainPath(source, fileName)); 290 File newFile = new File(combainPath(destination, fileName)); 291 mv(oldFile, newFile, cover); 292 } 293 } catch (Exception ex) { 294 ex.printStackTrace(); 295 } 296 } 297 298 /** 299 * mv 移动文件 300 * 301 * @param source 302 * @param destination 303 * @param cover 304 */ 305 public static void mv(String source, String destination, boolean cover) { 306 try { 307 308 if (!new File(destination).exists()) 309 new File(destination).mkdirs(); 310 311 if (!source.equals(destination)) { 312 File oldFile = new File(source); 313 File newFile = new File(destination); 314 mv(oldFile, newFile, cover); 315 } 316 } catch (Exception ex) { 317 ex.printStackTrace(); 318 } 319 } 320 321 /** 322 * mv 移动文件 323 * 324 * @param source 325 * @param destination 326 * @param cover 327 */ 328 public static void mv(File source, File destination, boolean cover) { 329 try { 330 if (!source.exists()) { 331 throw new FileNotFoundException(); 332 } 333 StringBuilder fileName = new StringBuilder(source.getName()); 334 if (!cover && source.getPath().equals(destination.getPath())) { 335 336 if (fileName.indexOf(".") > 0) { 337 338 fileName.insert(fileName.lastIndexOf("."), "_副本"); 339 340 } else { 341 fileName.append("_副本"); 342 } 343 cp(source, new File(combainPath(source.getParent(), fileName.toString()))); 344 } else { 345 source.renameTo(destination); 346 } 347 } catch (Exception ex) { 348 ex.printStackTrace(); 349 } 350 } 351 352 /** 353 * extensions 获取文件扩展名信息 354 * 355 * @param filePath 356 * @param fileName 357 * @return 358 */ 359 private static String[] extensions(String filePath, String fileName) { 360 String[] extension = {}; 361 try { 362 String fullPath = combainPath(filePath, fileName); 363 File file = new File(fullPath); 364 extensions(file); 365 } catch (Exception ex) { 366 ex.printStackTrace(); 367 } 368 return extension; 369 } 370 371 /** 372 * extensions 获取文件扩展名信息 373 * 374 * @param fullPath 375 * @return 376 */ 377 private static String[] extensions(String fullPath) { 378 String[] extension = {}; 379 try { 380 File file = new File(fullPath); 381 extensions(file); 382 } catch (Exception ex) { 383 ex.printStackTrace(); 384 } 385 return extension; 386 } 387 388 /** 389 * extensions 获取文件扩展名信息 390 * 391 * @param file 392 * @return 393 */ 394 private static String[] extensions(File file) { 395 String[] extension = {}; 396 try { 397 if (file.isFile()) { 398 String fileName = file.getName(); 399 if (fileName.lastIndexOf(".") >= 0) { 400 int lastIndex = fileName.lastIndexOf("."); 401 extension[0] = String.valueOf(lastIndex);// 扩展名的“.”的索引 402 extension[1] = fileName.substring(lastIndex + 1);// 扩展名 403 extension[2] = fileName.substring(0, lastIndex);// 文件名 404 } 405 } 406 } catch (Exception ex) { 407 ex.printStackTrace(); 408 } 409 return extension; 410 } 411 412 /** 413 * ls 遍历文件 414 * 415 * @param filePath 416 * @param loop 417 * @return 418 */ 419 public static List<File> ls(String filePath, boolean loop) { 420 List<File> list = new ArrayList(); 421 try { 422 File file = new File(filePath); 423 list.addAll(ls(file, loop)); 424 } catch (Exception ex) { 425 ex.printStackTrace(); 426 } 427 return list; 428 } 429 430 /** 431 * ls 遍历文件 432 * 433 * @param file 434 * @param loop 435 * @return 436 */ 437 public static List<File> ls(File file, boolean loop) { 438 List<File> list = new ArrayList(); 439 try { 440 list.add(file); 441 if (!file.isDirectory()) { 442 list.add(file); 443 } else if (file.isDirectory()) { 444 File[] subList = file.listFiles(); 445 subList = filesSort(subList, true); 446 for (File subFile : subList) { 447 if (subFile.isDirectory() && loop) { 448 list.addAll(ls(subFile.getPath(), loop)); 449 } else { 450 list.add(subFile); 451 } 452 } 453 } 454 } catch (Exception ex) { 455 ex.printStackTrace(); 456 } 457 return list; 458 } 459 460 /** 461 * ls 遍历文件 462 * 463 * @param filePath 464 * @param loop 465 * @return 466 */ 467 public static List<File> getFiles(String filePath, boolean loop) { 468 List<File> list = new ArrayList(); 469 470 try { 471 File file = new File(filePath); 472 473 list.addAll(getFiles(file, loop)); 474 475 } catch (Exception ex) { 476 ex.printStackTrace(); 477 } 478 return list; 479 } 480 481 /** 482 * ls 遍历文件 483 * 484 * @param file 485 * @param loop 486 * @return 487 */ 488 public static List<File> getFiles(File file, boolean loop) { 489 List<File> list = new ArrayList(); 490 try { 491 // list.add(file); 492 if (!file.isDirectory()) { 493 list.add(file); 494 } else if (file.isDirectory()) { 495 496 File[] subList = file.listFiles(); 497 subList = filesSort(subList, true); 498 499 for (File subFile : subList) { 500 501 if (subFile.isDirectory() && loop) { 502 503 list.addAll(getFiles(subFile.getPath(), loop)); 504 505 } else { 506 507 list.add(subFile); 508 509 } 510 511 } 512 513 } 514 } catch (Exception ex) { 515 ex.printStackTrace(); 516 } 517 return list; 518 } 519 520 /** 521 * filesSort 文件排序(默认升序) 522 * 523 * @param parentPath 524 * @param subList 525 * @return 526 */ 527 private static File[] filesSort(File[] inFiles, boolean asc) { 528 529 List<String> files = new ArrayList(); 530 531 List<String> dirs = new ArrayList(); 532 533 for (File subFile : inFiles) { 534 if (subFile.isDirectory()) { 535 dirs.add(subFile.getPath()); 536 } else if (subFile.isFile()) { 537 files.add(subFile.getPath()); 538 } 539 } 540 541 String[] fileArray = {}; 542 543 if (files.size() > 0) { 544 545 fileArray = list2Array(files); 546 547 Arrays.sort(fileArray); 548 549 if (!asc) { 550 Arrays.sort(fileArray, Collections.reverseOrder()); 551 } 552 553 } 554 String[] dirArray = {}; 555 if (dirs.size() > 0) { 556 dirArray = list2Array(dirs); 557 Arrays.sort(dirArray); 558 if (!asc) { 559 Arrays.sort(dirArray, Collections.reverseOrder()); 560 } 561 } 562 return concat2FileArray(fileArray, dirArray); 563 } 564 565 /** 566 * concat2FileArray 合并文件数组 567 * 568 * @param old1 569 * @param old2 570 * @return 571 */ 572 private static File[] concat2FileArray(String[] old1, String[] old2) { 573 File[] newArray = new File[old1.length + old2.length]; 574 for (int i = 0, n = old1.length; i < n; i++) { 575 newArray[i] = new File(old1[i]); 576 } 577 for (int i = 0, j = old1.length, n = (old1.length + old2.length); j < n; i++, j++) { 578 newArray[j] = new File(old2[i]); 579 } 580 return newArray; 581 } 582 583 /** 584 * read 读取文本文件 585 * 586 * @param filePath 587 * @param fileName 588 * @param charset 589 * @return 590 */ 591 public static StringBuilder read(String filePath, String fileName, String charset) { 592 StringBuilder sb = new StringBuilder(); 593 try { 594 String fullPath = combainPath(filePath, fileName); 595 File file = new File(fullPath); 596 sb.append(FileTools.tail(file, false, 0, charset)); 597 } catch (Exception ex) { 598 ex.printStackTrace(); 599 } 600 return sb; 601 } 602 603 /** 604 * read 读取文本文件 605 * 606 * @param fullPath 607 * @param charset 608 * @return 609 */ 610 public static StringBuilder read(String fullPath, String charset) { 611 StringBuilder sb = new StringBuilder(); 612 try { 613 File file = new File(fullPath); 614 sb.append(FileTools.tail(file, false, 0, charset)); 615 } catch (Exception ex) { 616 ex.printStackTrace(); 617 } 618 return sb; 619 } 620 621 /** 622 * read 读取文本文件 623 * 624 * @param file 625 * @param charset 626 * @return 627 */ 628 public static StringBuilder read(File file, String charset) { 629 StringBuilder sb = new StringBuilder(); 630 try { 631 sb.append(FileTools.tail(file, false, 0, charset)); 632 } catch (Exception ex) { 633 ex.printStackTrace(); 634 } 635 return sb; 636 } 637 638 /** 639 * find 读取文本文件指定行 640 * 641 * @param filePath 642 * @param fileName 643 * @param line 644 * @param charset 645 * @return 646 */ 647 public static StringBuilder find(String filePath, String fileName, int line, String charset) { 648 StringBuilder sb = new StringBuilder(); 649 try { 650 String fullPath = combainPath(filePath, fileName); 651 File file = new File(fullPath); 652 sb.append(FileTools.tail(file, true, line, charset)); 653 } catch (Exception ex) { 654 ex.printStackTrace(); 655 } 656 return sb; 657 } 658 659 /** 660 * find 读取文本文件指定行 661 * 662 * @param fullPath 663 * @param line 664 * @param charset 665 * @return 666 */ 667 public static StringBuilder find(String fullPath, int line, String charset) { 668 StringBuilder sb = new StringBuilder(); 669 try { 670 File file = new File(fullPath); 671 sb.append(FileTools.tail(file, true, line, charset)); 672 } catch (Exception ex) { 673 ex.printStackTrace(); 674 } 675 return sb; 676 } 677 678 /** 679 * find 读取文本文件指定行 680 * 681 * @param file 682 * @param line 683 * @param charset 684 * @return 685 */ 686 public static StringBuilder find(File file, int line, String charset) { 687 StringBuilder sb = new StringBuilder(); 688 try { 689 sb.append(FileTools.tail(file, true, line, charset)); 690 } catch (Exception ex) { 691 ex.printStackTrace(); 692 } 693 return sb; 694 } 695 696 /** 697 * tail 读取文本文件 698 * 699 * @param filePath 700 * @param fileName 701 * @param charset 702 * @param find 703 * @param line 704 * @return 705 */ 706 public static StringBuilder tail(String filePath, String fileName, boolean find, int line, String charset) { 707 StringBuilder sb = new StringBuilder(); 708 try { 709 String fullPath = combainPath(filePath, fileName); 710 File file = new File(fullPath); 711 sb.append(FileTools.tail(file, find, line, charset)); 712 } catch (Exception ex) { 713 ex.printStackTrace(); 714 } 715 return sb; 716 } 717 718 /** 719 * tail 读取文本文件 720 * 721 * @param fullPath 722 * @param charset 723 * @param find 724 * @param line 725 * @return 726 */ 727 public static StringBuilder tail(String fullPath, boolean find, int line, String charset) { 728 StringBuilder sb = new StringBuilder(); 729 try { 730 File file = new File(fullPath); 731 sb.append(FileTools.tail(file, find, line, charset)); 732 } catch (Exception ex) { 733 ex.printStackTrace(); 734 } 735 return sb; 736 } 737 738 /** 739 * tail 读取文本文件 740 * 741 * @param file 742 * @param charset 743 * @param find 744 * @param line 745 * @return 746 */ 747 public static StringBuilder tail(File file, boolean find, int line, String charset) { 748 StringBuilder sb = new StringBuilder(); 749 BufferedReader bufferReader = null; 750 if (null == charset || "".equals(charset)) { 751 charset = "UTF-8"; 752 } 753 try { 754 if (!file.exists() || file.isDirectory()) { 755 throw new FileNotFoundException(); 756 } 757 String fullPath = file.getPath(); 758 bufferReader = new BufferedReader(new InputStreamReader(new FileInputStream(fullPath), charset)); 759 String temp; 760 for (int i = 0; (temp = bufferReader.readLine()) != null; i++) { 761 if (!find || line == i) { 762 sb.append(temp); 763 } 764 } 765 } catch (Exception ex) { 766 ex.printStackTrace(); 767 } finally { 768 if (null != bufferReader) { 769 try { 770 bufferReader.close(); 771 } catch (IOException ex) { 772 ex.printStackTrace(); 773 } 774 } 775 } 776 return sb; 777 } 778 779 /** 780 * sed 读取文本文件 781 * 782 * @param filePath 783 * @param fileName 784 * @param charset 785 * @return 786 */ 787 public static List<String> sed(String filePath, String fileName, String charset) { 788 List<String> list = new ArrayList(); 789 try { 790 String fullPath = combainPath(filePath, fileName); 791 File file = new File(fullPath); 792 list.addAll(FileTools.sed(file, charset)); 793 } catch (Exception ex) { 794 ex.printStackTrace(); 795 } 796 return list; 797 } 798 799 /** 800 * sed 读取文本文件 801 * 802 * @param fullPath 803 * @param charset 804 * @return 805 */ 806 public static List<String> sed(String fullPath, String charset) { 807 List<String> list = new ArrayList(); 808 try { 809 File file = new File(fullPath); 810 list.addAll(FileTools.sed(file, charset)); 811 } catch (Exception ex) { 812 ex.printStackTrace(); 813 } 814 return list; 815 } 816 817 /** 818 * sed 读取文本文件 819 * 820 * @param file 821 * @param charset 822 * @return 823 */ 824 public static List<String> sed(File file, String charset) { 825 List<String> list = new ArrayList(); 826 BufferedReader bufferReader = null; 827 if (null == charset || "".equals(charset)) { 828 charset = "UTF-8"; 829 } 830 try { 831 if (!file.exists() || file.isDirectory()) { 832 throw new FileNotFoundException(); 833 } 834 String fullPath = file.getPath(); 835 bufferReader = new BufferedReader(new InputStreamReader(new FileInputStream(fullPath), charset)); 836 String temp; 837 for (int i = 0; (temp = bufferReader.readLine()) != null; i++) { 838 list.add(temp); 839 } 840 } catch (Exception ex) { 841 ex.printStackTrace(); 842 } finally { 843 if (null != bufferReader) { 844 try { 845 bufferReader.close(); 846 } catch (IOException ex) { 847 ex.printStackTrace(); 848 } 849 } 850 } 851 return list; 852 } 853 854 /** 855 * cat 读取文本文件 856 * 857 * @param filePath 858 * @param fileName 859 * @return 860 */ 861 public static byte[] cat(String filePath, String fileName) { 862 byte[] output = {}; 863 try { 864 String fullPath = combainPath(filePath, fileName); 865 File file = new File(fullPath); 866 output = FileTools.cat(file); 867 } catch (Exception ex) { 868 ex.printStackTrace(); 869 } 870 return output; 871 } 872 873 /** 874 * cat 读取文本文件 875 * 876 * @param fullPath 877 * @return 878 */ 879 public static byte[] cat(String fullPath) { 880 byte[] output = {}; 881 try { 882 File file = new File(fullPath); 883 output = FileTools.cat(file); 884 } catch (Exception ex) { 885 ex.printStackTrace(); 886 } 887 return output; 888 } 889 890 /** 891 * cat 读取文本文件 892 * 893 * @param file 894 * @return 895 */ 896 public static byte[] cat(File file) { 897 InputStream in = null; 898 byte[] output = {}; 899 try { 900 if (!file.exists() || file.isDirectory()) { 901 throw new FileNotFoundException(); 902 } 903 String fullPath = file.getPath(); 904 long length = du(file, false); 905 long _2M = 2097152; 906 byte[] bytes = new byte[(int) length]; 907 in = new FileInputStream(fullPath); 908 for (int count = 0; count != -1;) { 909 if (length > 16 * _2M) { 910 length = 4 * _2M; 911 } else if (length > 8 * _2M) { 912 length = 2 * _2M; 913 } else if (length > 4 * _2M) { 914 length = _2M; 915 } else if (length > 2 * _2M) { 916 length = _2M / 2; 917 } else if (length > _2M) { 918 length = _2M / 4; 919 } else { 920 length = 4096; 921 } 922 bytes = new byte[(int) length]; 923 count = in.read(bytes); 924 output = concatArray(bytes, output); 925 length = in.available(); 926 } 927 } catch (Exception ex) { 928 ex.printStackTrace(); 929 } finally { 930 if (null != in) { 931 try { 932 in.close(); 933 } catch (Exception ex) { 934 ex.printStackTrace(); 935 } 936 } 937 } 938 return output; 939 } 940 941 /** 942 * 合并数组 943 * 944 * @param old1 945 * @param old2 946 * @return 947 */ 948 private static byte[] concatArray(byte[] old1, byte[] old2) { 949 byte[] newArray = new byte[old1.length + old2.length]; 950 System.arraycopy(old1, 0, newArray, 0, old1.length); 951 System.arraycopy(old2, 0, newArray, old1.length, old2.length); 952 return newArray; 953 } 954 955 /** 956 * dd 写入文件fullPath内容content 957 * 958 * @param filePath 959 * @param fileName 960 * @param content 961 * @param isAppend 962 */ 963 public static void dd(String filePath, String fileName, byte[] content, boolean isAppend) { 964 try { 965 String fullPath = combainPath(filePath, fileName); 966 File file = new File(fullPath); 967 FileTools.dd(file, content, isAppend); 968 } catch (Exception ex) { 969 ex.printStackTrace(); 970 } 971 } 972 973 /** 974 * dd 写入文件fullPath内容content 975 * 976 * @param fullPath 977 * @param content 978 * @param isAppend 979 */ 980 public static void dd(String fullPath, byte[] content, boolean isAppend) { 981 try { 982 File file = new File(fullPath); 983 FileTools.dd(file, content, isAppend); 984 } catch (Exception ex) { 985 ex.printStackTrace(); 986 } 987 } 988 989 /** 990 * dd 写入文件fullPath内容content 991 * 992 * @param file 993 * @param content 994 * @param isAppend 995 */ 996 public static void dd(File file, byte[] content, boolean isAppend) { 997 FileOutputStream fileOutputStream = null; 998 try { 999 if (!file.exists()) { 1000 file.createNewFile(); 1001 } 1002 fileOutputStream = new FileOutputStream(file, isAppend); 1003 fileOutputStream.write(content); 1004 } catch (Exception ex) { 1005 ex.printStackTrace(); 1006 } finally { 1007 try { 1008 if (null != fileOutputStream) { 1009 fileOutputStream.close(); 1010 } 1011 } catch (IOException ex) { 1012 ex.printStackTrace(); 1013 } 1014 } 1015 } 1016 1017 /** 1018 * write 写文件内容content到文件fullPath 1019 * 1020 * @param filePath 1021 * @param fileName 1022 * @param content 1023 */ 1024 public static void write(String filePath, String fileName, String content) { 1025 try { 1026 String fullPath = combainPath(filePath, fileName); 1027 File file = new File(fullPath); 1028 FileTools.write(file, content, true); 1029 } catch (Exception ex) { 1030 ex.printStackTrace(); 1031 } 1032 } 1033 1034 /** 1035 * write 写文件内容content到文件fullPath 1036 * 1037 * @param fullPath 1038 * @param content 1039 */ 1040 public static void write(String fullPath, String content) { 1041 try { 1042 File file = new File(fullPath); 1043 FileTools.write(file, content, true); 1044 } catch (Exception ex) { 1045 ex.printStackTrace(); 1046 } 1047 } 1048 1049 /** 1050 * write 写文件内容content到文件fullPath 1051 * 1052 * @param file 1053 * @param content 1054 */ 1055 public static void write(File file, String content) { 1056 try { 1057 FileTools.write(file, content, true); 1058 } catch (Exception ex) { 1059 ex.printStackTrace(); 1060 } 1061 } 1062 1063 /** 1064 * write 写(追加)文件内容content到文件fullPath 1065 * 1066 * @param filePath 1067 * @param fileName 1068 * @param content 1069 * @param isAppend 1070 */ 1071 public static void write(String filePath, String fileName, String content, boolean isAppend) { 1072 try { 1073 String fullPath = combainPath(filePath, fileName); 1074 File file = new File(fullPath); 1075 FileTools.write(file, content, isAppend); 1076 } catch (Exception ex) { 1077 ex.printStackTrace(); 1078 } 1079 } 1080 1081 /** 1082 * write 写(追加)文件内容content到文件fullPath 1083 * 1084 * @param fullPath 1085 * @param content 1086 * @param isAppend 1087 */ 1088 public static void write(String fullPath, String content, boolean isAppend) { 1089 try { 1090 File file = new File(fullPath); 1091 FileTools.write(file, content, isAppend); 1092 } catch (Exception ex) { 1093 ex.printStackTrace(); 1094 } 1095 } 1096 1097 /** 1098 * write 写(追加)文件内容content到文件fullPath 1099 * 1100 * @param file 1101 * @param content 1102 * @param isAppend 1103 */ 1104 public static void write(File file, String content, boolean isAppend) { 1105 FileWriter fileWriter = null; 1106 try { 1107 if (!file.exists()) { 1108 file.createNewFile(); 1109 } 1110 fileWriter = new FileWriter(file.getPath(), isAppend); 1111 fileWriter.write(content); 1112 } catch (Exception ex) { 1113 ex.printStackTrace(); 1114 } finally { 1115 if (null != fileWriter) { 1116 try { 1117 fileWriter.close(); 1118 } catch (IOException ex) { 1119 ex.printStackTrace(); 1120 } 1121 } 1122 } 1123 } 1124 1125 /** 1126 * tail 添加文件内容content到文件的index位置 1127 * 1128 * @param filePath 1129 * @param fileName 1130 * @param content 1131 * @param index 1132 */ 1133 public static void tail(String filePath, String fileName, String content, long index) { 1134 try { 1135 String fullPath = combainPath(filePath, fileName); 1136 File file = new File(fullPath); 1137 FileTools.tail(file, content, index); 1138 } catch (Exception ex) { 1139 ex.printStackTrace(); 1140 } 1141 } 1142 1143 /** 1144 * tail 添加文件内容content到文件的index位置 1145 * 1146 * @param fullPath 1147 * @param content 1148 * @param index 1149 */ 1150 public static void tail(String fullPath, String content, long index) { 1151 try { 1152 File file = new File(fullPath); 1153 FileTools.tail(file, content, index); 1154 } catch (Exception ex) { 1155 ex.printStackTrace(); 1156 } 1157 } 1158 1159 /** 1160 * tail 添加文件内容content到文件的index位置 1161 * 1162 * @param file 1163 * @param content 1164 * @param index 1165 */ 1166 public static void tail(File file, String content, long index) { 1167 RandomAccessFile randomAccessFile = null; 1168 try { 1169 if (!file.exists()) { 1170 file.createNewFile(); 1171 } 1172 randomAccessFile = new RandomAccessFile(file.getPath(), "rw"); 1173 randomAccessFile.seek(index); 1174 randomAccessFile.writeBytes(content); 1175 } catch (Exception ex) { 1176 ex.printStackTrace(); 1177 } finally { 1178 if (null != randomAccessFile) { 1179 try { 1180 randomAccessFile.close(); 1181 } catch (Exception ex) { 1182 ex.printStackTrace(); 1183 } 1184 } 1185 } 1186 } 1187 1188 /** 1189 * mkdir 创建目录 1190 * 1191 * @param filePath 1192 * @param fileName 1193 * @return 1194 */ 1195 public static File mkdir(String filePath, String fileName) { 1196 File file = null; 1197 try { 1198 String fullPath = combainPath(filePath, fileName); 1199 file = new File(fullPath); 1200 file = mkdir(file); 1201 } catch (Exception ex) { 1202 ex.printStackTrace(); 1203 } 1204 return file; 1205 } 1206 1207 /** 1208 * mkdir 创建目录 1209 * 1210 * @param fullPath 1211 * @return 1212 */ 1213 public static File mkdir(String fullPath) { 1214 File file = null; 1215 try { 1216 file = new File(fullPath); 1217 file = mkdir(file); 1218 } catch (Exception ex) { 1219 ex.printStackTrace(); 1220 } 1221 return file; 1222 } 1223 1224 /** 1225 * mkdir 创建目录 1226 * 1227 * @param file 1228 * @return 1229 */ 1230 public static File mkdir(File file) { 1231 try { 1232 if (!file.exists()) { 1233 file.mkdir();// 如果文件夹不存在则创建 1234 } 1235 } catch (Exception ex) { 1236 ex.printStackTrace(); 1237 } 1238 return file; 1239 } 1240 1241 /** 1242 * touch 创建文件 1243 * 1244 * @param filePath 1245 * @param fileName 1246 */ 1247 public static void touch(String filePath, String fileName) { 1248 try { 1249 String fullPath = combainPath(filePath, fileName); 1250 File file = new File(fullPath); 1251 touch(file); 1252 } catch (Exception ex) { 1253 ex.printStackTrace(); 1254 } 1255 } 1256 1257 /** 1258 * touch 创建文件 1259 * 1260 * @param fullPath 1261 */ 1262 public static void touch(String fullPath) { 1263 try { 1264 File file = new File(fullPath); 1265 touch(file); 1266 } catch (Exception ex) { 1267 ex.printStackTrace(); 1268 } 1269 } 1270 1271 /** 1272 * touch 创建文件 1273 * 1274 * @param file 1275 */ 1276 public static void touch(File file) { 1277 try { 1278 if (!file.exists()) { 1279 file.createNewFile();// 如果文件不存在则创建 1280 } 1281 } catch (Exception ex) { 1282 ex.printStackTrace(); 1283 } 1284 } 1285 1286 /** 1287 * rm 删除文件 1288 * 1289 * @param filePath 1290 * @param fileName 1291 */ 1292 public static void rm(String filePath, String fileName) { 1293 try { 1294 String fullPath = combainPath(filePath, fileName); 1295 File file = new File(fullPath); 1296 rm(file); 1297 } catch (Exception ex) { 1298 ex.printStackTrace(); 1299 } 1300 } 1301 1302 /** 1303 * rm 删除文件 1304 * 1305 * @param fullPath 1306 */ 1307 public static void rm(String fullPath) { 1308 try { 1309 File file = new File(fullPath); 1310 rm(file); 1311 } catch (Exception ex) { 1312 ex.printStackTrace(); 1313 } 1314 } 1315 1316 /** 1317 * rm 删除文件 1318 * 1319 * @param file 1320 */ 1321 public static void rm(File file) { 1322 try { 1323 if (!file.exists()) { 1324 throw new FileNotFoundException(); 1325 } 1326 if (file.isFile()) { 1327 file.delete(); 1328 } 1329 } catch (Exception ex) { 1330 ex.printStackTrace(); 1331 } 1332 } 1333 1334 /** 1335 * rmdir 删除目录 1336 * 1337 * @param filePath 1338 * @param fileName 1339 * @param loop 1340 */ 1341 public static void rmdir(String filePath, String fileName, boolean loop) { 1342 try { 1343 String fullPath = combainPath(filePath, fileName); 1344 File dir = new File(fullPath); 1345 rmdir(dir, loop); 1346 } catch (Exception ex) { 1347 ex.printStackTrace(); 1348 } 1349 } 1350 1351 /** 1352 * rmdir 删除目录 1353 * 1354 * @param fullPath 1355 * @param loop 1356 */ 1357 public static void rmdir(String fullPath, boolean loop) { 1358 try { 1359 File dir = new File(fullPath); 1360 rmdir(dir, loop); 1361 } catch (Exception ex) { 1362 ex.printStackTrace(); 1363 } 1364 } 1365 1366 /** 1367 * rmdir 删除目录 1368 * 1369 * @param dir 1370 * @param loop 1371 */ 1372 public static void rmdir(File dir, boolean loop) { 1373 try { 1374 if (!dir.exists()) { 1375 throw new FileNotFoundException(); 1376 } 1377 if (dir.isDirectory()) { 1378 File[] files = dir.listFiles(); 1379 int length = files.length; 1380 for (int i = 0; i < length && loop; i++) { 1381 if (files[i].isDirectory()) { 1382 rmdir(files[i], loop); 1383 } else { 1384 rm(files[i]); 1385 } 1386 } 1387 if (loop || length == 0) { 1388 dir.delete(); 1389 } 1390 } 1391 } catch (Exception ex) { 1392 ex.printStackTrace(); 1393 } 1394 } 1395 1396 /** 1397 * du 获取文件实际大小 1398 * 1399 * @param filePath 1400 * @param fileName 1401 * @param loop 1402 * @return 1403 */ 1404 public static long du(String filePath, String fileName, boolean loop) { 1405 long size = 0; 1406 try { 1407 String fullPath = combainPath(filePath, fileName); 1408 File file = new File(fullPath); 1409 size = du(file, loop); 1410 } catch (Exception ex) { 1411 ex.printStackTrace(); 1412 } 1413 return size; 1414 } 1415 1416 /** 1417 * du 获取文件实际大小 1418 * 1419 * @param filePath 1420 * @param fileName 1421 * @return 1422 */ 1423 public static long du(String filePath, String fileName) { 1424 long size = 0; 1425 try { 1426 String fullPath = combainPath(filePath, fileName); 1427 File file = new File(fullPath); 1428 size = du(file, false); 1429 } catch (Exception ex) { 1430 ex.printStackTrace(); 1431 } 1432 return size; 1433 } 1434 1435 /** 1436 * du 获取文件实际大小 1437 * 1438 * @param fullPath 1439 * @return 1440 */ 1441 public static long du(String fullPath) { 1442 long size = 0; 1443 try { 1444 File file = new File(fullPath); 1445 size = du(file, false); 1446 } catch (Exception ex) { 1447 ex.printStackTrace(); 1448 } 1449 return size; 1450 } 1451 1452 /** 1453 * du 获取文件实际大小 1454 * 1455 * @param file 1456 * @return 1457 */ 1458 public static long du(File file) { 1459 long size = 0; 1460 try { 1461 size = du(file, false); 1462 } catch (Exception ex) { 1463 ex.printStackTrace(); 1464 } 1465 return size; 1466 } 1467 1468 /** 1469 * du 获取文件实际大小 1470 * 1471 * @param fullPath 1472 * @param loop 1473 * @return 1474 */ 1475 public static long du(String fullPath, boolean loop) { 1476 long size = 0; 1477 try { 1478 File file = new File(fullPath); 1479 size = du(file, loop); 1480 } catch (Exception ex) { 1481 ex.printStackTrace(); 1482 } 1483 return size; 1484 } 1485 1486 /** 1487 * du 获取文件实际大小 1488 * 1489 * @param file 1490 * @param loop 1491 * @return 1492 */ 1493 public static long du(File file, boolean loop) { 1494 FileChannel fileChannel = null; 1495 long size = 0; 1496 try { 1497 if (!file.exists()) { 1498 throw new FileNotFoundException(); 1499 } 1500 if (file.isFile()) { 1501 FileInputStream fis = new FileInputStream(file); 1502 fileChannel = fis.getChannel(); 1503 size = fileChannel.size(); 1504 } else if (file.isDirectory()) { 1505 File[] files = file.listFiles(); 1506 int length = files.length; 1507 for (int i = 0; i < length && loop; i++) { 1508 if (files[i].isDirectory()) { 1509 du(files[i], loop); 1510 } else { 1511 size += du(files[i], false); 1512 } 1513 } 1514 } 1515 } catch (Exception ex) { 1516 ex.printStackTrace(); 1517 } finally { 1518 if (null != fileChannel) { 1519 try { 1520 fileChannel.close(); 1521 } catch (Exception ex) { 1522 ex.printStackTrace(); 1523 } 1524 } 1525 } 1526 return size; 1527 } 1528 1529 /** 1530 * 根据传入的文件夹目录返回目录下文件信息 1531 * 1532 * @param path 1533 * @return fileCount:文件夹下压缩文件的个数,前台显示; files:压缩文件的list; 1534 * fileNames:压缩文件夹的文件名,前台显示; 1535 * fileInfoJson:包含fileCount、fileNames的json信息。 1536 */ 1537 public static Map<String, Object> checkFolder(String path) { 1538 Map<String, Object> folderInfo = new HashMap<>(); 1539 try { 1540 File file = new File(path); 1541 int fileCount = 0; 1542 List<File> files = new ArrayList<File>(); 1543 List<String> fileNames = new ArrayList<>(); 1544 if (!file.isDirectory()) { 1545 return null; 1546 } else { 1547 String[] fileList = file.list(); 1548 for (int i = 0; i < fileList.length; i++) { 1549 if (fileList[i].lastIndexOf(".zip") > 0 || fileList[i].lastIndexOf(".rar") > 0) { 1550 fileCount++; 1551 File eleFile = new File(path + File.separator + fileList[i]); 1552 files.add(eleFile); 1553 fileNames.add(fileList[i]); 1554 } 1555 } 1556 } 1557 folderInfo.put("fileCount", fileCount); 1558 folderInfo.put("fileNames", fileNames); 1559 JSONObject jsonObject = JSONObject.fromObject(folderInfo); 1560 folderInfo.put("fileInfoJson", jsonObject.toString()); 1561 folderInfo.put("files", files); 1562 1563 } catch (Exception e) { 1564 // TODO: handle exception 1565 } 1566 1567 return folderInfo; 1568 } 1569 1570 /** 1571 * 文件上传 1572 * 1573 * @param multipartRequest 1574 * @return 1575 */ 1576 public static String uploadifyFiles(MultipartHttpServletRequest multipartRequest, String targetPath) { 1577 String responseStr = ""; 1578 Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); 1579 String configPath = File.separator; 1580 SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); 1581 String year = sdf.format(new Date()); 1582 configPath += year + File.separator; 1583 sdf = new SimpleDateFormat("MM"); 1584 String month = sdf.format(new Date()); 1585 configPath += month + File.separator; 1586 ContentID contentID = new ContentID(2L); 1587 long cid = contentID.nextId(); 1588 configPath += cid + File.separator; 1589 targetPath += configPath; 1590 // 创建文件夹 1591 File file = new File(targetPath); 1592 if (!file.exists()) { 1593 file.mkdirs(); 1594 } 1595 // 预留多文件上传,但流程需要另外改动 1596 for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { 1597 // 上传文件名 1598 MultipartFile mf = entity.getValue(); 1599 String fileName = mf.getOriginalFilename(); 1600 // String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1601 // 1).toLowerCase(); 1602 // SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); 1603 // String newFileName = df.format(new Date()) + "_" + new 1604 // Random().nextInt(1000) + "." + fileExt; 1605 responseStr = targetPath + fileName; 1606 File uploadFile = new File(targetPath + fileName); 1607 try { 1608 mf.transferTo(uploadFile); 1609 // FileCopyUtils.copy(mf.getBytes(), uploadFile); 1610 } catch (IOException e) { 1611 responseStr = "error"; 1612 e.printStackTrace(); 1613 } 1614 } 1615 return responseStr; 1616 } 1617 1618 /** 1619 * 上传xsd文件,用户基础库建立时使用 1620 * 1621 * @param multipartRequest 1622 * @param targetPath 1623 * @return 1624 */ 1625 public static String uploadifyXsd(MultipartHttpServletRequest multipartRequest, String targetPath) { 1626 String responseStr = ""; 1627 Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); 1628 String configPath = File.separator; 1629 SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); 1630 String docName = df.format(new Date()) + "_" + new Random().nextInt(1000); 1631 configPath += docName + File.separator; 1632 targetPath += configPath; 1633 // 创建文件夹 1634 File file = new File(targetPath); 1635 if (!file.exists()) { 1636 file.mkdirs(); 1637 } 1638 // 预留多文件上传,但流程需要另外改动 1639 for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { 1640 // 上传文件名 1641 MultipartFile mf = entity.getValue(); 1642 String fileName = mf.getOriginalFilename(); 1643 responseStr = targetPath + fileName; 1644 File uploadFile = new File(targetPath + fileName); 1645 try { 1646 mf.transferTo(uploadFile); 1647 // FileCopyUtils.copy(mf.getBytes(), uploadFile); 1648 } catch (IOException e) { 1649 responseStr = "error"; 1650 e.printStackTrace(); 1651 } 1652 } 1653 return responseStr; 1654 } 1655 1656 /** 1657 * 上传企业资质 1658 * 1659 * @param multipartRequest 1660 * @param targetPath 1661 * @return 1662 */ 1663 public static String uploadifyCA(MultipartHttpServletRequest multipartRequest, String targetPath) { 1664 String responseStr = ""; 1665 Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); 1666 String configPath = File.separator; 1667 ContentID contentID = new ContentID(2L); 1668 long contentId = contentID.nextId(); 1669 configPath += contentId + File.separator; 1670 targetPath += configPath; 1671 // 创建文件夹 1672 File file = new File(targetPath); 1673 if (!file.exists()) { 1674 file.mkdirs(); 1675 } 1676 // 预留多文件上传,但流程需要另外改动 1677 for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { 1678 // 上传文件名 1679 MultipartFile mf = entity.getValue(); 1680 String fileName = mf.getOriginalFilename(); 1681 responseStr = targetPath + fileName; 1682 File uploadFile = new File(targetPath + fileName); 1683 try { 1684 mf.transferTo(uploadFile); 1685 // FileCopyUtils.copy(mf.getBytes(), uploadFile); 1686 } catch (IOException e) { 1687 responseStr = "error"; 1688 e.printStackTrace(); 1689 } 1690 } 1691 return responseStr; 1692 } 1693 1694 public static void uploadSimpleFile(CommonsMultipartFile file, String targetPath) { 1695 File targetFile = new File(targetPath).getParentFile(); 1696 if (!targetFile.exists()) 1697 targetFile.mkdirs(); 1698 if (!file.isEmpty()) { 1699 try { 1700 FileOutputStream fos = new FileOutputStream(targetPath); 1701 InputStream in = file.getInputStream(); 1702 int b = 0; 1703 while ((b = in.read()) != -1) { 1704 fos.write(b); 1705 } 1706 fos.close(); 1707 in.close(); 1708 } catch (Exception e) { 1709 e.printStackTrace(); 1710 } 1711 } 1712 } 1713 1714 public static void inputstreamtofile(InputStream ins, File file) { 1715 OutputStream os; 1716 try { 1717 os = new FileOutputStream(file); 1718 int bytesRead = 0; 1719 byte[] buffer = new byte[8192]; 1720 while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) { 1721 os.write(buffer, 0, bytesRead); 1722 } 1723 os.close(); 1724 ins.close(); 1725 1726 } catch (FileNotFoundException e) { 1727 // TODO Auto-generated catch block 1728 e.printStackTrace(); 1729 } catch (IOException e) { 1730 // TODO Auto-generated catch block 1731 e.printStackTrace(); 1732 } 1733 } 1734 1735 /** 1736 * 删除过期的文件 1737 * 1738 * @param file 1739 * @param save_days 1740 */ 1741 public static void deleteOutOfDaysFiles(File file, int save_days) { 1742 if (file.exists()) { 1743 if (file.isDirectory()) { 1744 // 2016 , 年 1745 File[] files = file.listFiles(); 1746 if (files != null && files.length > 0) { 1747 for (int i = 0; i < files.length; i++) { 1748 try { 1749 int days = DateUtil.daysBetween(new Date(file.lastModified()), new Date()); 1750 if (days > save_days) { 1751 if (files[i].isDirectory()) { 1752 FileTools.rmdir(files[i], true); 1753 } else { 1754 FileTools.rm(file); 1755 } 1756 } else { 1757 // 11,月 1758 deleteOutOfDaysFiles(files[i], save_days); 1759 } 1760 } catch (ParseException e) { 1761 // TODO Auto-generated catch block 1762 e.printStackTrace(); 1763 } 1764 } 1765 } 1766 } else { 1767 int days; 1768 try { 1769 days = DateUtil.daysBetween(new Date(file.lastModified()), new Date()); 1770 if (days > save_days) { 1771 FileTools.rm(file); 1772 } 1773 } catch (ParseException e) { 1774 // TODO Auto-generated catch block 1775 e.printStackTrace(); 1776 } 1777 1778 } 1779 1780 } 1781 } 1782 1783 public static List<File> getFileList(String strPath) { 1784 1785 File dir = new File(strPath); 1786 1787 File[] files = dir.listFiles(); 1788 // 该文件目录下文件全部放入数组 1789 List<File> filelist = new ArrayList<>(); 1790 1791 if (files != null) { 1792 for (int i = 0; i < files.length; i++) { 1793 String fileName = files[i].getName(); 1794 if (files[i].isDirectory()) { // 判断是文件还是文件夹 1795 getFileList(files[i].getAbsolutePath()); // 获取文件绝对路径 1796 } else if (fileName.endsWith("avi")) { // 判断文件名是否以.avi结尾 1797 1798 filelist.add(files[i]); 1799 } else { 1800 continue; 1801 } 1802 } 1803 1804 } 1805 return filelist; 1806 } 1807 1808 public static String shareFile(String sourcePath, String tarPath, String cid) { 1809 1810 String toURL = tarPath; 1811 1812 SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); 1813 String year = sdf.format(new Date()); 1814 toURL +=File.separator+ year + File.separator; 1815 sdf = new SimpleDateFormat("MM"); 1816 String month = sdf.format(new Date()); 1817 toURL += month + File.separator; 1818 String toRealUrl = toURL; 1819 File souceFile = new File(sourcePath); 1820 String str = ""; 1821 if (souceFile.exists() && souceFile.isDirectory()) { 1822 1823 str = sourcePath.substring(sourcePath.lastIndexOf(File.separator)); 1824 toRealUrl = toRealUrl + File.separator + cid + File.separator; 1825 1826 } else { 1827 1828 String parentPath = souceFile.getParent(); 1829 str = parentPath.substring(parentPath.lastIndexOf(File.separator)); 1830 toRealUrl = toRealUrl + File.separator + cid + File.separator + str; 1831 1832 } 1833 1834 // 创建文件夹 1835 File file = new File(toRealUrl); 1836 1837 if (!file.exists()) { 1838 1839 file.mkdirs(); 1840 } 1841 1842 String newUrl = ""; 1843 1844 if (souceFile.exists() && souceFile.isDirectory()) { 1845 1846 cutGeneralFile(sourcePath, file.getAbsolutePath()); 1847 newUrl = file.getAbsolutePath() + File.separator + str; 1848 1849 } else { 1850 1851 if(souceFile.getName().toLowerCase().endsWith(".xml")){ 1852 1853 sourcePath=souceFile.getParent(); 1854 cutGeneralFile(sourcePath, file.getParent()); 1855 }else{ 1856 copyFile(sourcePath, file.getAbsolutePath()); 1857 } 1858 newUrl = file.getAbsolutePath() + File.separator + souceFile.getName(); 1859 } 1860 1861 return newUrl; 1862 1863 } 1864 1865 public static boolean shareFile2(String sourcePath, String tarPath) { 1866 1867 String toURL = tarPath; 1868 1869 File souceFile = new File(sourcePath); 1870 1871 if (!new File(toURL).exists()) 1872 1873 new File(toURL).mkdirs(); 1874 1875 if (souceFile.exists() && souceFile.isDirectory()) { 1876 1877 return cutGeneralFile(sourcePath, toURL); 1878 1879 } else { 1880 1881 File parentFile = souceFile.getParentFile(); 1882 toURL = toURL + File.separator; 1883 copyFile(sourcePath, toURL); 1884 return true; 1885 1886 } 1887 1888 } 1889 1890 /** 1891 * 获取不带扩展名的文件名 1892 * 1893 * @param filename 1894 * @return 1895 */ 1896 public static String getFileNameNoEx(String filename) { 1897 1898 if ((filename != null) && (filename.length() > 0)) { 1899 int dot = filename.lastIndexOf('.'); 1900 if ((dot > -1) && (dot < (filename.length()))) { 1901 return filename.substring(0, dot); 1902 } 1903 } 1904 return filename; 1905 } 1906 1907 // 获取文件的上上级目录 1908 public static String hPPPath(String file) { 1909 1910 File fil = new File(file); 1911 String str = fil.getParent(); 1912 1913 File pfile = new File(str); 1914 String str2 = pfile.getParent(); 1915 return str2; 1916 } 1917 1918 // 获取文件的上级目录 1919 public static String hPPath(String file) { 1920 1921 File fil = new File(file); 1922 1923 return fil.getParent(); 1924 } 1925 1926 /** 1927 * 1928 * @param file 1929 * @return 1930 */ 1931 public static List<File> sortFileType(List<File> subList) { 1932 1933 List<File> txtFile = new ArrayList<File>(); 1934 List<File> docFile = new ArrayList<File>(); 1935 List<File> pdfFile = new ArrayList<File>(); 1936 List<File> xmlFile = new ArrayList<File>(); 1937 List<File> htmlFile = new ArrayList<File>(); 1938 1939 List<File> filesAll = new ArrayList<File>(); 1940 1941 for (int i = 0; i < subList.size(); i++) { 1942 1943 File file = subList.get(i); 1944 1945 if (file.getAbsolutePath().contains(".txt")) { 1946 1947 txtFile.add(file); 1948 1949 } else if (file.getAbsolutePath().contains(".doc") || file.getAbsolutePath().contains(".docx")) { 1950 1951 docFile.add(file); 1952 1953 } else if (file.getAbsolutePath().contains(".pdf")) { 1954 1955 pdfFile.add(file); 1956 1957 } else if (file.getName().contains(".xml")) { 1958 1959 xmlFile.add(file); 1960 1961 } else if (file.getName().contains(".html")) { 1962 1963 htmlFile.add(file); 1964 1965 } 1966 1967 } 1968 1969 if (txtFile.size() > 0) { 1970 filesAll.addAll(txtFile); 1971 } 1972 if (docFile.size() > 0) { 1973 filesAll.addAll(docFile); 1974 } 1975 if (pdfFile.size() > 0) { 1976 filesAll.addAll(pdfFile); 1977 } 1978 if (xmlFile.size() > 0) { 1979 filesAll.addAll(xmlFile); 1980 } 1981 if (htmlFile.size() > 0) { 1982 filesAll.addAll(htmlFile); 1983 } 1984 1985 return filesAll; 1986 } 1987 1988 /** 1989 * 复制文件或文件夹 1990 * 1991 * @param srcPath 1992 * @param destDir 1993 * 目标文件所在的目录 1994 * @return 1995 */ 1996 public static boolean copyGeneralFile(String srcPath, String destDir) { 1997 1998 boolean flag = false; 1999 File file = new File(srcPath); 2000 2001 if (!file.exists()) { 2002 return false; 2003 } 2004 2005 if (file.isFile()) { // 源文件 2006 flag = copyFile(srcPath, destDir); 2007 } else if (file.isDirectory()) { 2008 flag = copyDirectory(srcPath, destDir); 2009 } 2010 2011 return flag; 2012 } 2013 2014 /** 2015 * 复制文件 2016 * 2017 * @param srcPath 2018 * 源文件绝对路径 2019 * @param destDir 2020 * 目标文件所在目录 2021 * @return boolean 2022 */ 2023 private static boolean copyFile(String srcPath, String destDir) { 2024 boolean flag = false; 2025 2026 File srcFile = new File(srcPath); 2027 2028 if (!srcFile.exists()) { // 源文件不存在 2029 return false; 2030 } 2031 // 获取待复制文件的文件名 2032 String fileName = srcPath.substring(srcPath.lastIndexOf(File.separator)); 2033 String destPath = destDir + fileName; 2034 if (destPath.equals(srcPath)) { // 源文件路径和目标文件路径重复 2035 return false; 2036 } 2037 2038 File destFile = new File(destPath); 2039 2040 if (destFile.exists() && destFile.isFile()) { // 该路径下已经有一个同名文件 2041 2042 //// 获取导入文件的文件名 2043 String srcStr = destPath.substring(0, destPath.indexOf(".")); 2044 2045 int i = 0; 2046 2047 String destFileParent = destFile.getParent(); 2048 2049 // 获取目标的的所有文件 2050 2051 List<File> files = getFiles(destFileParent, true); 2052 2053 for (File file : files) { 2054 2055 // 获取每个文件的文件名 2056 String destStr = file.getAbsolutePath().substring(0, file.getAbsolutePath().indexOf(".")); 2057 2058 if (destStr.contains(srcStr)) { 2059 2060 i++; 2061 } 2062 } 2063 2064 // 获取要导入路径下的所有包含该文件名称的内容 2065 String str = srcPath.substring(srcPath.lastIndexOf(File.separator)); 2066 2067 StringBuilder fn = new StringBuilder(str); 2068 2069 if (fileName.indexOf(".") > 0) { 2070 2071 fn.insert(fn.lastIndexOf("."), "_副本(" + i + ")"); 2072 2073 } else { 2074 2075 fn.append("_副本(" + i + ")"); 2076 } 2077 2078 destFile = new File(destDir + fn.toString()); 2079 2080 if (!destFile.exists()) { 2081 2082 try { 2083 destFile.createNewFile(); 2084 } catch (IOException e) { 2085 // TODO Auto-generated catch block 2086 e.printStackTrace(); 2087 } 2088 } 2089 2090 } 2091 2092 File destFileDir = new File(destDir); 2093 2094 destFileDir.mkdirs(); 2095 2096 try { 2097 FileInputStream fis = new FileInputStream(srcPath); 2098 FileOutputStream fos = new FileOutputStream(destFile); 2099 byte[] buf = new byte[1024]; 2100 int c; 2101 while ((c = fis.read(buf)) != -1) { 2102 fos.write(buf, 0, c); 2103 } 2104 2105 fis.close(); 2106 fos.close(); 2107 2108 flag = true; 2109 } catch (IOException e) { 2110 // 2111 } 2112 2113 if (flag) { 2114 } 2115 2116 return flag; 2117 } 2118 2119 /** 2120 * 2121 * @param srcPath 2122 * 源文件夹路径 2123 * @param destPath 2124 * 目标文件夹所在目录 2125 * @return 2126 */ 2127 private static boolean copyDirectory(String srcPath, String destDir) { 2128 boolean flag = false; 2129 2130 File srcFile = new File(srcPath); 2131 if (!srcFile.exists()) { // 源文件夹不存在 2132 return false; 2133 } 2134 // 获得待复制的文件夹的名字,比如待复制的文件夹为"E:\\dir"则获取的名字为"dir" 2135 String dirName = new File(srcPath).getName(); 2136 // String dirName = getDirName(srcPath); 2137 // 目标文件夹的完整路径 2138 String destPath = destDir + File.separator + dirName; 2139 // System.out.println("目标文件夹的完整路径为:" + destPath); 2140 2141 if (destPath.equals(srcPath)) { 2142 return false; 2143 } 2144 File destDirFile = new File(destPath); 2145 2146 if (!destDirFile.exists()) { 2147 2148 destDirFile.mkdirs(); // 生成目录 2149 2150 } 2151 2152 File[] fileList = srcFile.listFiles(); // 获取源文件夹下的子文件和子文件夹 2153 if (fileList.length == 0) { // 如果源文件夹为空目录则直接设置flag为true,这一步非常隐蔽,debug了很久 2154 flag = true; 2155 } else { 2156 for (File temp : fileList) { 2157 if (temp.isFile()) { // 文件 2158 flag = copyFile(temp.getAbsolutePath(), destPath); 2159 } else if (temp.isDirectory()) { // 文件夹 2160 flag = copyDirectory(temp.getAbsolutePath(), destPath); 2161 } 2162 if (!flag) { 2163 break; 2164 } 2165 } 2166 } 2167 2168 if (flag) { 2169 } 2170 2171 return flag; 2172 } 2173 2174 /** 2175 * 获取待复制文件夹的文件夹名 2176 * 2177 * @param dir 2178 * @return String 2179 */ 2180 private static String getDirName(String dir) { 2181 if (dir.endsWith(File.separator)) { // 如果文件夹路径以"\\"结尾,则先去除末尾的"\\" 2182 dir = dir.substring(0, dir.lastIndexOf(File.separator)); 2183 } 2184 return dir.substring(dir.lastIndexOf(File.separator) + 1); 2185 } 2186 2187 /** 2188 * 删除文件或文件夹 2189 * 2190 * @param path 2191 * 待删除的文件的绝对路径 2192 * @return boolean 2193 */ 2194 public static boolean deleteGeneralFile(String path) { 2195 boolean flag = false; 2196 2197 File file = new File(path); 2198 2199 if (!file.exists()) { 2200 } 2201 2202 if (file.isDirectory()) { // 如果是目录,则单独处理 2203 flag = deleteDirectory(file.getAbsolutePath()); 2204 } else if (file.isFile()) { 2205 flag = deleteFile(file); 2206 } 2207 2208 if (flag) { 2209 } 2210 2211 return flag; 2212 } 2213 2214 /** 2215 * 删除文件 2216 * 2217 * @param file 2218 * @return boolean 2219 */ 2220 private static boolean deleteFile(File file) { 2221 2222 return file.delete(); 2223 2224 } 2225 2226 /** 2227 * 删除目录及其下面的所有子文件和子文件夹,注意一个目录下如果还有其他文件或文件夹 2228 * 则直接调用delete方法是不行的,必须待其子文件和子文件夹完全删除了才能够调用delete 2229 * 2230 * @param path 2231 * path为该目录的路径 2232 */ 2233 private static boolean deleteDirectory(String path) { 2234 boolean flag = true; 2235 File dirFile = new File(path); 2236 if (!dirFile.isDirectory()) { 2237 return flag; 2238 } 2239 File[] files = dirFile.listFiles(); 2240 for (File file : files) { // 删除该文件夹下的文件和文件夹 2241 // Delete file. 2242 if (file.isFile()) { 2243 flag = deleteFile(file); 2244 } else if (file.isDirectory()) {// Delete folder 2245 flag = deleteDirectory(file.getAbsolutePath()); 2246 } 2247 if (!flag) { // 只要有一个失败就立刻不再继续 2248 break; 2249 } 2250 } 2251 flag = dirFile.delete(); // 删除空目录 2252 return flag; 2253 } 2254 2255 /** 2256 * 由上面方法延伸出剪切方法:复制+删除 2257 * 2258 * @param destDir 2259 * 同上 2260 */ 2261 public static boolean cutGeneralFile(String srcPath, String destDir) { 2262 2263 if (!copyGeneralFile(srcPath, destDir)) { 2264 return false; 2265 } 2266 2267 if (!deleteGeneralFile(srcPath)) { 2268 return false; 2269 } 2270 2271 return true; 2272 } 2273 2274 public static String[] getFileNameFromUrl(String url) { 2275 if (url != null && !url.equals("") && !url.equals("null")) { 2276 File file = new File(url); 2277 if (file.exists()) { 2278 if (file.isDirectory()) { 2279 return file.list(); 2280 } else if (file.isFile()) { 2281 return new String[] { file.getName() }; 2282 } 2283 } 2284 } 2285 return null; 2286 } 2287 2288 public static void deleteFileOrDirectory(String filePath) { 2289 2290 File file = new File(filePath); 2291 2292 if (file.exists()) { 2293 if (file.isDirectory()) { 2294 2295 rmdir(file, true); 2296 2297 } else if (file.isFile()) { 2298 2299 if (filePath.equals(".xml") || filePath.equals(".html") || filePath.equals("htm")) { 2300 2301 rmdir(file.getParent(), true); 2302 2303 } else { 2304 rm(file); 2305 2306 } 2307 } 2308 } 2309 } 2310 2311 public static String getEnclosure(String filePath) { 2312 2313 File sourceFile = new File(filePath); 2314 2315 String tarPath = null; 2316 if (sourceFile.exists()) { 2317 2318 if (sourceFile.isFile()) { 2319 2320 tarPath = getEnclosure(sourceFile.getParent()); 2321 2322 } else if (sourceFile.isDirectory()) { 2323 2324 tarPath = sourceFile.getParent(); 2325 2326 } 2327 2328 } 2329 return tarPath; 2330 2331 } 2332 2333 public static int getFileCount(String filePath) { 2334 2335 int count=0; 2336 File file = new File(filePath); 2337 File parentFile = null; 2338 if (file.isDirectory()) { 2339 parentFile = file; 2340 } else if (file.isFile()) { 2341 parentFile = file.getParentFile(); 2342 2343 } 2344 2345 if (parentFile != null) { 2346 2347 List<File> files=getFiles(parentFile, true); 2348 2349 count=files.size(); 2350 } 2351 2352 return count; 2353 } 2354 2355 // 获取文件夹的大小 2356 public static Long fileSize(String filePath) { 2357 2358 long fileSize = 0l; 2359 File file = new File(filePath); 2360 File parentFile = null; 2361 if (file.isDirectory()) { 2362 parentFile = file; 2363 } else if (file.isFile()) { 2364 parentFile = file.getParentFile(); 2365 2366 } 2367 2368 if (parentFile != null) { 2369 2370 List<File> files=getFiles(parentFile, true); 2371 2372 for (File f : files) { 2373 2374 if (f.exists() && f.isFile()) { 2375 2376 fileSize += f.length(); 2377 } 2378 } 2379 } 2380 2381 return fileSize; 2382 2383 } 2384 2385 // 文件大小转化为 tb/mb/gb/tb 2386 public static String fileSizeToMB(long fileS) { 2387 String size = ""; 2388 DecimalFormat df = new DecimalFormat("#.00"); 2389 if (fileS < 1024) { 2390 size = df.format((double) fileS) + "BT"; 2391 } else if (fileS < 1048576) { 2392 size = df.format((double) fileS / 1024) + "KB"; 2393 } else if (fileS < 1073741824) { 2394 size = df.format((double) fileS / 1048576) + "MB"; 2395 } else { 2396 size = df.format((double) fileS / 1073741824) + "GB"; 2397 } 2398 return size; 2399 2400 } 2401 2402 public static void main(String[] args) { 2403 2404 } 2405 2406 }