نسخة الكود كما يلي:
حزمة 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 ؛
الطبقة العامة Newnio تنفذ newnioinf {
/***
* نسخ أو نقل الملفات
*/
@تجاوز
copeormovefile المنطقية العامة (سلسلة SRC ، سلسلة القطران ، خيار File_Type) {
إرجاع realcopeormovefile (paths.get (src) ، tar ، type) ؛
}
realcopeormovefile المنطقي الخاص (Path SRCPath ، String Tar ،
نوع الخيار file_type) {
المسار tarpath = فارغ ؛
copesuccess المنطقية = صواب ؛
// يجب أن يكون الملف الأصلي موجودًا
if (srcpath.tofile (). موجود ()) {
/***
* إذا تم قطع المسار الأصلي ، فهو يعتبر مجلد
*/
إذا (ISDIR (TAR))
tarpath = paths.get (tar + file.separator
+ srcpath.tofile (). getName ()) ؛
آخر
tarpath = paths.get (tar) ؛
/***
* ثم تنفيذ الأوقات n (يمكن استخدامها كمعلمات) عملية نسخ (إعادة الاتصال بعد الخطأ) ، سواء كان ذلك إلى النسخ فوق النسخ ، سمة النسخ ، لا يمكن للنسخ استخدام خيار التراجع
*/
لـ (int i = 0 ؛ i <3 ؛ i ++) {
/***
* إذا كان الملف الهدف موجود بالفعل
*/
if (tarpath.tofile (). موجود ()) {
/***
* إذا كنت تتحقق من أن المجلدين متماثلين ، فلن تحتاج إلى نسخ ضمن خيار النسخ.
*/
// ينسخ
if (OptionFile_Type.cope.equals (type)) {
if (equalsfile (srcpath.tofile () ، tarpath.tofile ()))
العودة صحيح.
آخر
copesuccess = copefile (srcpath ، tarpath ، true) ؛
}
/***
* نقل العملية ، كن حذرا للغاية هنا.
* ثم فقط حذف الملف الأصلي. ومع ذلك ، إذا كان الملفان متماثلان وعنوانه أيضًا
* إذا كان الأمر نفسه ، فلا يمكن حذف النسخة الأصلية لأنه نفس الملف ولا يمكن حذفه.
*/
آخر if (OptionFile_Type.move.equals (type)) {
if (equalsfile (srcpath.tofile () ، tarpath.tofile ())) {
if (! srcpath.tofile (). getabsolutefile ())
.equals (tarpath.tofile (). getabsolutefile ())))
يحاول {
files.delete (srcpath) ؛
/***
* سبب الإشارة إلى True يدويًا هو أنه قد يكون هناك فشل في الحذف السابق.
*/
إذا (! copesuccess)
copesuccess = صحيح ؛
} catch (ioException e) {
copesuccess = false ؛
}
// لا أعود مباشرة لأن هناك استثناء في المقدمة ، فقط افعله هنا
آخر
العودة صحيح.
} آخر
copesuccess = movefile (srcpath ، tarpath) ؛
}
}
/***
* عندما لا يكون الملف الهدف موجودًا ، حدد أولاً ما إذا كان يمكن إنشاء مجلد الفئة الأصل (موجود مجلد الفئة الأصل أو يمكن إنشاؤه) ، ثم إنشاءه عند إنشاءه.
*/
آخر {
ملف par = tarpath.getParent (). tofile () ؛
/***
* إذا لم يكن مجلد الفئة الأصل غير موجود ولا يمكن إنشاؤه ، فلا داعي لنسخه
*/
if (! par.exists () &&! par.mkdirs ())
copesuccess = false ؛
وإلا إذا (OptionFile_Type.cope.equals (النوع))
copesuccess = copefile (srcpath ، tarpath ، false) ؛
وإلا إذا (OptionFile_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
* @يعود
*/
Movefile المنطقية الخاصة (المسار SRCPATH ، PATH TARPATH) {
يحاول {
files.move (srcpath ، tarpath ، standardcopyoption.atomic_move) ؛
} catch (ioException e) {
العودة كاذبة
}
العودة صحيح.
}
/***
* تحديد ما إذا كان مسار المسار هو مجلد
*
* param path
* @يعود
*/
isdir boolean الخاص (مسار السلسلة) {
char lastc = path.charat (path.length () - 1) ؛
if (lastc == '//' || lastc == '/')
العودة صحيح.
العودة كاذبة
}
/***
* هذا للتحقق مما إذا كان الملفان متماثلان ، إنه مجرد التحقق البسيط ، ويمكن إجباره على استخدام MD5 للتحقق منهما
*/
منطقية عامة متساوية (ملف SRC ، ملف القطران) {
// إذا كانت أطوال الملفتين مختلفة ، فإن الملفان مختلفان بالتأكيد
if (src.length ()! = tar.length ())
العودة كاذبة
if (! src.getName (). يساوي (tar.getName ())
||
إرجاع MD5UTIL.ENCODERFILEBYMD5 (SRC) .equals (
MD5UTIL.ENCODERFILEBYMD5 (TAR)) ؛
العودة صحيح.
}
/***
* نسخ أو نقل المجلدات
*/
@تجاوز
الفراغ العام copeormovedirectory (سلسلة SRC ، القطران النهائي ، int tiersize ،
نوع الخيار النهائي _type) {
if (! ملف جديد (SRC) .exists ())
رمي جديد RunTimeException ("المجلد الأصلي لم يتم العثور عليه" + SRC) ؛
int int rootpos = getRootPosition (ملف جديد (SRC) ، tiersize) ؛
if (rootpos! = -1) {
يحاول {
files.walkfiletree (paths.get (SRC) ، FileVisitor new <Path> () {
سلسلة tardirstring = فارغة ؛
/***
* قبل الوصول إلى المجلد ، اكتب المسار الهدف أولا
*
* param dir
* param attrs
* @يعود
* throws ioException
*/
@تجاوز
previsitdirectory previsitdirectory previsitdirectory (Path Dir ،
سمات BasicFileAttributes) يلقي IoException {
tardirstring = dir.tofile (). getabsolutepath () ؛
tardirstring = tar + tardirstring.substring (rootpos)
+ file.separator ؛
إرجاع fileVisitResult.Continue ؛
}
/***
* بعد الوصول إلى الملف ، نسخه أو نقله
*
* ملف param
* param attrs
* @يعود
* throws ioException
*/
@تجاوز
FileVisitResult VisitFile (ملف المسار ،
سمات BasicFileAttributes) يلقي IoException {
ملف f = file.tofile () ؛
if (f.exists () && f.canread () &&! f.ishidden ())
realcopeormovefile (ملف ، tardirstring ، النوع) ؛
إرجاع fileVisitResult.Continue ؛
}
@تجاوز
FileVisitResult VisitFileFailed (ملف المسار ،
ioException Exc) يلقي ioexception {
إرجاع fileVisitResult.Continue ؛
}
/***
* بعد الوصول إلى المجلد
*
* param dir
* param excc
* @يعود
* throws ioException
*/
@تجاوز
publicvisitresult postvisitdirectory (path dir ،
ioException Exc) يلقي ioexception {
إرجاع fileVisitResult.Continue ؛
}
}) ؛
} catch (استثناء e) {
E.PrintStackTrace () ؛
}
// إذا كانت عملية مقطوعة ونجاح القطع ، فأنت بحاجة إلى حذف جميع المجلدات
if (OptionFile_Type.move.equals (type) && isBlockdir (SRC))
Deldir (SRC) ؛
} آخر
رمي New RunTimeException ("حدد خطأ التسلسل الهرمي مجلد فئة Parent ~~~") ؛
}
/***
* احصل على موقع خطاب محرك الأقراص المحدد وفقًا للمستوى المحدد
*/
private int getRootposition (ملف الملف ، int tier) {
if (ملف! = فارغ) {
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
*/
private void 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 () ؛
}
}
/***
* ابحث عن الملفات ذات الصلة بناءً على نوع الملف
*/
@تجاوز
القائمة العامة <String> FindFilesByType (String Dir ، String [] Keys ،
isMatchcase Boolean) يلقي ioexception {
قائمة <Tring> list = new ArrayList <String> () ؛
files.walkfiletree (paths.get (dir) ، new FindFileUtil (Keys ، IsMatchcase ،
قائمة ، filetypeMode.types)) ؛
قائمة العودة
}
/***
* ابحث عن الملفات ذات الصلة بناءً على اسم الملف
*/
@تجاوز
القائمة العامة <String> FindFilesByName (String Dir ، String [] Keys ،
isMatchcase Boolean) يلقي ioexception {
قائمة <Tring> list = new ArrayList <String> () ؛
files.walkfiletree (paths.get (dir) ، new FindFileUtil (Keys ، IsMatchcase ،
قائمة ، fileTypeMode.names)) ؛
قائمة العودة
}
الفراغ الثابت العام (سلسلة [] 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 ، OptionFile_Type.Move) ؛
System.out.println (inf.findfilesbyname ("D: // Workspace" ، سلسلة جديدة [] {"txt"} ،
خطأ) .size ()) ؛
}
}
----------------------------------
حزمة com.xyq.io.enums ؛
/***
* نوع الملف
* Author xyq
*
*/
التعداد العام fileTypeMode {
الأنواع والأسماء
}
-----------------------------
حزمة com.xyq.io.enums ؛
/***
* نوع ملف التشغيل
* Author xyq
*
*/
التعداد العام OptionFile_Type {
معالجة ، تحرك.
}
------------------------------------------------- ------------------------------------------------- -----------------------------
حزمة com.xyq.io.inf ؛
استيراد java.io.ioException ؛
استيراد java.util.list ؛
استيراد com.xyq.io.enums.optionfile_type ؛
الواجهة العامة newnioinf {
/***
* نسخ أو نقل الملفات
* param src
* param tar
* @يعود
*/
copeormovefile المنطقية العامة (سلسلة SRC ، سلسلة القطران ، خيار file_type) ؛
/***
* نسخ أو نقل المجلدات
* param src
* param tar
* param tiersize التسلسل الهرمي ، المسار 0 بعد النسخ هو مجرد المجلد الحالي ، +1 يعني إضافة مجلد فئة الوالدين من المستوى الأول (ولكن لا يتم نسخ محتوى الفئة الأصل)
* نوع param
*/
public void copeormovedirectory (سلسلة SRC ، السلسلة القطران ، tiersize ، thorefile_type type) ؛
/**
* ابحث عن مجموعات الملفات ذات الصلة بناءً على نوع الملف ، افصلها مع الفواصل عندما تكون أنواعًا متعددة
*
* param dir
* جدول المحتويات
* مفاتيح param
* نوع الملف
* param isMatchcase
* ما إذا كان حساس الحالة
* @يعود
* throws ioException
*/
قائمة <String> FindFilesByType (String Dir ، String [] Keys ، Boolean Ismatchcase)
يلقي ioexception ؛
/**
* ابحث عن مجموعات الملفات ذات الصلة بناءً على اسم الملف ، افصلها مع الفواصل عندما تكون هناك شروط مدنية متعددة
*
* param dir
* جدول المحتويات
* مفاتيح param
* اسم الملف
* param isMatchcase
* ما إذا كان حساس الحالة
* @يعود
* throws ioException
*/
قائمة <String> FindFilesByName (String Dir ، String [] Keys ، Boolean 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> resultlist ؛
وضع fileTypeMode الخاص ؛
Public FindFileutil (String [] Keyarray ، Boolean Ismatchcase ،
قائمة <Tring> resultlist ، وضع fileTypeMode) {
this.keyarray = keyarray ؛
this.ismatchcase = isMatchCase ؛
this.resultlist = resultlist ؛
this.mode = mode ؛
}
suppressWarnings ("غير مستخدم")
Private FindFileutil () {
}
@تجاوز
FileVisitResult VisitFile (ملف المسار ، سمات BasicFileAttributes)
يلقي ioexception {
ملف f = file.tofile () ؛
if (f.exists () && f.canread () &&! f.ishidden ())
if (this.keyarray! = null) {
لـ (مفتاح السلسلة: this.keyarray) {
إذا (! this.ismatchcase)
المفتاح = key.toLowerCase () ؛
if (matchfile (file ، this.mode ، key ، isMatchCase))
resultlist.add (file.toString ()) ؛
}
}
إرجاع fileVisitResult.Continue ؛
}
/***
* مطابقة الملفات بناءً على الحالة والنوع أو الاسم
*
* ملف param
* وضع param
* مفتاح param
* param isMatchcase
* @يعود
*/
Matchfile الخاص بالطائرة المنطقية (ملف المسار ، وضع filetypeMode ، مفتاح السلسلة ،
منطقية isMatchcase) {
ملف f = file.tofile () ؛
if (f.exists () && f.canread () &&! f.ishidden ()
&&! "معلومات حجم النظام" .equals (f.getName ())) {
اسم ملف السلسلة = فارغ ؛
if (fileTypeMode.types.equals (mode)) {
filename = file.toString () ؛
إرجاع isMatchcase؟
.ToLowerCase (). endswith (مفتاح) ؛
} آخر if (fileTypeMode.names.equals (mode)) {
filename = file.tofile (). getName () ؛
إرجاع isMatchcase؟
: حقيقي)
: (filename.toLowerCase (). indexof (مفتاح) == -1؟ خطأ
: حقيقي)؛
}
}
العودة كاذبة
}
@تجاوز
Public FileVisitResult VisitFileFailed (ملف المسار ، IoException Excc)
يلقي ioexception {
// إذا كانت رسالة الخطأ تحتوي
system.out.println (exc.getMessage ()) ؛
إرجاع fileVisitResult.Continue ؛
}
}
----------------------------------
حزمة com.xyq.io.util ؛
استيراد java.io.closable ؛
الطبقة العامة CloseIoutil {
/***
* أغلق دفق IO
*
* param CLS
*/
الفراغ الثابت العام CloseAll (قابلة للإغلاق ... CLS) {
if (cls! = null) {
لـ (CL: CLS) {
يحاول {
إذا (CL! = NULL)
Cl.Close () ؛
} catch (استثناء e) {
} أخيراً {
CL = NULL ؛
}
}
}
}
}
------------------------------------------------- ------------------------------------------------- -----------------------------
حزمة com.xyq.io.util ؛
استيراد java.io.bufferedInputStream ؛
استيراد java.io.file ؛
استيراد java.io.fileInputStream ؛
استيراد java.io.ioException ؛
استيراد java.io.unsupportedencodingException ؛
استيراد java.security.messagedigest ؛
استيراد java.security.nosuchalgorithmexception ؛
استيراد sun.misc.base64encoder ؛
الطبقة العامة MD5UTIL {
/***
* سلسلة مشفرة
*
* param str
* @يعود
* throws nosuchalgorithmexception
* Throws UnsupportedEncodingException
*/
سلسلة ثابتة عامة تشفير reverstringbymd5
يلقي nosuchalgorithmexception ، غير مدعوم
// تحديد طريقة الحساب
messagedigest md5 = messagedigest.getInstance ("MD5") ؛
BASE64ENCODER BASE64EN = NEW BASE64ENCODER () ؛
// سلسلة مشفرة
String Newsr = base64en.encode (md5.digest (str.getBytes ("utf-8"))) ؛
إرجاع الأخبار ؛
}
/***
* الملفات المشفرة
*
* ملف param
* @يعود
* throws nosuchalgorithmexception
* throws ioException
*/
سلسلة charderfilebymd5 (ملف ملف) {ملف) {ملف) {ملف) {
سلسلة newsstr = null ؛
FileInputStream Fis = NULL ؛
BufferedInputStream BIS = NULL ؛
يحاول {
// تحديد طريقة الحساب
messagedigest md5 = messagedigest.getInstance ("MD5") ؛
BASE64ENCODER BASE64EN = NEW BASE64ENCODER () ؛
Byte [] Buffer = New Byte [1024] ؛
FIS = جديد fileInputStream (ملف) ؛
BIS = جديد bufferedInputStream (FIS) ؛
طول int = -1 ؛
بينما ((الطول = bis.Read (عازلة))! = -1)
md5.update (المخزن المؤقت ، 0 ، الطول) ؛
// سلسلة مشفرة
newsstr = base64en.encode (md5.digest ()) ؛
} catch (استثناء e) {
E.PrintStackTrace () ؛
} أخيراً {
CloseIoutil.closeall (مكرر ، FIS) ؛
}
إرجاع الأخبار ؛
}
الفراغ الثابت العام (سلسلة [] args) يلقي nosuchalgorithmexception ، غير مدعوم
System.out.println (EncoderStringByMd5 ("23")) ؛
}
}