Salinan kode adalah sebagai berikut:
paket com.xyq.io.simply.core;
impor java.io.file;
impor java.io.ioException;
impor java.nio.file.filevisitresult;
impor java.nio.file.filevisitor;
impor java.nio.file.files;
impor java.nio.file.path;
impor java.nio.file.paths;
impor java.nio.file.standardcopyoption;
impor java.nio.file.attribute.basicfileattributes;
impor java.util.arraylist;
impor java.util.list;
impor com.xyq.io.enums.filetypeMode;
impor com.xyq.io.enums.optionfile_type;
impor com.xyq.io.inf.newnioinf;
impor com.xyq.io.util.findfileutil;
impor com.xyq.io.util.md5util;
Kelas publik Newnio mengimplementasikan newnioinf {
/***
* Salin atau pindahkan file
*/
@Mengesampingkan
public boolean copeormoveeffile (string src, string tar, optionFile_type type) {
return realcopeormovefile (paths.get (src), tar, type);
}
Private Boolean RealCopeormoveFefile (Path Srcpath, String Tar,
Optionfile_type type) {
Jalur tarpath = null;
boolean copesuccess = true;
// file asli harus ada
if (srcpath.tofile (). Exists ()) {
/***
* Jika jalur asli dipotong, maka itu dianggap sebagai folder
*/
if (isdir (tar))
tarpath = paths.get (tar + file.separator
+ srcpath.tofile (). getName ());
kalau tidak
tarpath = paths.get (tar);
/***
* Kemudian lakukan n kali (dapat digunakan sebagai parameter) Operasi salin (Reconnection setelah kesalahan), apakah akan menimpa salin, salin atribut, salin operasi tidak dapat menggunakan opsi Rollback
*/
untuk (int i = 0; i <3; i ++) {
/***
* Jika file target sudah ada
*/
if (tarpath.tofile (). Exists ()) {
/***
* Jika Anda memverifikasi bahwa kedua folder itu sama, Anda tidak perlu menyalin di bawah opsi salin.
*/
// salin
if (optionfile_type.cope.equals (type)) {
if (equalsfile (srcpath.tofile (), tarpath.tofile ())))
Kembali Benar;
kalau tidak
copesuccess = copefile (srcpath, tarpath, true);
}
/***
* Pindahkan operasi, berhati -hatilah di sini.
* Kemudian hapus saja file asli. Namun, jika kedua file tersebut sama dan alamatnya juga
* Jika sama, maka yang asli tidak dapat dihapus karena itu adalah file yang sama dan tidak dapat dihapus.
*/
lain if (optionFile_type.move.equals (type)) {
if (equalsfile (srcpath.tofile (), tarpath.tofile ())) {
if (! srcpath.tofile (). getabsolutefile ())
.Equals (Tarpath.tofile (). Getabsolutefile ()))
mencoba {
File.delete (srcpath);
/***
* Alasan untuk menunjuk ke benar secara manual adalah bahwa mungkin ada kegagalan dalam penghapusan sebelumnya.
*/
if (! Copesuccess)
copesuccess = true;
} catch (ioException e) {
copesuccess = false;
}
// Saya tidak kembali secara langsung karena ada pengecualian di depan, lakukan saja di sini
kalau tidak
Kembali Benar;
} kalau tidak
copesuccess = movefile (srcpath, tarpath);
}
}
/***
* Ketika file target tidak ada, pertama -tama tentukan apakah folder kelas induk dapat dibuat (folder kelas induk ada atau dapat dibuat), dan kemudian buat ketika dapat dibuat.
*/
kalau tidak {
File par = tarpath.getParent (). Tofile ();
/***
* Jika folder kelas induk tidak ada dan tidak dapat dibuat, maka tidak perlu menyalinnya
*/
if (! par.exists () &&! par.mkdirs ())
copesuccess = false;
lain if (optionfile_type.cope.equals (type))
copesuccess = copefile (srcpath, tarpath, false);
lain jika (optionfile_type.move.equals (type))
copesuccess = movefile (srcpath, tarpath);
}
// Jika operasinya berhasil, loop akan melompat keluar
if (copesuccess)
merusak;
}
} kalau tidak
copesuccess = false;
return copesuccess;
}
/***
* Salin file
*/
Private Boolean Copefile (Path SrcPath, Path Tarpath, Boolean Isexist) {
if (isexist)
mencoba {
File.copy (srcpath, tarpath,
StandardCopyOption.replace_existing,
StandardCopyOption.copy_attributes);
} catch (ioException e) {
mengembalikan false;
}
kalau tidak
mencoba {
File.copy (srcpath, tarpath, standardcopyoption.copy_attributes);
} catch (ioException e) {
mengembalikan false;
}
Kembali Benar;
}
/***
* Memindahkan file, tidak ada opsi atribut yang dapat digunakan
*
* @param srcpath
* @param Tarpath
* @kembali
*/
Private Boolean Movefile (Path SrcPath, Path Tarpath) {
mencoba {
File.move (srcpath, tarpath, standardcopyoption.atomic_move);
} catch (ioException e) {
mengembalikan false;
}
Kembali Benar;
}
/***
* Tentukan apakah jalur jalur adalah folder
*
* Jalur @param
* @kembali
*/
private boolean isdir (string path) {
char lastc = path.charat (path.length () - 1);
if (lastc == '//' || lastc == '/')
Kembali Benar;
mengembalikan false;
}
/***
* Ini untuk memverifikasi apakah kedua file tersebut sama, itu hanya verifikasi sederhana, dan dapat dipaksa untuk menggunakan MD5 untuk verifikasi
*/
Public Boolean EqualsFile (File SRC, File Tar) {
// Jika panjang kedua file tersebut berbeda, maka kedua file tersebut pasti berbeda
if (src.length ()! = tar.length ())
mengembalikan false;
if (! src.getName (). Equals (tar.getName ())
||.
return md5util.encoderfilebymd5 (src) .equals (
Md5util.encoderfilebymd5 (tar));
Kembali Benar;
}
/***
* Salin atau pindahkan folder
*/
@Mengesampingkan
public void copeormovedirectory (string src, final string tar, int tiersize,
final optionfile_type type) {
if (! new file (src) .exists ())
Lempar RuntimeException baru ("Folder Asli Tidak Ditemukan" + SRC);
final int rootpos = getrootposition (file baru (src), tiersize);
if (rootpos! = -1) {
mencoba {
File.walkfiletree (paths.get (src), filevisitor baru <Tath> () {
String tardirstring = null;
/***
* Sebelum tiba di folder, tulis jalur target terlebih dahulu
*
* @param dir
* @param attrs
* @kembali
* @Throws IoException
*/
@Mengesampingkan
Publik FilevisitResult PrevisitDirectory (Path Dir,
BASICFileAttributes attrs) melempar ioException {
tardirString = dir.tofile (). getabsolutePath ();
tardirstring = tar + tardirstring.substring (rootpos)
+ File.separator;
return filevisitresult.continue;
}
/***
* Setelah tiba di file, salin atau pindahkan
*
* file @param
* @param attrs
* @kembali
* @Throws IoException
*/
@Mengesampingkan
Public FilevisitResult Visitfile (File Path,
BASICFileAttributes attrs) melempar ioException {
File f = file.tofile ();
if (f.exists () && f.canread () &&! f.ishidden ())
RealCopeormoveFefile (File, TardirString, Type);
return filevisitresult.continue;
}
@Mengesampingkan
Public FilevisitResult VisitFileFaileded (Path File,
IoException exc) melempar ioException {
return filevisitresult.continue;
}
/***
* Setelah tiba di folder
*
* @param dir
* @param excc
* @kembali
* @Throws IoException
*/
@Mengesampingkan
Publik PostvisitDirectory (Path, Path, Path, Path,
IoException exc) melempar ioException {
return filevisitresult.continue;
}
});
} catch (Exception e) {
e.printstacktrace ();
}
// Jika itu adalah operasi pemotongan dan potongannya berhasil, maka Anda perlu menghapus semua folder
if (optionfile_type.move.equals (type) && isBlockDir (src))
Deldir (SRC);
} kalau tidak
Lempar RuntimeException baru ("Tentukan kesalahan hirarki folder kelas induk ~~~");
}
/***
* Dapatkan lokasi surat drive yang ditentukan sesuai dengan level yang ditentukan
*/
private int getrootposition (file file, int tier) {
if (file! = null) {
String path = file.getAbsolutePath ();
int cc = 0;
untuk (int i = path.length ()-1; i> = 0; i--) {
if (path.charat (i) == '//') {
CC ++;
if (cc == Tier + 1) {
cc = i;
mengembalikan CC;
}
}
}
}
kembali -1;
}
/***
* Periksa apakah ada file di folder ini
*
* @param Dirpath
* @kembali
*/
private boolean isBlockdir (string dirpath) {
File dir = file baru (dirpath);
File [] dirlist = dir.listfiles ();
if (dirlist == null || dirlist.length == 0)
Kembali Benar;
kalau tidak {
// Temukan file
untuk (file f: Dirlist)
if (! f.isdirectory ())
mengembalikan false;
}
Kembali Benar;
}
/***
* Hapus folder kosong
*
* @param Dirpath
*/
private void deldir (string dirpath) {
File dir = file baru (dirpath);
File [] dirlist = dir.listfiles ();
if (dirlist == null || dirlist.length == 0)
dir.delete ();
kalau tidak {
// hapus semua file
untuk (file f: Dirlist)
if (f.isdirectory ())
deldir (f.getAbsolutePath ());
kalau tidak
f.delete ();
// Hapus folder setelah menghapus semua file di folder saat ini
Dirlist = dir.listfiles ();
if (dirlist.length == 0)
dir.delete ();
}
}
/***
* Temukan file yang relevan berdasarkan jenis file
*/
@Mengesampingkan
Daftar Publik <String> findFilesByType (string dir, tombol string [],
Boolean IsMatchcase) melempar ioException {
Daftar <String> Daftar = ArrayList baru <string> ();
File.walkfileTree (paths.get (dir), findfileutil baru (tombol, isMatchcase,
daftar, filetypeMode.Types));
daftar pengembalian;
}
/***
* Temukan file yang relevan berdasarkan nama file
*/
@Mengesampingkan
Daftar Publik <String> findFilesByName (string dir, tombol string [],
Boolean IsMatchcase) melempar ioException {
Daftar <String> Daftar = ArrayList baru <string> ();
File.walkfileTree (paths.get (dir), findfileutil baru (tombol, isMatchcase,
daftar, filetypeMode.names));
daftar pengembalian;
}
public static void main (string [] args) melempar ioException {
Newnioinf inf = newnio baru ();
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", string baru [] {"txt"},
false) .size ());
}
}
--------------------------------
paket com.xyq.io.enums;
/***
* Jenis file
* @author xyq
*
*/
public enum filetypeMode {
Jenis, Nama
}
---------------------------------
paket com.xyq.io.enums;
/***
* Jenis file operasi
* @author xyq
*
*/
PUBLIK ENUM OPTIFFILE_TYPE {
COPE, Pindah;
}
-------------------------------------------------- -------------------------------------------------- ----------------------------
paket com.xyq.io.inf;
impor java.io.ioException;
impor java.util.list;
impor com.xyq.io.enums.optionfile_type;
antarmuka publik newnioinf {
/***
* Salin atau pindahkan file
* @param src
* @param tar
* @kembali
*/
public boolean copeormoveeffile (string src, string tar, optionfile_type type);
/***
* Salin atau pindahkan folder
* @param src
* @param tar
* @param Tiersize Hierarchy, jalur 0 Setelah menyalin hanyalah folder saat ini, +1 berarti menambahkan folder kelas induk tingkat pertama (tetapi tidak menyalin konten kelas induk)
* Tipe @param
*/
public void copeormovedirectory (string src, string tar, int tiersize, optionfile_type type);
/**
* Temukan koleksi file yang relevan berdasarkan jenis file, pisahkan dengan koma saat beberapa jenis
*
* @param dir
* Daftar isi
* @param Keys
* Jenis file
* @param isMatchcase
* Apakah itu sensitif pada kasus
* @kembali
* @Throws IoException
*/
Daftar <String> findFilesByType (string dir, tombol string [], boolean ismatchcase)
melempar IoException;
/**
* Temukan koleksi file yang relevan berdasarkan nama file, pisahkan dengan koma saat beberapa istilah sipil
*
* @param dir
* Daftar isi
* @param Keys
* Nama file
* @param isMatchcase
* Apakah itu sensitif pada kasus
* @kembali
* @Throws IoException
*/
Daftar <String> findFilesByName (string dir, tombol string [], boolean isMatchcase)
melempar IoException;
}
---------------------
paket com.xyq.io.util;
impor java.io.file;
impor java.io.ioException;
impor java.nio.file.filevisitresult;
impor java.nio.file.path;
impor java.nio.file.Simplefilevisitor;
impor java.nio.file.attribute.basicfileattributes;
impor java.util.list;
impor com.xyq.io.enums.filetypeMode;
Kelas Publik FindFileutil Memperluas SimpleFileVisitor <Path> {
/***
* Daftar Kata Kunci, apakah akan mengonversi casing, kembalikan set hasil
*/
Private String [] keyArray = null;
ismatchcase boolean pribadi;
Daftar Privat <String> Hasil;
mode filetypeMode pribadi;
Publik FindFileutil (String [] KeyArray, Boolean IsMatchcase,
Daftar <string> resultList, Mode FileTyPeMode) {
this.keyArray = keyarray;
this.ismatchcase = isMatchCase;
this.ResultList = hasil Hasil;
this.mode = mode;
}
@Suppresswarnings ("tidak digunakan")
private findFileutil () {
}
@Mengesampingkan
Public FilevisitResult VisitFile (File Path, BasicFileAttributes Attrs)
melempar ioException {
File f = file.tofile ();
if (f.exists () && f.canread () &&! f.ishidden ())
if (this.keyArray! = null) {
untuk (tombol string: this.keyArray) {
if (! this.isischcase)
key = key.tolowercase ();
if (matchfile (file, this.mode, key, isMatchCase))
resultList.add (file.toString ());
}
}
return filevisitresult.continue;
}
/***
* Pencocokan file berdasarkan kasus dan jenis atau nama
*
* file @param
* Mode @param
* Kunci @param
* @param isMatchcase
* @kembali
*/
Private Boolean MatchFile (File Path, Mode FileTyPeMode, Kunci String,
boolean isMatchcase) {
File f = file.tofile ();
if (f.exists () && f.canread () &&! f.ishidden ()
&&! "Informasi Volume Sistem" .Equals (f.getName ())) {
String fileName = null;
if (filetypeMode.types.equals (mode)) {
fileName = file.toString ();
Return IsMatchcase?
.tolowercase (). endswith (kunci);
} lain jika (filetypeMode.names.equals (mode)) {
filename = file.tofile (). getName ();
mengembalikan isMatchcase?
: BENAR)
: (filename.tolowercase (). indexOf (tombol) == -1? Salah
: BENAR);
}
}
mengembalikan false;
}
@Mengesampingkan
Public FilevisitResult VisitFileFailed (Path File, IoException EXCC)
melempar ioException {
// Jika pesan kesalahan berisi informasi volume x:/sistem, ini berarti disk tersembunyi sistem dan tidak dapat dibaca
System.out.println (exc.getMessage ());
return filevisitresult.continue;
}
}
--------------------------------
paket com.xyq.io.util;
impor java.io.closable;
closeoutil kelas publik {
/***
* Tutup aliran IO
*
* @param cls
*/
public static void closeall (closeable ... cls) {
if (cls! = null) {
for (clutup cl: cls) {
mencoba {
if (cl! = null)
cl.close ();
} catch (Exception e) {
} Akhirnya {
cl = null;
}
}
}
}
}
-------------------------------------------------- -------------------------------------------------- ----------------------------
paket com.xyq.io.util;
impor java.io.bufferedInputStream;
impor java.io.file;
impor java.io.fileInputStream;
impor java.io.ioException;
impor java.io.unsupportedencodingException;
impor java.security.messagedigest;
impor java.security.nosuchalgorithmException;
impor sun.misc.base64encoder;
kelas publik md5util {
/***
* String terenkripsi
*
* @param str
* @kembali
* @Throws nosuchalgorithmException
* @Throws UnsportedencodingException
*/
Public String Statis EncoderstringByMD5 (String Str)
Melempar NosuchalgorithMException, UnsportedencodingException {
// Tentukan metode perhitungan
MessageSpetest MD5 = MessageScageTigest.getInstance ("md5");
Base64encoder base64en = base64Encoder baru ();
// string terenkripsi
String newsr = base64en.encode (md5.gigest (str.getbytes ("utf-8"))));
return Newsr;
}
/***
* File terenkripsi
*
* file @param
* @kembali
* @Throws nosuchalgorithmException
* @Throws IoException
*/
Public Static String EncoderFilebyMD5 (File File) {
String newSstr = null;
FileInputStream fis = null;
BufferedInputStream bis = null;
mencoba {
// Tentukan metode perhitungan
MessageSpetest MD5 = MessageScageTigest.getInstance ("md5");
Base64encoder base64en = base64Encoder baru ();
byte [] buffer = byte baru [1024];
fis = FileInputStream baru (file);
bis = baru bufferedInputStream (FIS);
int panjang = -1;
while ((length = bis.read (buffer))! = -1)
md5.update (buffer, 0, panjang);
// string terenkripsi
newsstr = base64en.encode (md5.gigest ());
} catch (Exception e) {
e.printstacktrace ();
} Akhirnya {
Closeoutil.closeall (bis, fis);
}
return Newsr;
}
public static void main (string [] args) melempar nosuchalgorithMexception, unsportedencodingException {
System.out.println (EncoderstringByMD5 ("23"));
}
}