コードコピーは次のとおりです。
パッケージ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を実装しています{
/***
*ファイルをコピーまたは移動します
*/
@オーバーライド
public boolean copeormovefile(string src、string tar、optionfile_typeタイプ){
REALCOPEORMOVEFILE(PATHS.GET(SRC)、TAR、TYPE)を返します。
}
Private Boolean RealCopeormoveFile(PATH SRCPATH、STRING TAR、
optionfile_typeタイプ){
Path tarpath = null;
boolean copesuccess = true;
//元のファイルが存在する必要があります
if(srcpath.tofile()。exists()){
/***
*元のパスが削られた場合、それはフォルダーと見なされます
*/
if(isdir(tar))
tarpath = paths.get(tar + file.separator
+ srcpath.tofile()。getname());
それ以外
tarpath = paths.get(tar);
/***
*次に、n回を実行(パラメーターとして使用できます)コピー操作(エラー後に再接続)、コピーの上書き、コピー属性、コピー操作がロールバックオプションを使用できないかどうか
*/
for(int i = 0; i <3; i ++){
/***
*ターゲットファイルが既に存在する場合
*/
if(tarpath.tofile()。exists()){
/***
* 2つのフォルダーが同じであることを確認すると、コピーオプションが元のファイルを削除する必要はありません。
*/
// コピー
if(optionfile_type.cope.equals(type)){
if(equalsfile(srcpath.tofile()、tarpath.tofile()))
trueを返します。
それ以外
copesuccess = copefile(srcpath、tarpath、true);
}
/***
*操作を移動します。ここでは、2つのファイルが同じ場合は、非常に注意してください。
*次に、元のファイルを削除するだけです。ただし、2つのファイルが同じで、アドレスも同じである場合
*同じ場合、元のものは同じファイルであり、削除できないため削除できません。
*/
else if(optionfile_type.move.equals(type)){
if(equalsfile(srcpath.tofile()、tarpath.tofile())){
if(!srcpath.tofile()。getabsolutefile())
。
試す {
files.delete(srcpath);
/***
*手動で真のことを指し示す理由は、以前の削除に障害がある可能性があるためです。
*/
if(!copesuccess)
copesuccess = true;
} catch(ioException e){
Copesuccess = false;
}
//正面に例外があるので直接戻りません、ここでそれをするだけです
それ以外
trueを返します。
} それ以外
copesuccess = movefile(srcpath、tarpath);
}
}
/***
*ターゲットファイルが存在しない場合、最初に親クラスフォルダーを作成できるかどうか(親クラスフォルダーが存在するか、作成できるか)を判断し、作成できるときに作成します。
*/
それ以外 {
ファイルpar = tarpath.getParent()。tofile();
/***
*親クラスフォルダが存在せず、作成できない場合、コピーする必要はありません
*/
if(!par.exists()&&!par.mkdirs())
Copesuccess = false;
else if(optionfile_type.cope.equals(type)))
copesuccess = copefile(srcpath、tarpath、false);
else if(optionfile_type.move.equals(type)))
copesuccess = movefile(srcpath、tarpath);
}
//操作が成功した場合、ループは飛び出します
if(copesuccess)
壊す;
}
} それ以外
Copesuccess = false;
copesuccessを返します。
}
/***
*ファイルをコピーします
*/
プライベートブールコープファイル(PATH SRCPATH、PATH TARPATH、BOOLEAN ISEXIST){
if(isexist)
試す {
files.copy(srcpath、tarpath、
StandardCopyoption.Replace_Existing、
StandardCopyoption.Copy_attributes);
} catch(ioException e){
falseを返します。
}
それ以外
試す {
files.copy(srcpath、tarpath、standardcopyoption.copy_attributes);
} catch(ioException e){
falseを返します。
}
trueを返します。
}
/***
*ファイルを移動すると、属性オプションを使用できません
*
* @param srcpath
* @Param Tarpath
* @戻る
*/
プライベートブールムーブファイル(PATH SRCPATH、PATH TARPATH){
試す {
files.move(srcpath、tarpath、standardcopyoption.atomic_move);
} catch(ioException e){
falseを返します。
}
trueを返します。
}
/***
*パスパスがフォルダーであるかどうかを判断します
*
* @param Path
* @戻る
*/
Private Boolean Isdir(String Path){
char lastc = path.charat(path.length() - 1);
if(lastc == '//' || lastc == '/')
trueを返します。
falseを返します。
}
/***
*これは、2つのファイルが同じかどうかを確認するためです。単なる検証であり、検証にMD5を使用することを余儀なくされる可能性があります。
*/
public boolean equalsfile(file src、file tar){
// 2つのファイルの長さが異なる場合、2つのファイルは間違いなく異なります
if(src.length()!= tar.length())
falseを返します。
if(!src.getName()。equals(tar.getName())
||。
md5util.encoderfilebymd5(src).equals(
md5util.encoderfilebymd5(tar));
trueを返します。
}
/***
*フォルダーをコピーまたは移動します
*/
@オーバーライド
public void copeorvedirectory(string src、final string tar、int tiersize、
final optionfile_typeタイプ){
if(!new file(src).exists())
新しいruntimeexception( "oliginal folder not not" + src);
final int rootpos = getRootposition(新しいファイル(SRC)、Tierize);
if(rootpos!= -1){
試す {
files.walkfiletree(paths.get(src)、new filevisitor <sath>(){
string tardirstring = null;
/***
*フォルダに到着する前に、最初にターゲットパスを書き込みます
*
* @param dir
* @param attrs
* @戻る
* @throws ioexception
*/
@オーバーライド
public filevisitResult previsitdirectory(Path dir、
BasicFileAttributes attrss)IoException {
tardirstring = dir.tofile()。getabsolutepath();
tardirstring = tar + tardirstring.substring(rootpos)
+ file.separator;
filevisitResult.continueを返します。
}
/***
*ファイルに到着した後、コピーまたは移動します
*
* @paramファイル
* @param attrs
* @戻る
* @throws ioexception
*/
@オーバーライド
public filevisitResult visitfile(パスファイル、
BasicFileAttributes attrss)IoException {
ファイルf = file.tofile();
if(f.exists()&& f.canread()&&!f.ishidden())
realcopeormovefile(ファイル、ターデストリング、タイプ);
filevisitResult.continueを返します。
}
@オーバーライド
public filevisitResult visitfilefailed(パスファイル、
ioExceptionec)throws ioexception {
filevisitResult.continueを返します。
}
/***
*フォルダーに到着した後
*
* @param dir
* @param excc
* @戻る
* @throws ioexception
*/
@オーバーライド
public filevisitResult postvisitdirectory(path dir、
ioExceptionec)throws ioexception {
filevisitResult.continueを返します。
}
});
} catch(例外e){
e.printstacktrace();
}
//カット操作であり、カットが成功した場合は、すべてのフォルダを削除する必要があります
if(optionfile_type.move.equals(type)&& isblockdir(src)))
Deldir(SRC);
} それ以外
新しいruntimeException( "親クラスフォルダー階層エラー~~~を指定してください");
}
/***
*指定されたレベルに従って指定されたドライブ文字の場所を取得します
*/
private int getRootposition(ファイルファイル、intティア){
if(file!= null){
string path = file.getabsolutepath();
int cc = 0;
for(int i = path.length() - 1; i> = 0; i-){
if(path.charat(i)== '//'){
CC ++;
if(cc == tier + 1){
cc = i;
CCを返します。
}
}
}
}
return -1;
}
/***
*このフォルダーにファイルがあるかどうかを確認します
*
* @param dirpath
* @戻る
*/
プライベートブールisblockdir(string dirpath){
ファイルdir = new file(dirpath);
file [] dirlist = dir.listfiles();
if(dirlist == null || dirlist.length == 0)
trueを返します。
それ以外 {
//ファイルを見つけます
for(ファイルf:dirlist)
if(!f.isdirectory())
falseを返します。
}
trueを返します。
}
/***
*空のフォルダーを削除します
*
* @param dirpath
*/
private void deldir(string dirpath){
ファイルdir = new file(dirpath);
file [] dirlist = dir.listfiles();
if(dirlist == null || dirlist.length == 0)
dir.delete();
それ以外 {
//すべてのファイルを削除します
for(ファイルf:dirlist)
if(f.isdirectory())
deldir(f.getabsolutepath());
それ以外
f.delete();
//現在のフォルダー内のすべてのファイルを削除した後、フォルダを削除します
dirlist = dir.listfiles();
if(dirlist.length == 0)
dir.delete();
}
}
/***
*ファイルタイプに基づいて関連ファイルを見つけます
*/
@オーバーライド
public list <string> findfilesbytype(string dir、string [] keys、
boolean ismatchcase)throws ioexception {
List <String> list = new ArrayList <String>();
files.walkfiletree(paths.get(dir)、new findfileutil(keys、ismatchcase、
list、filetypemode.types));
返品リスト。
}
/***
*ファイル名に基づいて関連ファイルを見つけます
*/
@オーバーライド
パブリックリスト<string> findfilesbyname(string dir、string [] keys、
boolean ismatchcase)throws ioexception {
List <String> list = new ArrayList <String>();
files.walkfiletree(paths.get(dir)、new findfileutil(keys、ismatchcase、
list、filetypemode.names)));
返品リスト。
}
public static void main(string [] args)throws ioexception {
newnioinf inf = new newnio();
inf.CopeorMoveFile( "e:/cc/dd/11.txt"、 "e:/xx/xxx/zzz/"、
optionfile_type.cope);
inf.CopeOMovedirectory( "e:// bb // cc // dd"、 "e://"、1、optionfile_type.move);
system.out.println(inf.findfilesbyname( "d:// workspace"、new String [] {"txt"}、
false).size());
}
}
--------------------------------------
パッケージcom.xyq.io.enums;
/***
*ファイルタイプ
* @author xyq
*
*/
public enum filetypeMode {
タイプ、名前
}
------------------------------------------
パッケージcom.xyq.io.enums;
/***
*操作ファイルのタイプ
* @author xyq
*
*/
public enum optionfile_type {
対処して、動きます。
}
-------------------------------------------------------------- -------------------------------------------------------------- ---------------------------------
パッケージcom.xyq.io.inf;
java.io.ioexceptionをインポートします。
java.util.listをインポートします。
com.xyq.io.enums.optionfile_typeをインポートします。
パブリックインターフェイスnewnioinf {
/***
*ファイルをコピーまたは移動します
* @Param SRC
* @param tar
* @戻る
*/
public boolean copeormovefile(string src、string tar、optionfile_typeタイプ);
/***
*フォルダーをコピーまたは移動します
* @Param SRC
* @param tar
* @Param Tiersize Hierarchy、コピー後のパス0は現在のフォルダーにすぎません。
* @paramタイプ
*/
public void copeorvedirectory(string src、string tar、int tierize、optionfile_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をインポートします。
Public Class FindFileutilはSimpleFilevisitor <ath> {
/***
*キーワードリスト、ケースを変換するかどうか、結果セットを返します
*/
private string [] keyArray = null;
プライベートブールismatchcase;
プライベートリスト<String> resultList;
プライベートFileTypeModeモード。
public findfileutil(string [] keyarray、boolean ismatchcase、
list <string> resultlist、filetypeModeモード){
this.keyArray = keyArray;
this.ismatchcase = ismatchcase;
this.ResultList = resultList;
this.mode = mode;
}
@suppresswarnings( "unsused")
private findfileutil(){
}
@オーバーライド
public filevisitResult visitFile(PATH FILE、BASICFILEATTRIBUTES ATTRS)
IOExceptionをスローする{
ファイルf = file.tofile();
if(f.exists()&& f.canread()&&!f.ishidden())
if(this.keyarray!= null){
for(string key:this.keyarray){
if(!this.ismatchcase)
key = key.tolowercase();
if(matchfile(file、this.mode、key、ismatchcase)))
resultlist.add(file.toString());
}
}
filevisitResult.continueを返します。
}
/***
*ケースとタイプまたは名前に基づくファイルマッチング
*
* @paramファイル
* @paramモード
* @paramキー
* @param ismatchcase
* @戻る
*/
プライベートブールマッチファイル(パスファイル、filetypemodeモード、文字列キー、
boolean ismatchcase){
ファイルf = file.tofile();
if(f.exists()&& f.canread()&&!f.ishdidden()
&&! "システムボリューム情報" .equals(f.getname())){
文字列filename = null;
if(filetypemode.types.equals(mode)){
filename = file.toString();
ISMatchcase.Endswith(key)を返します
.tolowercase()。endswith(key);
} else if(filetypemode.names.equals(mode)){
filename = file.tofile()。getname();
isMatchcaseを返しますか?
: 真実)
:(filename.tolowercase()。indexof(key)== -1?false
: 真実);
}
}
falseを返します。
}
@オーバーライド
public filevisitResult visitFilefailed(PATH FILE、IOEXCEPTION EXCC)
IOExceptionをスローする{
//エラーメッセージにx:/システムのボリューム情報が含まれている場合、これはシステムの非表示ディスクを意味し、読み取れないことを意味します
System.out.println(exc.getMessage());
filevisitResult.continueを返します。
}
}
--------------------------------------
パッケージcom.xyq.io.util;
java.io.closableをインポートします。
パブリッククラスCloseioutil {
/***
* IOストリームを閉じます
*
* @Param CLS
*/
public static void closeall(closeable ... cls){
if(cls!= null){
for(closeable cl:cls){
試す {
if(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
*/
public static string encoderstringbymd5(string str)
nosuchalgorithmexception、unsupportedencodincection {
//計算方法を決定します
MESSAGEDGEST MD5 = MESSAGEDGEST.GETINSTANCE( "MD5");
base64encoder base64en = new base64encoder();
//暗号化された文字列
string newsr = base64en.encode(md5.digest(str.getbytes( "utf-8")));
newsrを返します。
}
/***
*暗号化されたファイル
*
* @paramファイル
* @戻る
* @throws nosuchalgorithmexception
* @throws ioexception
*/
public static string encoderfilebymd5(file file){
string newsstr = null;
fileinputStream fis = null;
bufferedinputStream bis = null;
試す {
//計算方法を決定します
MESSAGEDGEST MD5 = MESSAGEDGEST.GETINSTANCE( "MD5");
base64encoder base64en = new base64encoder();
byte [] buffer = new byte [1024];
fis = new fileInputStream(file);
bis = new BufferedInputStream(FIS);
int length = -1;
while((length = bis.read(buffer))!= -1)
md5.update(buffer、0、length);
//暗号化された文字列
newsstr = base64en.encode(md5.digest());
} catch(例外e){
e.printstacktrace();
} ついに {
closeioutil.closeall(bis、fis);
}
newsrを返します。
}
public static void main(string [] args)がnosuchalgorithmexceptionをスローし、unsupportedencodingexception {
System.out.println(encoderstringbymd5( "23"));
}
}