锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
鏈枃涓垜浠潵璁ㄨ鍦?span onclick="tagshow(event)" class="t_tag">NIO2涓庢牱鍒涘緩鏂囦歡銆佽鍙栨枃浠跺拰鍐欐枃浠躲侼IO2鎻愪緵浜?jiǎn)澶毧U嶅垱寤?
鏂囦歡鐨勬柟娉曪紝浣垮緱鎴戜滑鍦ㄥ垱寤烘枃浠剁殑鏃跺欏氨鍙互鎸囧畾鏂囦歡鐨勬煇浜涘垵濮嬪睘鎬с備緥濡傚湪鏀寔POSIX鐨勬枃浠剁郴緇熶笂鎸囧畾鏂囦歡鐨勬墍鏈夎咃紝璁塊棶鏉冮檺絳夈傚叧浜庢枃浠剁殑灞炴э紝
璇風(fēng)湅涓婁竴綃囨枃绔?a target="_blank">Java SE 7鏂扮壒鎬т箣鏂囦歡鎿嶄綔錛?錛?- 綆$悊鍏冩暟鎹?/a>
鍒涘緩鏂囦歡
鍙互璋冪敤createFile(FileAttribute<?>)鏂規(guī)硶鍒涘緩涓涓┖鏂囦歡銆傝鏂規(guī)硶鐨勫弬鏁板氨鏄枃浠剁殑鍒濆灞炴с備笅闈㈢殑渚嬪瓙鏄庢牱
鍦ㄥ垱寤烘枃浠剁殑鏃跺欒祴浜堣鏂囦歡鏌愪簺鏉冮檺鐨勫睘鎬э細(xì)
;
Path newFile = ;
PosixFileAttributes attrs = Attributes.readPosixFileAttributes(sourceFile);
FileAttribute<Set<PosixFilePermission>> attr =
PosixFilePermissions.asFileAttribute(attrs.permissions());
try {
file.createFile(attr);
} catch (IOException x) {
//unable to create the file
}
;
try {
file.createFile(); //Create the empty file with default permissions, etc.
} catch (FileAlreadyExists x) {
System.err.format("file named %s already exists%n", file);
} catch (IOException x) {
//Some other sort of failure, such as permissions.
System.err.format("createFile error: %s%n", x);
}
鎴戜滑鍙互閫氳繃newInputStream錛圤penOption...)鏂規(guī)硶鎵撳紑鍜岃鍙栨枃浠躲傝繖涓柟娉曡繑鍥炰竴涓猽nbuffered杈撳叆嫻侊紙input
stream錛夛紝鎴戜滑鍙互鐢ㄥ畠鏉ヤ粠鏂囦歡涓鍙栧瓧鑺傚唴瀹廣?em>
;
InputStream in = null;
try {
in = file.newInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException x) {
System.err.println(x);
} finally {
if (in != null) in.close();
}
浣跨敤Stream I/O鏉ュ垱寤哄拰鍐欐枃浠?/font>
鎴戜滑鍙互浣跨敤newOutputStream鏂規(guī)硶鏉ュ垱寤烘枃浠躲佹墿灞曟枃浠舵垨瑕嗙洊宸叉湁鏂囦歡銆傝繖涓柟娉曚負(fù)浜?jiǎn)鍐欐枃錃g鑰屾墦寮鎴栧垱寤烘枃浠訛紝璇ユ柟娉曡繑鍥炰竴涓?
unbuffered鐨勮緭鍑烘祦錛坥utput stream錛夈俷ewOutputStream鏂規(guī)硶鏈変袱縐嶅艦寮忥細(xì)
榪欎袱縐嶅艦寮忛兘鎺ュ彈涓緇凮penOption浣滀負(fù)鍙傛暟錛岀浜岀褰㈠紡榪樺厑璁告寚瀹氬垵濮嬬殑鏂囦歡灞炴с傝繖涓柟娉曟敮鎸佺殑StandardOpenOption鏈夛細(xì)
濡傛灉娌℃湁鎸囧畾OpenOption錛岃鏂規(guī)硶鐨勮涓烘槸錛氬鏋滄枃浠朵笉瀛樺湪錛屽垯鍒涘緩鏂版枃浠訛紱濡傛灉鏂囦歡瀛樺湪錛岄偅涔堟埅鏂畠銆備篃灝辨槸璇寸己鐪佺殑閫夋嫨鏄疌REATE鍜?
TRUNCATE_EXISTING閫夐」鐨勭粍鍚堛?br />
涓嬮潰鐨勪唬鐮佹墦寮涓涓?span onclick="tagshow(event)" class="t_tag">鏃ュ織鏂囦歡錛屽鏋滄枃浠朵笉瀛樺湪錛屽垯鍒涘緩涓涓柊鏂囦歡銆傚鏋滄枃浠?
瀛樺湪錛岃繖灝嗘柊鐨勫唴瀹規(guī)墿灞曞埌鏂囦歡灝鵑儴銆?em>
Path logfile = ;
//Convert the string to a byte array.
String s = ;
byte data[] = s.getBytes();
OutputStream out = null;
try {
out = new BufferedOutputStream(logfile.newOutputStream(CREATE, APPEND));
out.write(data, 0, data.length);
} catch (IOException x) {
System.err.println(x);
} finally {
if (out != null) {
out.flush();
out.close();
}
}
浣跨敤Channel I/O鏉?span onclick="tagshow(event)" class="t_tag">璇誨啓鏂囦歡
Stream I/O姣忔璇誨彇涓涓瓧絎︼紝Channel
I/O姣忔璇誨彇涓涓紦鍐插潡鐨勬暟鎹侭yteChannel鎺ュ彛鎻愪緵浜?jiǎn)鍩烘湰鐨勮d啓鍔熻兘銆係eekableByteChannel鎵╁睍浜?
ByteChannel騫舵彁渚涗簡(jiǎn)緇存姢涓涓猚hannel涓殑浣嶇疆騫舵敼鍙樿浣嶇疆鐨勮兘鍔涖係eekableByteChannel榪樻敮鎸佹埅鏂枃浠跺拰鏌ヨ鏂囦歡澶?
灝忕殑鍔熻兘銆?br />
縐誨姩鍒版枃浠朵腑涓嶅悓鐨勪綅緗紝浠庤浣嶇疆寮濮嬭鎴栧啓鐨勮兘鍔涗嬌鎴戜滑鍙互闅忔満璁塊棶鏂囦歡銆傛湁涓ょ褰㈠紡鐨?
newByteChannel鏂規(guī)硶鍙互鐢ㄦ潵璇繪垨鍐欐枃浠訛紝榪欎袱縐嶅艦寮忓拰newOutputStream鏂規(guī)硶涓鏍楓?br />
榪欎袱涓柟娉曢兘鍏佽鎸囧畾OpenOption錛宯ewOutputStream鎵鏀寔鐨勯夋嫨榪欓噷涔熸敮鎸侊紝鑰屼笖榪欓噷榪樻敮鎸佸彟澶栦竴涓夐」READ錛屽洜涓?
SeekableByteChannel鏃㈡敮鎸佽涔熸敮鎸佸啓銆?br />
濡傛灉閫夐」鏄疪EAD錛岄偅涔堣channel灝辨槸涓轟簡(jiǎn)璇昏闂墦寮銆傚鏋滈夐」鏄疻RITE鎴朅PPEND錛屽垯璇hannel灝辨槸涓轟簡(jiǎn)鍐欒闂墦寮銆傚鏋滄病鏈夋寚
瀹氾紝璇hannel榛樿鏄負(fù)浜?jiǎn)璇绘墦寮銆?br />
涓嬮潰鐨勪唬鐮佷粠鏂囦歡涓鍙栧唴瀹瑰茍杈撳嚭鍒版帶鍒跺彴涓婏細(xì)
try {
sbc = file.newByteChannel(); //Defaults to READ
ByteBuffer buf = ByteBuffer.allocate(10);
//Read the bytes with the proper encoding for this platform.
//If you skip this step, you might see something that looks like Chinese
//characters when you expect Latin-style characters.
String encoding = System.getProperty("file.encoding");
while (sbc.read(buf) > 0) {
buf.rewind();
System.out.print(Charset.forName(encoding).decode(buf));
buf.flip();
}
} catch (IOException x) {
System.out.println("caught exception: " + x);
} finally {
if (sbc != null) sbc.close();
}
//Create the set of options for appending to the file.
Set<OpenOptions> options = new HashSet<OpenOption>();
options.add(APPEND);
options.add(CREATE);
//Create the custom permissions attribute.
Set<PosixFilePermission> perms = PosixFilePermissions.fromString("rw-r------");
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(perms);
//Convert the string to a ByetBuffer.
String s = ;
byte data[] = s.getBytes();
ByteBuffer bb = ByteBuffer.wrap(data);
SeekableByteChannel sbc = null;
try {
sbc = file.newByteChannel(options, attr);
sbc.write(bb);
} catch (IOException x) {
System.out.println("exception thrown: " + x);
} finally {
if (sbc != null) sbc.close();
}
]]>
Path綾繪彁渚涗簡(jiǎn)寰堝鏂規(guī)硶鏉ュ鏂囦歡鍜岀洰褰曡繘琛岃銆佸啓鍜屽叾浠栫殑鎿嶄綔銆傚湪鐪嬭繖浜涙柟娉曚箣鍓嶏紝鎴戜滑鍏堥渶瑕佷簡(jiǎn)瑙d竴浜涘叾浠栫殑姒傚康錛?br />
Varargs瀹為檯涓婃槸Variable number of arguments鐨勭緝鍐欙紝涔熷氨鏄彲鍙樻暟鐩殑鍙傛暟銆備緥濡傚湪涓嬮潰鐨勬柟娉曞0鏄庝腑錛孋opyOption鍙傛暟鍚庨潰鐨勭渷鐣ュ彿琛ㄦ槑榪欎釜鏂規(guī)硶鎺ュ彈鍙彉涓暟鐨勫弬鏁般?br />
Path moveTo(Path, CopyOption...)
褰撲竴涓柟娉曞彲浠ユ帴鍙楀彲鍙樻暟鐩殑鍙傛暟鏃訛紝浣犲彲浠ヤ紶鍏ヤ互閫楀彿鍒嗛殧鐨勫涓弬鏁幫紝鎴栬呬紶鍏ヤ竴涓暟緇勩?br />
瀵逛簬涓婇潰鐨刴oveTo鏂規(guī)硶錛屽彲浠ヨ繖鏍瘋皟鐢細(xì)
Path orig = ;
Path new = ;
orig.moveTo(new, REPLACE_EXISTING, ATOMIC_MOVE);
Path鐨勫緢澶氭柟娉曞湪鏂囦歡緋葷粺涓婃墽琛岀殑鎿嶄綔閮芥槸鍘熷瓙鎿嶄綔錛屼緥濡俶oveTo鏂規(guī)硶銆傚師瀛愭搷浣滄槸鎸囦笉浼?xì)琚腑鏂垨涓嶄細(xì)閮ㄥ垎鎵ц鐨勬搷浣溿傛搷浣滆涔堟槸瀹屽叏鎴愬姛錛岃涔堟槸瀹屽叏澶辮觸銆傚綋鏈夊涓繘紼嬫搷浣滃悓鏂囦歡緋葷粺鐨勭浉鍚岀殑鍖哄煙鐨勬椂鍊欒繖涓鐐瑰氨寰堥噸瑕併?br />
寰堝鐨勬枃浠禝/O鏂規(guī)硶鏀寔鏂規(guī)硶閾劇殑姒傚康銆?br />
璋冪敤絎竴涓柟娉曚細(xì)榪斿洖涓涓璞★紝鎴戜滑鍙互鐩存帴璋冪敤榪欎釜瀵硅薄鐨勬柟娉曪紝榪欎釜鏂規(guī)硶渚濈劧榪斿洖涓涓璞★紝鎴戜滑鍙堝彲浠ョ洿鎺ヨ皟鐢ㄨ瀵硅薄鐨勬柟娉曪紝灝辮繖鏍鋒寔緇笅鍘匯備緥濡傦細(xì)
String value = Charset.defaultCharset().decode(buf).toString();
UserPrincipal group = file.getFileSystem().getUserPrincipalLookupService().lookupPrincipalByName("me");
榪欎釜鎶鏈兘澶熶嬌鎴戜滑緙栧啓鏇村姞绱у噾鐨勪唬鐮侊紝閬垮厤澹版槑涓浜涙垜浠笉闇瑕佺殑涓存椂鍙橀噺銆?br />
Path綾誨疄鐜頒簡(jiǎn)FileRef鎺ュ彛銆侳ileRef鎺ュ彛鍖呭惈浜?jiǎn)瀹氫綅鏂囦欢鍜岃畨K棶鏂囦歡鐨勬柟娉曘?br />
Path綾繪湁涓や釜鏂規(guī)硶鑳藉鎺ュ彈甯︽ā寮忓尮閰嶇殑鍙傛暟銆備笅闈㈡槸榪欑鍙傛暟鐨勮鍒欙細(xì)
鏄熷彿*鍖歸厤浠繪剰鏁扮洰鐨勫瓧絎︼紙涔熷彲鑳芥槸娌℃湁錛?br />
涓や釜鏄熷彿**鍚屾牱鏄唬琛ㄤ換鎰忔暟鐩殑瀛楃錛屼笉鍚岀殑鏄繖涓尮閰嶅彲浠ョ┛瓚婄洰褰曡竟鐣屻備緥濡?c:"a**"bar鍙互鍖歸厤c:"abc"bar錛屼篃鍙互鍖歸厤c:"am"cn"bar銆?br />
闂彿?鍖歸厤涓涓瓧絎?br />
鑺辨嫭鍙穥}琛ㄦ槑瀛愭ā寮忕殑闆嗗悎錛屼緥濡倇sun,moon,stars}鍙互鍖歸厤'sun','moon'鎴?#8216;stars’錛泏temp*,tmp*}鍙互鍖歸厤浠emp鎴杢mp寮濮嬬殑浠繪剰瀛楃涓層?br />
瑕佸尮閰?,?鎴栧叾浠栫殑鐗規(guī)畩瀛楃錛屽彲浠ヤ嬌鐢ㄨ漿涔夌"銆備緥濡?"鍖歸厤鍗曚釜鐨?錛??鍖歸厤闂彿銆?br />
鏂規(guī)嫭鍙穂]琛ㄧず涓緇勫崟鐙殑瀛楃錛屽綋浣跨敤浜?鐨勬椂鍊欙紝涔熶唬琛ㄤ竴涓寖鍥寸殑瀛楃錛屼緥濡傦細(xì)
[aeiou]鍖歸厤浠諱綍鍗曠嫭鐨勫厓闊沖瓧絎︼紝[0-9]鍖歸厤浠繪剰鏁板瓧錛孾A-Z]鍖歸厤浠繪剰澶у啓瀛楁瘝錛孾a-z,A-Z]鍖歸厤浠繪剰澶у啓鎴栧皬鍐欏瓧姣嶃傚湪鏂規(guī)嫭鍙蜂腑錛屾槦鍙楓侀棶鍙峰拰"閮藉彧鏄〃紺哄畠浠嚜韜紝涓嶅啀浣滀負(fù)鐗規(guī)畩絎﹀彿銆?br />
涓嬮潰鏄竴浜涗緥瀛愶細(xì)
*.html鍖歸厤鎵鏈変互.html緇撳熬鐨勫瓧絎︿覆銆?br />
???鍖歸厤鎵鏈夐暱搴︿負(fù)3鐨勫瓧絎︿覆
*[0-9]*鍖歸厤鎵鏈夊寘鍚湁鏁板瓧鐨勫瓧絎︿覆
*.{html,htm,pdf}鍖歸厤鎵鏈変互.html,.html鎴?pdf緇撳熬鐨勫瓧絎︿覆
a?*.java鍖歸厤鎵鏈変互a寮澶達(dá)紝鍚庨潰璺熻嚦灝戜竴涓瓧絎︼紝鐒跺悗浠?java緇撳熬鐨勫瓧絎︿覆銆?br />
{foo*,*[0-9]*}鍖歸厤浠oo寮澶寸殑瀛楃涓叉垨鍖呭惈鏈夋暟瀛楃殑瀛楃涓層?br />
鍏充簬鍙傛暟涓殑妯″紡鐨勪嬌鐢紝璇峰弬鑰僃ileSystem綾葷殑getPathMatcher鏂規(guī)硶鐨勫府鍔╂枃妗c?br />
濡傛灉榪欑妯″紡鍖歸厤浠嶇劧涓嶈兘澶熸弧瓚抽渶瑕侊紝鎴戜滑榪樺彲浠ヤ嬌鐢ㄦ鍒欒〃杈懼紡銆?br />
Path浼?xì)鎸囧悜鏂囦欢鎴栬呯洰褰曪紝浣嗘槸鎴戜滑榪樹笉鑳界‘瀹氳繖涓枃浠舵垨鑰呯洰褰曟槸鍚﹀瓨鍦紝鏄惁鍙錛屾槸鍚﹀彲鍐欙紝鏄惁鍙互鎵ц銆傝紜畾鏂囦歡/鐩綍鏄惁瀛樺湪浠ュ強(qiáng)紼嬪簭鏄惁鍙互璁塊棶璇ユ枃浠?鐩綍錛屽彲浠ヤ嬌鐢╟heckAccess(AccessMode...)鏂規(guī)硶銆傚彲閫夌殑AccessMode鏈夛細(xì)
* READ – 媯(gè)鏌ユ枃浠?鐩綍鏄惁瀛樺湪浠ュ強(qiáng)紼嬪簭鏄惁鏈夋潈闄愯璇ユ枃浠?鐩綍
* WRITE – 媯(gè)鏌ユ枃浠?鐩綍鏄惁瀛樺湪浠ュ強(qiáng)紼嬪簭鏄惁鏈夋潈闄愬啓璇ユ枃浠?鐩綍
* EXECUTE – 媯(gè)鏌ユ枃浠?鐩綍鏄惁瀛樺湪浠ュ強(qiáng)紼嬪簭鍦ㄨ鏂囦歡/鐩綍涓婃槸鍚︽湁鎵ц鏉冮檺
濡傛灉璋冪敤checkAccess鐨勬椂鍊欐病鏈変紶鍏ヤ換浣曞弬鏁幫紝璇ユ柟娉曞彧鏄鏌ユ枃浠舵槸鍚﹀瓨鍦ㄣ?br />
涓嬮潰鐨勪緥瀛愭紨紺轟簡(jiǎn)鎬庢牱楠岃瘉鏂囦歡鏄惁瀛樺湪浠ュ強(qiáng)紼嬪簭鏄惁鏈夎鍜屾墽琛岀殑鏉冮檺銆?br />
import static java.nio.file.AccessMode.*;
Path file = ...;
try {
file.checkAccess(READ, EXECUTE);
} catch (IOException x) {
//Logic for error condition...
return;
}
//Logic for executable file...
闇瑕佹敞鎰忕殑鏄紝褰揷heckAccess鎵ц瀹屼箣鍚庯紝鏂囦歡鐨勬潈闄愬彲鑳借鍏朵粬鐨勭敤鎴鳳紙渚嬪緋葷粺綆$悊鍛橈級(jí)淇敼銆傝繖瀹為檯涓婃槸寰堝搴旂敤紼嬪簭閮芥湁鐨勫畨鍏ㄦх殑闂銆傚鏋滀綘鎰熷叴瓚o紝鍙互鎼滅儲(chǔ)TOCTTOU 錛坱ime of check to time of use錛夈?br />
褰撴枃浠剁郴緇熶腑瀛樺湪絎﹀彿閾炬帴鐨勬椂鍊欙紝鍙兘涓や釜涓嶅悓鐨勮礬寰勪細(xì)鎸囧悜鍚屼竴涓枃浠舵垨鐩綍銆傛柟娉昳sSamePath浼?xì)姣旇緝涓や釜Path鏉ユ鏌ュ畠浠槸鍚︽寚鍚戝悓涓涓枃浠?鐩綍銆?br />
Path p1 = ...;
Path p2 = ...;
try {
if (p1.isSameFile(p2)) {
//Logic when the paths locate the same file
}
} catch (IOException x) {
//Logic for error condition...
return;
}
]]>
聽聽聽聽聽
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽
閭d箞鎵ц鐨勭粨鏋滄槸
MethodBeforeAdvice
MethodInterceptor: before call
Really method excuting
MethodInterceptor: after call
AfterReturningAdvice
涔熷氨鏄錛屾墽琛岄『搴忔槸錛歁ethodBeforeAdvice錛孧ethodInterceptor鐨勮皟鐢ㄥ墠鐨勯儴鍒嗭紝鐩爣鏂規(guī)硶錛孧ethodInterceptor鐨勮皟鐢ㄥ悗鐨勯儴鍒嗭紝AfterReturningAdvice銆?BR>
濡傛灉proxy鐨勫畾涔夋槸
聽聽聽聽聽
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽
鎵ц鐨勭粨鏋滄槸
MethodBeforeAdvice
MethodInterceptor: before call
Really method excuting
AfterReturningAdvice
MethodInterceptor: after call
涔熷氨鏄錛屾墽琛岀殑欏哄簭鏄細(xì)MethodBeforeAdvice錛孧ethodInterceptor鐨勮皟鐢ㄥ墠鐨勯儴鍒嗭紝鐩爣鏂規(guī)硶錛孉fterReturningAdvice錛孧ethodInterceptor鐨勮皟鐢ㄥ悗鐨勯儴鍒嗐?BR>
濡傛灉proxy鐨勫畾涔夋槸
聽聽聽聽聽
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽
聽聽聽聽聽
鎵ц鐨勭粨鏋滄槸錛?BR>MethodInterceptor: before call
MethodBeforeAdvice
Really method excuting
AfterReturningAdvice
MethodInterceptor: after call
涔熷氨鏄,鎵ц鐨勯『搴忔槸錛歁ethodInterceptor鐨勮皟鐢ㄥ墠鐨勯儴鍒嗭紝MethodBeforeAdvice錛岀洰鏍囨柟娉曪紝AfterReturningAdvice錛孧ethodInterceptor鐨勮皟鐢ㄥ悗鐨勯儴鍒嗐?BR>浠ヤ笂鐨勯『搴忔槸鍦╯pringframework 1.2.5涓祴璇曠殑銆?BR>