การคัดลอกรหัสมีดังนี้:
แพ็คเกจ com.xyq.io.simply.core;
นำเข้า Java.io.File;
นำเข้า java.io.ioException;
นำเข้า java.nio.file.filevisitresult;
นำเข้า java.nio.file.filevisitor;
นำเข้า java.nio.file.files;
นำเข้า java.nio.file.path;
นำเข้า java.nio.file.Paths;
นำเข้า java.nio.file.standardcopyoption;
นำเข้า java.nio.file.attribute.basicfileattributes;
นำเข้า java.util.arraylist;
นำเข้า java.util.list;
นำเข้า com.xyq.io.enums.fileTypemode;
นำเข้า com.xyq.io.enums.optionfile_type;
นำเข้า com.xyq.io.inf.newnioinf;
นำเข้า com.xyq.io.util.findfileutil;
นำเข้า com.xyq.io.util.md5util;
Public Class Newnio ใช้ newnioinf {
-
* คัดลอกหรือย้ายไฟล์
-
@Override
บูลีนสาธารณะ CopeormoveFile (สตริง SRC, String tar, ประเภทตัวเลือก file_type) {
กลับมา RealCopeOrmoveFile (paths.get (src), tar, type);
-
บูลีนส่วนตัว RealCopeOrmoveFile (Path SrcPath, String tar,
ประเภทตัวเลือก file_type) {
เส้นทาง tarpath = null;
บูลีน copesuccess = true;
// ไฟล์ต้นฉบับจะต้องมีอยู่
if (srcpath.tofile (). มีอยู่ ()) {
-
* หากเส้นทางดั้งเดิมถูกเฉือนแสดงว่าถือเป็นโฟลเดอร์
-
if (isdir (tar))
tarpath = paths.get (tar + file.sparator
+ srcpath.tofile (). getName ());
อื่น
tarpath = paths.get (tar);
-
* จากนั้นดำเนินการ n ครั้ง (สามารถใช้เป็นพารามิเตอร์) การดำเนินการคัดลอก (การเชื่อมต่อใหม่หลังจากเกิดข้อผิดพลาด) ไม่ว่าจะเขียนทับการคัดลอก, คัดลอกแอตทริบิวต์, การดำเนินการคัดลอกไม่สามารถใช้ตัวเลือกการย้อนกลับได้
-
สำหรับ (int i = 0; i <3; i ++) {
-
* หากไฟล์เป้าหมายมีอยู่แล้ว
-
if (tarpath.tofile (). มีอยู่ ()) {
-
* หากคุณตรวจสอบว่าทั้งสองโฟลเดอร์เหมือนกันคุณไม่จำเป็นต้องคัดลอกภายใต้ตัวเลือกการคัดลอก
-
// คัดลอก
if (optivefile_type.cope.equals (ประเภท)) {
if (equalsfile (srcpath.tofile (), tarpath.tofile ()))
กลับมาจริง;
อื่น
copesuccess = copefile (srcpath, tarpath, true);
-
-
* ย้ายการดำเนินการอย่างระมัดระวังที่นี่
* จากนั้นเพียงแค่ลบไฟล์ต้นฉบับ อย่างไรก็ตามหากทั้งสองไฟล์เหมือนกันและที่อยู่ก็เป็นเช่นกัน
* หากเหมือนกันแล้วอันดั้งเดิมไม่สามารถลบได้เนื่องจากเป็นไฟล์เดียวกันและไม่สามารถลบได้
-
อื่นถ้า (optivefile_type.move.equals (ประเภท)) {
if (equalsfile (srcpath.tofile (), tarpath.tofile ())) {
if (! srcpath.tofile (). getabsolutefile ())
.Equals (tarpath.tofile (). getabsolutefile ())))
พยายาม {
files.delete (srcpath);
-
* เหตุผลในการชี้ไปที่ True ด้วยตนเองคืออาจมีความล้มเหลวในการลบก่อนหน้านี้
-
ถ้า (! copesuccess)
copesuccess = true;
} catch (ioexception e) {
copesuccess = false;
-
// ฉันไม่กลับโดยตรงเพราะมีข้อยกเว้นอยู่ด้านหน้าเพียงทำที่นี่
อื่น
กลับมาจริง;
} อื่น
copesuccess = movefile (srcpath, tarpath);
-
-
-
* เมื่อไม่มีไฟล์เป้าหมายก่อนอื่นให้ตรวจสอบว่าสามารถสร้างโฟลเดอร์คลาสแม่ได้หรือไม่ (โฟลเดอร์คลาสแม่มีอยู่หรือสามารถสร้างได้) จากนั้นสร้างเมื่อสามารถสร้างได้
-
อื่น {
ไฟล์ par = tarpath.getParent (). tofile ();
-
* หากโฟลเดอร์คลาสแม่ไม่มีอยู่และไม่สามารถสร้างได้ก็ไม่จำเป็นต้องคัดลอก
-
if (! par.exists () &&! par.mkdirs ())
copesuccess = false;
อื่นถ้า (optivefile_type.cope.equals (ประเภท))
copesuccess = copefile (srcpath, tarpath, false);
อื่นถ้า (optivefile_type.move.equals (ประเภท))
copesuccess = movefile (srcpath, tarpath);
-
// หากการดำเนินการสำเร็จ
ถ้า (copesuccess)
หยุดพัก;
-
} อื่น
copesuccess = false;
ส่งคืน copesuccess;
-
-
* คัดลอกไฟล์
-
บูลีนส่วนตัว Copefile (Path Srcpath, Path Tarpath, Boolean Isexist) {
ถ้า (isExist)
พยายาม {
files.copy (srcpath, tarpath,
StandardCopyOption.replace_existing
StandardCopyOption.copy_attributes);
} catch (ioexception e) {
กลับเท็จ;
-
อื่น
พยายาม {
files.copy (srcpath, tarpath, standardcopyoption.copy_attributes);
} catch (ioexception e) {
กลับเท็จ;
-
กลับมาจริง;
-
-
* ย้ายไฟล์ไม่สามารถใช้ตัวเลือกแอตทริบิวต์ได้
-
* @param srcpath
* @param tarpath
* @กลับ
-
Private Boolean Move File (Path Srcpath, Path Tarpath) {
พยายาม {
files.move (srcpath, tarpath, StandardCopyOption.atomic_move);
} catch (ioexception e) {
กลับเท็จ;
-
กลับมาจริง;
-
-
* ตรวจสอบว่าเส้นทางเส้นทางเป็นโฟลเดอร์หรือไม่
-
* @param Path
* @กลับ
-
บูลีนส่วนตัว ISDIR (เส้นทางสตริง) {
ถ่าน lastc = path.charat (path.length () - 1);
if (lastc == '//' || lastc == '/')
กลับมาจริง;
กลับเท็จ;
-
-
* นี่คือการตรวจสอบว่าทั้งสองไฟล์เหมือนกันหรือไม่มันเป็นเพียงการตรวจสอบอย่างง่าย
-
บูลีนสาธารณะ EqualsFile (ไฟล์ SRC, ไฟล์ tar) {
// หากความยาวของไฟล์ทั้งสองแตกต่างกันไฟล์ทั้งสองจะแตกต่างกันอย่างแน่นอน
if (src.length ()! = tar.length ())
กลับเท็จ;
if (! src.getName (). เท่ากับ (tar.getName ())
|| src.lastmodified ()! = tar.lastmodified ())
ส่งคืน md5util.encoderfilebymd5 (src) .equals (
md5util.encoderfilebymd5 (tar));
กลับมาจริง;
-
-
* คัดลอกหรือย้ายโฟลเดอร์
-
@Override
โมฆะสาธารณะ copeormovedirectory (สตริง Src, tar สตริงสุดท้าย, int tiersize,
ตัวเลือกสุดท้ายประเภท _Type) {
if (! ไฟล์ใหม่ (src) .Exists ())
โยน runtimeException ใหม่ ("โฟลเดอร์ดั้งเดิมไม่พบ" + src);
int final rootpos = getRootPosition (ไฟล์ใหม่ (SRC), tiersize);
if (rootpos! = -1) {
พยายาม {
files.walkFileTree (paths.get (src), filevisitor ใหม่ <Ath> () {
สตริง tardirstring = null;
-
* ก่อนมาถึงโฟลเดอร์ให้เขียนเส้นทางเป้าหมายก่อน
-
* @param dir
* @param attrs
* @กลับ
* @throws ioexception
-
@Override
Public Filevisitresult PrevisitDirectory (Path Dir,
basicfileattributes attrs) โยน ioexception {
tardirstring = dir.tofile (). getabsolutepath ();
tardirstring = tar + tardirstring.substring (rootpos)
+ file.Sparator;
ส่งคืน filevisitresult.continue;
-
-
* หลังจากมาถึงไฟล์คัดลอกหรือย้าย
-
* ไฟล์ @param
* @param attrs
* @กลับ
* @throws ioexception
-
@Override
Public FileVisitResult VisitFile (ไฟล์พา ธ
basicfileattributes attrs) โยน ioexception {
ไฟล์ f = file.tofile ();
if (f.exists () && f.canread () &&! f.ishidden ())
RealCopeOrmoveFile (ไฟล์, tardirstring, ประเภท);
ส่งคืน filevisitresult.continue;
-
@Override
Public FileVisitResult VisitFileFailed (ไฟล์พา ธ
ioexception exc) โยน ioexception {
ส่งคืน filevisitresult.continue;
-
-
* หลังจากมาถึงโฟลเดอร์
-
* @param dir
* @param excc
* @กลับ
* @throws ioexception
-
@Override
Public Filevisitresult PostvisitDirectory (Path Dir,
ioexception exc) โยน ioexception {
ส่งคืน filevisitresult.continue;
-
-
} catch (Exception e) {
E.PrintStackTrace ();
-
// ถ้าเป็นการตัดและการตัดสำเร็จคุณต้องลบโฟลเดอร์ทั้งหมด
if (optivefile_type.move.equals (ประเภท) && isblockdir (src))
Deldir (SRC);
} อื่น
โยน runtimeException ใหม่ ("ระบุข้อผิดพลาดลำดับชั้นของโฟลเดอร์คลาสแม่ ~~~");
-
-
* รับตำแหน่งของจดหมายไดรฟ์ที่ระบุตามระดับที่ระบุ
-
private int getRootposition (ไฟล์ไฟล์, int tier) {
ถ้า (ไฟล์! = null) {
String path = file.getAbsolutepath ();
int cc = 0;
สำหรับ (int i = path.length ()-1; i> = 0; i--) {
if (path.charat (i) == '//') {
CC ++;
if (cc == tier + 1) {
cc = i;
คืน CC;
-
-
-
-
กลับ -1;
-
-
* ตรวจสอบว่ามีไฟล์ใด ๆ ในโฟลเดอร์นี้หรือไม่
-
* @param dirpath
* @กลับ
-
บูลีนส่วนตัว isblockdir (String dirpath) {
ไฟล์ dir = ไฟล์ใหม่ (dirpath);
ไฟล์ [] dirlist = dir.listfiles ();
if (dirlist == null || dirlist.length == 0)
กลับมาจริง;
อื่น {
// ค้นหาไฟล์
สำหรับ (ไฟล์ f: dirlist)
ถ้า (! f.isdirectory ())
กลับเท็จ;
-
กลับมาจริง;
-
-
* ลบโฟลเดอร์เปล่า
-
* @param dirpath
-
โมฆะส่วนตัว Deldir (String Dirpath) {
ไฟล์ dir = ไฟล์ใหม่ (dirpath);
ไฟล์ [] dirlist = dir.listfiles ();
if (dirlist == null || dirlist.length == 0)
dir.delete ();
อื่น {
// ลบไฟล์ทั้งหมด
สำหรับ (ไฟล์ f: dirlist)
if (f.isdirectory ())
Deldir (f.getabsolutepath ());
อื่น
F.Delete ();
// ลบโฟลเดอร์หลังจากลบไฟล์ทั้งหมดในโฟลเดอร์ปัจจุบัน
dirlist = dir.listfiles ();
if (dirlist.length == 0)
dir.delete ();
-
-
-
* ค้นหาไฟล์ที่เกี่ยวข้องตามประเภทไฟล์
-
@Override
รายการสาธารณะ <String> findFilesByType (สตริง dir, สตริง [] คีย์,
บูลีน ismatchcase) พ่น ioexception {
รายการ <string> list = new ArrayList <String> ();
files.walkFileTree (paths.get (dir), findfileutil ใหม่ (ปุ่ม, ismatchcase,
รายการ, fileTypemode.types));
รายการคืน;
-
-
* ค้นหาไฟล์ที่เกี่ยวข้องตามชื่อไฟล์
-
@Override
รายการสาธารณะ <String> findFilesByName (สตริง dir, สตริง [] คีย์,
บูลีน ismatchcase) พ่น ioexception {
รายการ <string> list = new ArrayList <String> ();
files.walkFileTree (paths.get (dir), findfileutil ใหม่ (ปุ่ม, ismatchcase,
รายการ, fileTypemode.names));
รายการคืน;
-
โมฆะคงที่สาธารณะหลัก (String [] args) พ่น IOException {
newNioInf inf = newnio ();
inf.copeormovefile ("E: /cc/dd/11.txt", "e:/xx/xxx/zzz/",
OptionFile_type.cope);
inf.copeormovedirectory ("e: // bb // cc // dd", "e: //", 1, optivefile_type.move);
System.out.println (inf.findfilesbyName ("d: // workspace", สตริงใหม่ [] {"txt"},
เท็จ) .Size ());
-
-
-
แพ็คเกจ com.xyq.io.enums;
-
* ประเภทไฟล์
* @author xyq
-
-
public enum fileTypemode {
ประเภทชื่อ
-
-
แพ็คเกจ com.xyq.io.enums;
-
* ประเภทของไฟล์การทำงาน
* @author xyq
-
-
public enum opturefile_type {
รับมือย้าย;
-
-
แพ็คเกจ com.xyq.io.inf;
นำเข้า java.io.ioException;
นำเข้า java.util.list;
นำเข้า com.xyq.io.enums.optionfile_type;
อินเทอร์เฟซสาธารณะ newnioinf {
-
* คัดลอกหรือย้ายไฟล์
* @param src
* @param tar
* @กลับ
-
บูลีนสาธารณะ CopeormoveFile (สตริง SRC, String tar, ประเภทตัวเลือก FILE_TYPE);
-
* คัดลอกหรือย้ายโฟลเดอร์
* @param src
* @param tar
* @param tiersize ลำดับชั้นเส้นทาง 0 หลังจากการคัดลอกเป็นเพียงโฟลเดอร์ปัจจุบัน +1 หมายถึงการเพิ่มโฟลเดอร์ชั้นเรียนระดับแรก (แต่ไม่คัดลอกเนื้อหาคลาสพาเรนต์)
* @param ประเภท
-
โมฆะสาธารณะ Copeormovedirectory (สตริง Src, String tar, int tiersize, optivefile_type ประเภท);
-
* ค้นหาคอลเลกชันไฟล์ที่เกี่ยวข้องตามประเภทไฟล์แยกออกด้วยเครื่องหมายจุลภาคเมื่อมีหลายประเภท
-
* @param dir
* สารบัญ
* @param Keys
* ประเภทไฟล์
* @param ismatchcase
* ไม่ว่าจะเป็นตัวพิมพ์เล็กหรือไม่
* @กลับ
* @throws ioexception
-
รายการ <string> findFilesByType (สตริง dir, สตริง [] คีย์, บูลีน ismatchcase)
โยน ioexception;
-
* ค้นหาคอลเลกชันไฟล์ที่เกี่ยวข้องตามชื่อไฟล์แยกออกด้วยเครื่องหมายจุลภาคเมื่อหลายข้อกำหนดทางแพ่ง
-
* @param dir
* สารบัญ
* @param Keys
* ชื่อไฟล์
* @param ismatchcase
* ไม่ว่าจะเป็นตัวพิมพ์เล็กหรือไม่
* @กลับ
* @throws ioexception
-
รายการ <string> findFilesByName (สตริง dir, สตริง [] คีย์, บูลีน ismatchcase)
โยน ioexception;
-
-
แพ็คเกจ com.xyq.io.util;
นำเข้า Java.io.File;
นำเข้า java.io.ioException;
นำเข้า java.nio.file.filevisitresult;
นำเข้า java.nio.file.path;
นำเข้า java.nio.file.simpleFilevisitor;
นำเข้า java.nio.file.attribute.basicfileattributes;
นำเข้า java.util.list;
นำเข้า com.xyq.io.enums.fileTypemode;
FindFileUtil ระดับสาธารณะขยาย SimpleFileVisitor <Path> {
-
* รายการคำหลักไม่ว่าจะแปลงเคสหรือไม่
-
สตริงส่วนตัว [] keyArray = null;
บูลีนส่วนตัว ismatchcase;
รายการส่วนตัว <String> รายการผลลัพธ์;
โหมด FileTypemode ส่วนตัว
Public FindFileUtil (String [] KeyArray, Boolean isMatchcase,
รายการ <String> ResultSlist, โหมด fileTypEmode) {
this.keyarray = keyarray;
this.ismatchcase = ismatchcase;
this.resultlist = ผลลัพธ์;
this.mode = mode;
-
@suppresswarnings ("ไม่ได้ใช้")
private findfileutil () {
-
@Override
Public FileVisitResult VisitFile (ไฟล์พา ธ , basicfileattributes attrs)
โยน ioexception {
ไฟล์ f = file.tofile ();
if (f.exists () && f.canread () &&! f.ishidden ())
if (this.keyarray! = null) {
สำหรับ (คีย์สตริง: this.keyarray) {
ถ้า (! this.ismatchcase)
key = key.toLowerCase ();
if (matchFile (ไฟล์ this.mode, key, ismatchcase)))
resultlist.add (file.toString ());
-
-
ส่งคืน filevisitresult.continue;
-
-
* การจับคู่ไฟล์ขึ้นอยู่กับเคสและประเภทหรือชื่อ
-
* ไฟล์ @param
* โหมด @param
* @param key
* @param ismatchcase
* @กลับ
-
Private Boolean MatchFile (ไฟล์พา ธ , โหมด fileTypemode, คีย์สตริง,
บูลีน ismatchcase) {
ไฟล์ f = file.tofile ();
if (f.exists () && f.canread () &&! f.ishidden ()
&&! "ข้อมูลปริมาณระบบ" .Equals (f.getName ())) {
ชื่อไฟล์สตริง = null;
if (fileTypemode.types.equals (โหมด)) {
filename = file.toString ();
return ismatchcase?
.ToLowerCase (). Endswith (คีย์);
} อื่นถ้า (fileTypEmode.names.equals (โหมด)) {
filename = file.tofile (). getName ();
return ismatchcase?
: จริง)
: (filename.toLowerCase (). indexof (คีย์) == -1? false
: จริง);
-
-
กลับเท็จ;
-
@Override
Public FileVisitResult VisitFileFailed (ไฟล์ PATH, IOException EXCC)
โยน ioexception {
// หากข้อความแสดงข้อผิดพลาดมีข้อมูลระดับเสียง x:/ระบบนี่หมายความว่าดิสก์ที่ซ่อนอยู่ของระบบและไม่สามารถอ่านได้
System.out.println (exc.getMessage ());
ส่งคืน filevisitresult.continue;
-
-
-
แพ็คเกจ com.xyq.io.util;
นำเข้า java.io.closeable;
Classioutil ชั้นเรียนสาธารณะ {
-
* ปิดสตรีม io
-
* @param cls
-
โมฆะคงที่สาธารณะ closeall (ปิด ... CLS) {
ถ้า (cls! = null) {
สำหรับ (CLS ที่ปิดได้: CLS) {
พยายาม {
ถ้า (cl! = null)
cl.close ();
} catch (Exception e) {
} ในที่สุด {
cl = null;
-
-
-
-
-
-
แพ็คเกจ com.xyq.io.util;
นำเข้า Java.io.BufferedInputStream;
นำเข้า Java.io.File;
นำเข้า Java.io.FileInputStream;
นำเข้า java.io.ioException;
นำเข้า java.io.unsupportencodingexception;
นำเข้า Java.security.MessageDigest;
นำเข้า java.security.nosuchalgorithmexception;
นำเข้า Sun.misc.base64encoder;
คลาสสาธารณะ MD5UTIL {
-
* สตริงที่เข้ารหัส
-
* @param str
* @กลับ
* @throws nosuchalgorithmexception
* @throws unsupportencodingexception
-
String String Public String encoderStringBymd5 (String Str)
โยน nosuchalgorithmexception, unsupportencodingexception {
// กำหนดวิธีการคำนวณ
MESAGEDIGEST MD5 = MessageGeSt.getInstance ("MD5");
base64Encoder base64en = ใหม่ base64Encoder ();
// สตริงที่เข้ารหัส
String newsr = base64en.encode (md5.digest (str.getBytes ("UTF-8")));
ส่งคืน Newsr;
-
-
* ไฟล์ที่เข้ารหัส
-
* ไฟล์ @param
* @กลับ
* @throws nosuchalgorithmexception
* @throws ioexception
-
String String สาธารณะ encoderFileBymd5 (ไฟล์ไฟล์) {
สตริง newsstr = null;
FileInputStream FIS = NULL;
bufferedInputStream bis = null;
พยายาม {
// กำหนดวิธีการคำนวณ
MESAGEDIGEST MD5 = MessageGeSt.getInstance ("MD5");
base64Encoder base64en = ใหม่ base64Encoder ();
ไบต์ [] บัฟเฟอร์ = ไบต์ใหม่ [1024];
FIS = ใหม่ FileInputStream (ไฟล์);
bis = ใหม่ bufferedInputStream (FIs);
ความยาว int = -1;
ในขณะที่ ((length = bis.read (บัฟเฟอร์))! = -1)
MD5.update (บัฟเฟอร์, 0, ความยาว);
// สตริงที่เข้ารหัส
newSstr = base64en.encode (md5.digest ());
} catch (Exception e) {
E.PrintStackTrace ();
} ในที่สุด {
closeioutil.closeall (bis, fis);
-
ส่งคืน Newsr;
-
โมฆะคงที่สาธารณะหลัก (String [] args) โยน nosuchalgorithmexception, unsupportencodingexception {
System.out.println (ENCODERSTRINGBYMD5 ("23"));
-
-