久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

深入Java NIO.2文件系統(tǒng):Path、Files與WatchService核心實(shí)現(xiàn)解析

深入Java NIO.2文件系統(tǒng):Path、Files與WatchService核心實(shí)現(xiàn)解析 剛接觸 NIO.2 的時(shí)候我一度以為 java.nio.file 只是給老 java.io.File 換了層好看的外殼。真正把這套包挖到底層之后才發(fā)現(xiàn)它從路徑表示、文件屬性到目錄監(jiān)聽都重新抽象了一遍算得上 Java 文件 I/O 領(lǐng)域一次徹底重構(gòu)。今天這篇文章就把java.nio.file的核心組件和實(shí)現(xiàn)原理拆開講重點(diǎn)解釋它為什么這樣設(shè)計(jì)、底層做了什么以及實(shí)際使用時(shí)容易踩的坑。無論你是準(zhǔn)備給項(xiàng)目做統(tǒng)一文件管理還是想實(shí)現(xiàn)目錄變更監(jiān)聽、跨平臺(tái)屬性讀取這篇內(nèi)容都能給你一條清晰的技術(shù)路線。1. 內(nèi)容整體設(shè)計(jì)與思路拆解1.1 從 java.io.File 的尷尬說起每個(gè)用過java.io.File的人應(yīng)該都體會(huì)過它的別扭它既能表示一個(gè)存在的文件又能表示一個(gè)不存在的路徑判斷對(duì)象到底是文件還是目錄得靠isFile()現(xiàn)場(chǎng)探測(cè)符號(hào)鏈接、文件權(quán)限、修改時(shí)間這些信息全都要通過額外的方法去取取到的也不是統(tǒng)一視圖。更麻煩的是File類的很多操作是阻塞式的在目錄條目特別多的高并發(fā)場(chǎng)景下一個(gè)簡(jiǎn)單的listFiles()都可能成為性能瓶頸。而java.nio.file把這些概念分得清清楚楚。Path只負(fù)責(zé)描述路徑Files只負(fù)責(zé)執(zhí)行操作FileSystem定義了一類文件系統(tǒng)的邊界FileStore則對(duì)應(yīng)真實(shí)的存儲(chǔ)設(shè)備。這樣一來代碼不再依賴“某個(gè)文件對(duì)象”這種模糊的東西而是通過路徑 操作 屬性三層結(jié)構(gòu)來組織邏輯。以目錄列表為例Files.newDirectoryStream()返回一個(gè)可關(guān)閉的DirectoryStream按需迭代而不是一次性把全部條目加載進(jìn)內(nèi)存在大目錄下表現(xiàn)穩(wěn)定得多。這套設(shè)計(jì)真正解決了我過去幾十個(gè)文件工具類的通病。以前我寫遞歸刪除需要自己判斷符號(hào)鏈接、判空目錄、處理權(quán)限異常代碼里全是if (file.isDirectory())這種分支。切到Files.walkFileTree后遍歷和訪問控制被抽象成FileVisitor回調(diào)骨架代碼幾乎固定我只能專注于業(yè)務(wù)邏輯出錯(cuò)概率也降下來。1.2 面向 SPI 的擴(kuò)展思路java.nio.file的另一個(gè)關(guān)鍵設(shè)計(jì)是引入了Provider機(jī)制。核心包定義的是FileSystemProvider這個(gè)抽象類真正的文件系統(tǒng)實(shí)現(xiàn)由具體 Provider 完成默認(rèn)的fileProvider 負(fù)責(zé)訪問本地磁盤。這個(gè)機(jī)制讓 Java 生態(tài)可以擴(kuò)展出 ZIP 文件系統(tǒng)、內(nèi)存文件系統(tǒng)、遠(yuǎn)程文件系統(tǒng)等。日常我們常用的Paths.get(“/tmp/a.txt”)本質(zhì)上是在默認(rèn)文件系統(tǒng)上創(chuàng)建路徑而FileSystems.newFileSystem(uri, map)則可以掛載一個(gè) ZIP 包把它當(dāng)作一個(gè)獨(dú)立的文件系統(tǒng)來操作。這種“一套 API多種后端”的抽象非常值錢。比如我維護(hù)的一個(gè)老項(xiàng)目原來所有資源都散落在本地目錄后來需要把部分靜態(tài)資源遷移到壓縮包內(nèi)我只需要替換文件系統(tǒng)創(chuàng)建方式業(yè)務(wù)層的Path、Files調(diào)用幾乎沒改。因?yàn)樗胁僮鞫冀⒃贔ileSystem之上業(yè)務(wù)代碼不依賴具體存儲(chǔ)形態(tài)擴(kuò)展成本就低了。1.3 一次重構(gòu)解決的問題清單我接觸 java.nio.file 時(shí)最直觀的感受是它的方法簽名經(jīng)過大量打磨。舉幾個(gè)例子Files.move可以用StandardCopyOption.ATOMIC_MOVE要求原子移動(dòng)這在配置文件熱更新場(chǎng)景下能避免讀到半截文件Files.readAttributes通過LinkOption.NOFOLLOW_LINKS來控制是否跟隨符號(hào)鏈接Files.newBufferedReader默認(rèn)使用 UTF-8 而不是平臺(tái)默認(rèn)編碼。每一個(gè)選項(xiàng)背后都是過去 File API 中容易出現(xiàn)的邊界問題。這說明 java.nio.file 不只是在 API 數(shù)量上做加法而是按“你能對(duì)文件做什么”這個(gè)維度重新歸納。設(shè)計(jì)者對(duì)常見操作做了枚舉把選項(xiàng)約束在類型安全的枚舉常量里而不是像老 API 一樣用 int 掩碼。比如打開文件時(shí)的StandardOpenOption.CREATE、TRUNCATE_EXISTING這些常量組合起來可讀性很好IDE 自動(dòng)補(bǔ)全也能減少低級(jí)錯(cuò)誤。2. 核心組件逐個(gè)拆解2.1 Path、Paths、Files 三件套的關(guān)系Path接口是 java.nio.file 的基礎(chǔ)你可以把它想象成一個(gè)不可變的路徑描述對(duì)象。它不像File那樣直接綁定磁盤上的某個(gè)實(shí)體而更像一個(gè)字符串加上解析規(guī)則。Paths.get(String)是創(chuàng)建Path最常見的入口但其實(shí)它底層調(diào)用的是FileSystems.getDefault().getPath(...)。這個(gè)細(xì)節(jié)很重要路徑是相對(duì)于某個(gè)文件系統(tǒng)存在的同一個(gè)字符串在不同文件系統(tǒng)里可能解析成不同含義。Files類則是工具類幾乎所有靜態(tài)操作都在這里定義復(fù)制、移動(dòng)、刪除、讀屬性、創(chuàng)建目錄、寫文本、遍歷目錄樹。理論上你可以只依賴Path和Files完成絕大多數(shù)文件操作。Files的很多方法返回Path或StreamPath這些返回結(jié)果可以繼續(xù)串聯(lián)代碼風(fēng)格上比File時(shí)代流暢得多。有一個(gè)容易忽視的地方Path的equals比較的是路徑字符串解析后的結(jié)果而不是文件系統(tǒng)中的真實(shí)文件。也就是說Paths.get(/a/../b)和Paths.get(/b)的 equals 通常為 false除非你調(diào)用normalize()。判斷兩個(gè)路徑是否指向同一文件更可靠的方式是Files.isSameFile(p1, p2)它通過文件系統(tǒng)比對(duì) inode 等信息。我在監(jiān)控腳本里就吃過這個(gè)虧用 equals 去重兩個(gè)“看起來一樣”的路徑結(jié)果兩個(gè)都處理了后來改成isSameFile才算穩(wěn)定。2.2 Path 的內(nèi)部表示和解析規(guī)則Path接口定義了一組解析方法getParent、getFileName、getRoot、getNameCount、subpath、resolve、relativize。理解這些方法的輸出對(duì)拼接路徑很有幫助。resolve方法有點(diǎn)像一個(gè)智能拼接如果傳入的是絕對(duì)路徑它直接返回參數(shù)路徑如果傳入的是相對(duì)路徑就在當(dāng)前路徑末尾追加。很多新人在寫路徑拼接時(shí)習(xí)慣自己加/一旦處理../就會(huì)出問題正確做法是交給Path.resolve。底層具體實(shí)現(xiàn)因系統(tǒng)而異。類 Unix 系統(tǒng)里的UnixPath內(nèi)部不是直接保存 String而是保存了字節(jié)數(shù)組因?yàn)榈讓酉到y(tǒng)調(diào)用需要的是字節(jié)序列。解析時(shí)會(huì)按平臺(tái)的路徑分隔符切分同時(shí)還要處理.、..、重復(fù)分隔符等。normalize()返回的是語義上等價(jià)的簡(jiǎn)化路徑但它不做字符串合并而是逐個(gè)路徑元素判斷。至于訪問真實(shí)文件時(shí)路徑還要轉(zhuǎn)成系統(tǒng)調(diào)用參數(shù)中間會(huì)經(jīng)過 JNI 層的路徑轉(zhuǎn)換。還有個(gè)大坑路徑比較用compareTo是有平臺(tái)差異的Windows 不區(qū)分大小寫而 Unix 區(qū)分。所以直接用字符串排序往往不符合預(yù)期。如果需要穩(wěn)定的排序最好自行統(tǒng)一成小寫比較。2.3 FileSystem 和 FileStoreFileSystem抽象代表一個(gè)文件系統(tǒng)的實(shí)例。默認(rèn)文件系統(tǒng)通常對(duì)應(yīng)操作系統(tǒng)根文件系統(tǒng)但你也可以打開 ZIP 文件系統(tǒng)那時(shí)候它會(huì)管理 ZIP 包內(nèi)部的所有條目。FileSystem提供getPath(String)來創(chuàng)建 Path提供getFileStores()來查看存儲(chǔ)。注意一個(gè) FileSystem 里可以有多個(gè) FileStore比如一個(gè)根磁盤可能有多個(gè)掛載點(diǎn)。FileStore代表底層存儲(chǔ)池你通過Files.getFileStore(Path)能拿到目標(biāo)文件所在的存儲(chǔ)然后調(diào)用getTotalSpace()、getUsableSpace()、getUnallocatedSpace()查詢?nèi)萘?。這個(gè)功能在實(shí)現(xiàn)磁盤告警時(shí)非常有用不需要再執(zhí)行外部命令去解析 df 輸出。getAttribute還可以讀取 store-level 的屬性比如是否支持大文件、是否只讀。需要留意的是FileStore 的容量統(tǒng)計(jì)結(jié)果受文件系統(tǒng)配額和權(quán)限影響。某平臺(tái)下普通用戶看到的可用空間和 root 看到的可能不同這不算 bug只是底層statvfs按調(diào)用用戶返回的結(jié)果。2.4 文件屬性統(tǒng)一視圖java.nio.file的屬性體系也是重頭戲。最常用的是Files.readAttributes(Path, BasicFileAttributes.class)它返回一個(gè)視圖接口包含creationTime、lastModifiedTime、size、isDirectory、isRegularFile、isSymbolicLink等。還可以傳入DosFileAttributes、PosixFileAttributes獲取系統(tǒng)特有屬性比如權(quán)限位、屬主、隱藏標(biāo)志。這套屬性接口背后是動(dòng)態(tài)代理式實(shí)現(xiàn)。具體 Provider 會(huì)把屬性讀取請(qǐng)求映射到底層系統(tǒng)調(diào)用比如 Unix 上讀取unix:mode會(huì)調(diào)用stat系列函數(shù)。如果你只想讀一個(gè)字段也可以直接用字符串形式Files.getAttribute(path, unix:mode)。不過字符串容易打錯(cuò)推薦用類型化接口。屬性讀取要考慮符號(hào)鏈接。Files.readAttributes(path, BasicFileAttributes.class)默認(rèn)跟隨鏈接讀取的是鏈接指向目標(biāo)的屬性。如果想讀取鏈接本身的屬性要傳LinkOption.NOFOLLOW_LINKS。這幾個(gè)LinkOption不是裝飾品——在找符號(hào)鏈接本身時(shí)不正確使用會(huì)導(dǎo)致返回的isSymbolicLink()一直是 false。3. 實(shí)現(xiàn)原理FileSystemProvider 與底層系統(tǒng)調(diào)用3.1 Provider 的加載與選擇java.nio.file 的依賴注入核心在FileSystemProvider這個(gè)抽象類。它提供了newFileSystem,getPath,newByteChannel,newDirectoryStream,readAttributes,createDirectory,delete等一大堆抽象方法。默認(rèn)的fileProvider 安裝時(shí)被注冊(cè)到系統(tǒng)列表里FileSystemProvider.installedProviders()使用ServiceLoader從META-INF/services里加載擴(kuò)展。有意思的是你不能直接用new創(chuàng)建一個(gè) ProviderJDK 保證只有通過ServiceLoader機(jī)制加載到的 Provider 才能被系統(tǒng)認(rèn)可。這從機(jī)制上防止了外部創(chuàng)建偽造的 Provider 干擾文件系統(tǒng)路徑解析。自定義文件系統(tǒng)插件比如內(nèi)存文件系統(tǒng)只需要在 jar 包的 META-INF/services 里聲明實(shí)現(xiàn)類調(diào)用FileSystems.newFileSystem(URI.create(mem:///))就能被找到。3.2 本地方法調(diào)用的實(shí)現(xiàn)模型具體 Provider 最終還是要調(diào)用操作系統(tǒng)能力。以 Linux 為例UnixFileSystemProvider在 open、read、stat 等操作上會(huì)調(diào)用UnixNativeDispatcher里的 native 方法。這些方法用 JNI 實(shí)現(xiàn)直接包裝系統(tǒng)調(diào)用比如open、close、statvfs等。這意味著Files類一個(gè)簡(jiǎn)單的Files.size(path)在底層可能經(jīng)過一次stat系統(tǒng)調(diào)用而不是直接讀取Path內(nèi)部保存的長(zhǎng)度。為了減少系統(tǒng)調(diào)用次數(shù)JDK 在 Unix 實(shí)現(xiàn)里大量使用了stat結(jié)構(gòu)體緩存。UnixFileAttributes會(huì)把一次系統(tǒng)調(diào)用拿到的 mode、uid、gid、size、mtime 都保存下來后續(xù)的isDirectory、size等屬性查詢都從緩存對(duì)象里取不需要再多次穿過 JNI。如果你做百萬量級(jí)的文件遍歷這個(gè)優(yōu)化非常明顯。底層還有一個(gè)細(xì)節(jié)open系統(tǒng)調(diào)用經(jīng)常需要配合O_NOFOLLOW等標(biāo)志但 java.nio.file 的 API 本身沒有直接暴露 open flags而是把LinkOption.NOFOLLOW_LINKS、StandardOpenOption、PosixFilePermissions這些抽象參數(shù)翻譯成對(duì)應(yīng)的系統(tǒng)層標(biāo)志。這種分層正是實(shí)現(xiàn)可移植性的關(guān)鍵。3.3 從 open 到 FileChannel很多人可能沒意識(shí)到Files.newInputStream和Files.newByteChannel之間是有共性的。newByteChannel返回一個(gè)SeekableByteChannel實(shí)例這個(gè)對(duì)象在默認(rèn)文件系統(tǒng)里就是FileChannel。FileChannel與普通輸入輸出流最大的區(qū)別是它持有文件描述符fd并且能進(jìn)行 random access、文件鎖、內(nèi)存映射等操作。從實(shí)現(xiàn)角度看UnixFileSystemProvider.newByteChannel調(diào)用UnixChannelFactory.open先構(gòu)造打開標(biāo)志集再調(diào)用底層open拿到 fd最后把 fd 包裝成FileChannelImpl。值得注意的地方是FileChannel默認(rèn)是阻塞模式但也可以放到Selector里做多路復(fù)用嚴(yán)格說不能直接注冊(cè)因?yàn)镕ileChannel不是SelectableChannel無法用傳統(tǒng) NIO selector 監(jiān)聽就緒狀態(tài)。要監(jiān)聽文件變化應(yīng)該用WatchService它走的是另一條事件機(jī)制。3.4 WatchService 的事件監(jiān)聽原理WatchService是 java.nio.file 里我最喜歡的組件之一。它讓你注冊(cè)一個(gè)目錄然后阻塞式等待目錄內(nèi)文件的創(chuàng)建、刪除、修改事件。底層實(shí)現(xiàn)因平臺(tái)不同Linux 上主用的是inotify通過inotify接口注冊(cè) watch 描述符事件通過文件描述符讀取而某些平臺(tái)如果無法使用原生事件會(huì)降級(jí)到PollingWatchService也就是定時(shí)掃描目錄對(duì)比快照。實(shí)現(xiàn)層面注冊(cè)到 WatchService 時(shí)WatchKey負(fù)責(zé)保存每個(gè)目錄的監(jiān)視狀態(tài)注冊(cè)有事件的目錄會(huì)維護(hù)一份事件列表。take()方法會(huì)阻塞等待事件poll()是非阻塞獲取。事件取出后WatchKey.reset()能被復(fù)用如果不 reset它就不會(huì)再收到新事件。這個(gè)狀態(tài)機(jī)設(shè)計(jì)在文檔里不顯眼但實(shí)際寫監(jiān)聽程序時(shí)漏了 reset 是最常見的 bug。Linux 實(shí)現(xiàn)細(xì)節(jié)是每個(gè)注冊(cè)的目錄對(duì)應(yīng)一個(gè)inotifywatch 描述符事件對(duì)象會(huì)把底層inotify_event里的 cookie、name、mask 翻譯成 Java 層的StandardWatchEventKinds.ENTRY_CREATE等。需要注意inotify在目錄自身被刪除時(shí)可能會(huì)有事件丟失或崩潰現(xiàn)象所以生產(chǎn)環(huán)境要配合定時(shí)巡檢。3.5 符號(hào)鏈接與擴(kuò)展屬性符號(hào)鏈接處理是 java.nio.file 與老 File API 差異最大的一塊。老 API 面對(duì)符號(hào)鏈接基本是“看不見”而 NIO.2 顯式引入NOFOLLOW_LINKS在很多方法參數(shù)里都會(huì)出現(xiàn)。例如Files.exists(path, LinkOption.NOFOLLOW_LINKS)可以檢測(cè)“鏈接本身是否存在”而Files.exists(path)則檢測(cè)“鏈接目標(biāo)是否存在”。這看似簡(jiǎn)單但在處理文件遷移、備份工具時(shí)至關(guān)重要。擴(kuò)展屬性則通過UserDefinedFileAttributeView支持用戶自定義屬性它把屬性寫到文件系統(tǒng)的擴(kuò)展屬性區(qū)域。這在類 Unix 系統(tǒng)上對(duì)應(yīng)setxattr/getxattr系統(tǒng)調(diào)用??梢詫?shí)現(xiàn)類似“給文件打標(biāo)簽”的功能而不需要維護(hù)額外的數(shù)據(jù)庫索引。4. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)4.1 目錄遍歷Files.walkFileTree 的骨架我記得第一次用Files.walkFileTree寫目錄清掃工具時(shí)最大的感受是“代碼結(jié)構(gòu)終于有了形狀”。SimpleFileVisitor提供了一系列默認(rèn)回調(diào)你只需要覆寫visitFile、preVisitDirectory、postVisitDirectory、visitFileFailed。比如物理刪除一個(gè)多級(jí)目錄核心邏輯只要覆寫visitFile時(shí)刪除文件在postVisitDirectory時(shí)刪除空目錄Path root Paths.get(/data/tmp); Files.walkFileTree(root, new SimpleFileVisitorPath() { Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { Files.delete(file); return FileVisitResult.CONTINUE; } Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { Files.delete(dir); return FileVisitResult.CONTINUE; } });我還會(huì)額外覆寫preVisitDirectory對(duì)符號(hào)鏈接目錄返回SKIP_SUBTREE防止誤刪鏈接指向的整個(gè)目錄。這個(gè)操作我吃過一次大虧以前用File遞歸時(shí)沒有檢查符號(hào)鏈接直接把一個(gè)軟鏈接當(dāng)成目錄遞歸下去清理腳本刪掉了不該刪的數(shù)據(jù)?,F(xiàn)在用 visitor 后可以在訪問前判斷attrs.isSymbolicLink()并跳過安全很多。4.2 文件屬性批量讀取與對(duì)比另一個(gè)高頻場(chǎng)景是“找出目錄里所有超過 100MB 的文件”。用Files.walk配合Stream可以一行寫出try (StreamPath stream Files.walk(Paths.get(/data))) { ListPath bigFiles stream .filter(p - { try { return Files.isRegularFile(p) Files.size(p) 100L * 1024 * 1024; } catch (IOException e) { return false; } }) .collect(Collectors.toList()); }注意 Stream 資源必須關(guān)閉這里用 try-with-resources 是必須的。如果目錄非常深、文件特別多Files.walk的遍歷順序未必穩(wěn)定而且它會(huì)用掉大量文件描述符。更底層的DirectoryStream更適合手動(dòng)迭代按需關(guān)閉。我通常先調(diào)用Files.readAttributes一次性讀取屬性緩存然后從這個(gè)對(duì)象里取size和類型避免每個(gè)文件調(diào)兩次方法產(chǎn)生兩次系統(tǒng)調(diào)用。屬性對(duì)象本身是一次性快照不代表實(shí)時(shí)狀態(tài)但在批量掃描場(chǎng)景里足夠用了。4.3 WatchService 實(shí)現(xiàn)目錄實(shí)時(shí)監(jiān)聽目錄監(jiān)視是最容易出現(xiàn)“代碼看起來對(duì)但實(shí)際不工作”的場(chǎng)景之一。我寫過一個(gè)小工具監(jiān)聽上傳目錄先用Paths.get(uploadDir).register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY)注冊(cè)然后循環(huán)take()try (WatchService watcher FileSystems.getDefault().newWatchService()) { Path dir Paths.get(/data/incoming); dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); while ((key watcher.take()) ! null) { for (WatchEvent? event : key.pollEvents()) { Path changed (Path) event.context(); System.out.println(event.kind() - changed); } key.reset(); } }這里要強(qiáng)調(diào)key.reset()不是可選項(xiàng)。如果忘記調(diào)用那個(gè)目錄的 WatchKey 會(huì)進(jìn)入 invalid 狀態(tài)后續(xù)事件全部收不到。另外event.context()返回的是相對(duì)于監(jiān)視目錄的路徑不是完整路徑。完整路徑需要dir.resolve(changed)這是新手最愛跳的坑。平臺(tái)差異也需要注意在 Linux 上如果用inotify事件里修改可能不會(huì)激活綁定如果用輪詢實(shí)現(xiàn)要自己控制poll間隔。如果監(jiān)聽到事件后立刻去讀文件有可能文件還沒寫完最好結(jié)合ENTRY_MODIFY的多個(gè)事件做延遲處理比如等 200ms 或等文件大小不再變化。4.4 把 ZIP 包當(dāng)成文件系統(tǒng)java.nio.file 的抽象能力可以通過FileSystems.newFileSystem體驗(yàn)。下面這段代碼打開一個(gè) ZIP 文件把內(nèi)部條目當(dāng)作路徑訪問URI zipUri URI.create(jar: Paths.get(app.zip).toUri()); try (FileSystem zipFs FileSystems.newFileSystem(zipUri, Collections.emptyMap())) { Path zipRoot zipFs.getPath(/); Files.walk(zipRoot) .filter(p - Files.isRegularFile(p)) .forEach(System.out::println); }這個(gè)方式特別適合做資源包校驗(yàn)。原來我要用ZipInputStream手動(dòng)讀條目還得維護(hù) ZipEntry 狀態(tài)現(xiàn)在用統(tǒng)一的FilesAPI代碼邏輯和本地文件操作完全一致。需要留意 ZIP 文件系統(tǒng)的文件屬性很多是從壓縮表里推導(dǎo)的修改時(shí)間精度可能有限而且寫入 ZIP 會(huì)重新打包整個(gè)文件性能不如直接流寫。5. 常見問題與排查技巧實(shí)錄5.1 Files.createTempDirectory 刪除失敗Files.createTempDirectory創(chuàng)建的臨時(shí)目錄在 Windows 上默認(rèn)帶了只讀屬性嗎不一定。我遇到過最經(jīng)典的問題是用Files.walkFileTree刪除臨時(shí)目錄時(shí)因?yàn)檫€有句柄沒關(guān)閉導(dǎo)致刪除失敗。異常通常是DirectoryNotEmptyException或FileSystemException出現(xiàn)在 Windows 上更多。處理方式很簡(jiǎn)單在刪除前確保所有DirectoryStream、FileChannel、StreamPath都已經(jīng) close。如果仍然失敗可以加FileVisitResult.TERMINATE打印具體路徑。還有一個(gè)隱蔽問題創(chuàng)建臨時(shí)目錄時(shí)指定前綴很短多個(gè)線程同時(shí)創(chuàng)建可能撞名JDK 內(nèi)部的沖突重試機(jī)制雖然存在并發(fā)很高時(shí)仍可能頻繁沖突。建議前綴帶上線程名或隨機(jī)數(shù)減少碰撞。5.2 路徑比較與 toString 的認(rèn)知偏差很多人以為Path.toString()就是傳給Paths.get的原始字符串。實(shí)際上Path實(shí)現(xiàn)類可能對(duì)絕對(duì)路徑做了規(guī)范化。比如多次調(diào)用dir.resolve(child)后toString結(jié)果可能包含冗余分隔符但不會(huì)把..自動(dòng)消掉。要生成可打印的路徑字符串調(diào)用toAbsolutePath().normalize().toString()更穩(wěn)妥。在跨平臺(tái)系統(tǒng)上要特別注意絕對(duì)路徑的判斷。Linux 的/tmp/a是絕對(duì)路徑Windows 的C:\tmp\a也是但Paths.get(/tmp).isAbsolute()在 Windows 平臺(tái)會(huì)返回 false因?yàn)楦皇窃摫P符。如果代碼要同時(shí)跑多個(gè)平臺(tái)統(tǒng)一用 URI 或FileSystem.getPath處理會(huì)更可靠。5.3 WatchService 事件丟失與重復(fù)事件丟失多發(fā)生在目錄創(chuàng)建后立刻注冊(cè)的場(chǎng)景。比如你Files.createDirectory后馬上調(diào)用register理論上沒問題但如果是程序外部創(chuàng)建的目錄權(quán)限或 mount 時(shí)機(jī)可能導(dǎo)致注冊(cè)失敗。第二個(gè)常見丟失場(chǎng)景是監(jiān)聽目錄本身被移動(dòng)或刪除無法繼續(xù)收到父目錄內(nèi)該子目錄的事件。解決方式是監(jiān)聽父目錄并自行維護(hù)子目錄注冊(cè)表動(dòng)態(tài) add/remove。事件重復(fù)則是因?yàn)橐淮挝募薷目赡苡|發(fā)多個(gè) ENTITY_MODIFY。比如一個(gè)文件寫入 10 次可能積壓 10 條事件。處理思路是以“最終狀態(tài)”為準(zhǔn)事件到達(dá)后做去重和延遲聚合而不是每來一個(gè)事件就立刻處理。5.4 異常類型對(duì)照速查java.nio.file 的異常體系很清晰但只要不熟悉一開始容易被FileSystemException弄懵。它是許多文件操作異常的基類NoSuchFileException、FileAlreadyExistsException、DirectoryNotEmptyException、AtomicMoveNotSupportedException都是它的子類。捕獲時(shí)盡量精確捕獲比如FileAlreadyExistsException不要捕獲成IOException一次性處理否則無法針對(duì)性重試。還有一個(gè)偏門異常AccessDeniedException通常來自系統(tǒng)權(quán)限不足。在 Windows 上如果文件被資源管理器占用刪除時(shí)會(huì)拋出FileSystemException且消息為進(jìn)程占用在 Linux 上是文本“Permission denied”。處理時(shí)可以統(tǒng)一轉(zhuǎn)成業(yè)務(wù)自定義異常帶上路徑和操作類型方便排查。5.5 Stream 資源泄漏問題Files.walk、Files.list、Files.lines都返回Stream這些 Stream 內(nèi)部持有目錄流或文件通道。如果忘記 close輕則 fd 耗盡重則導(dǎo)致目錄句柄無法釋放。用 try-with-resources 是基本要求。有人會(huì)問 stream 的onClose會(huì)不會(huì)自動(dòng)注冊(cè)其實(shí)內(nèi)部確實(shí)注冊(cè)了 close handler但只有你關(guān)閉流時(shí)才會(huì)調(diào)用。我在排查一個(gè)服務(wù)問題時(shí)發(fā)現(xiàn) fd 數(shù)量漲到幾千后來定位到是某個(gè)后臺(tái)任務(wù)用Files.list掃描目錄后沒有關(guān)閉流目錄句柄一直被占用。修復(fù)方法很簡(jiǎn)單把流放到 try-with-resources 里并且所有中間過濾和收集操作放在 try 塊內(nèi)完成。這里沒有玄學(xué)就是紀(jì)律。5.6 符號(hào)鏈接導(dǎo)致的遞歸死循環(huán)遍歷目錄樹時(shí)如果目錄里有指向祖先目錄的符號(hào)鏈接Files.walk默認(rèn)不會(huì)無限遞歸因?yàn)樵谀J(rèn)的FileVisitOption里沒有FOLLOW_LINKS。但如果你主動(dòng)加了FOLLOW_LINKS就可能形成環(huán)。這時(shí)要用visitFileFailed捕獲FileSystemLoopException。這個(gè)異常是專門為目錄循環(huán)設(shè)計(jì)的捕獲后返回CONTINUE或SKIP_SUBTREE。還有一點(diǎn)加了FOLLOW_LINKS后Files.readAttributes可能跳過鏈接本身導(dǎo)致無法獲取鏈接屬性。需要同時(shí)用NOFOLLOW_LINKS單獨(dú)訪問。權(quán)限比較緊張的環(huán)境里最好默認(rèn)不跟隨鏈接只在確定安全的業(yè)務(wù)場(chǎng)景里使用。寫在最后的一點(diǎn)經(jīng)驗(yàn)我實(shí)際使用中發(fā)現(xiàn)java.nio.file 最大的價(jià)值不是某一個(gè)類方法而是它把文件系統(tǒng)操作整理成了一組語義清晰、可組合、可擴(kuò)展的抽象。Path、Files、FileSystemProvider三層結(jié)構(gòu)讓我寫文件工具類時(shí)不自覺地考慮跨平臺(tái)和異常處理代碼也更容易測(cè)試。如果你剛開始接觸這套 API不要急著去背方法名先把Path和Files之間的關(guān)系搞熟再嘗試用FileVisitor重寫一個(gè)舊的遞歸刪除。這個(gè)過程會(huì)逼你理解符號(hào)鏈接、目錄流關(guān)閉、異常分類這些底層細(xì)節(jié)。等你能把WatchService的 reset 狀態(tài)機(jī)講明白NIO.2 基本就入門了。最后再分享一個(gè)小技巧寫文件操作代碼時(shí)盡量把所有可能拋 IOException 的操作集中到一個(gè)方法里用業(yè)務(wù)異常包裝底層異常同時(shí)保留原始異常鏈。這樣日志里能看到是哪一步系統(tǒng)調(diào)用失敗而不是整屏的Caused by層層嵌套。這套經(jīng)驗(yàn)不一定出現(xiàn)在手冊(cè)里但排查線上問題時(shí)會(huì)幫你省很多時(shí)間。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
黄视频免费| 狠操91,com| 九色 蝌蚪 熟女自| 亚洲人妻在线一区| 久久久99999久网站| 国产精品天堂| 东京热激情视频一二三区| 啊啊啊在线看| 99精品成人免费看| 收看日本人日bb| www.色婷婷.com| 中文字幕av丝袜| CCYY草草影院地址入口| 91 手机在线播放 绯色| 3PAV乱伦视频| 成人片在线播放| 无码九九九九| 亚洲精品日日夜夜52| 欧美日韩亚洲天堂网| se吧提供91精品国产91久久久久久 | 欧美淫乱视频| 在线强奷到舒服的无码视频| www被窝色com| 欧亚性爱视频免费看| 色拍偷亚洲| 精品人妻中文字幕4399| 精品十三区| 日本最新免费韩国1区2区视频播放| 免费a v| 日韩伦理久 久久 清纯| 精品人妻一区二区视频| 中文字幕精品专区搜索结果91| 国产福利电影| 亚洲色图 欧美热图 清纯唯美 另类自拍| 国产区在线| 久久毛卡| 美女好片色日本| 激情AV| 大奶的诱惑| 99久久com免费视频′| 免费视频一二三区| 97色妞| 岛国色情视频在线观看| 97精品视频在线播放| 色综合色欲色综合色综合色综合| 久操免费观看| 男人的天堂在线| 26uuu性物| 亚州中文字幕超碰97| 免费一级精品啪啪视频| 亚欧洲一区二区视频| 精品v日韩欧美国产| 又黄又硬又粗又长国产视频| 日韩成人色图| 日韩 欧美 另类 人妻| 国产亚洲精品av一区| 国产又黄又粗又猛大片| 神马影院午夜福利久久久| 久久社区一区二区三区| 96精品久久久| 亚洲高清视频在线观看| 亚洲色图欧美色图日韩色图| 女一区二区| 蜜桃av色偷偷av老熟女| www.夜夜| 二色av| 免费一级欧美片片线观看| www四虎| 国产色呦呦| 精品国产Av无码久久久亚洲| 粉嫩av一区二区三区天美传媒| a久久| 一区二区三区黄片免费观看| 综合av社区| 污色区网站| 国产97视频| 激情文学亚洲| 免费99精品国产自在在线| 久久天天躁日日躁狠狠躁| 国产无马在线| 国产精品久久久| 91天堂丝袜美腿| 日韩丨制服丨中文|在线| 美女在线H91| 色 婷97| 国产精品麻豆成人AV艾秋| 婷婷五月天小说| 大香蕉宗合网在线| 久久久久无码一妻区| 91色黑人少妇| 内射日韩大臀美女| 午夜精品久久久99| 欧美伦乱爱| www.男人天堂| 欧中美三级一区二区三区| 美女91网址 | 久99久视频| 高清无码网址| 97日视频| 青青五月天| 国产精品一二三区18| 天天躁日日躁成人字幕aⅴ| 成人a大片在线观看| 伊人影院综合是一个与深夜成人在线| 91色久| 超碰三级秋霞| 久久高清无码夜夜操| 91热| 久久直播国产| 久久久久一本一区二区青青蜜月| 成人情色综合网| 极品国产内射| 色99视频| 东京热99999| 久久精品黄色| 婷婷久草| 无码九九九九| 免费看黄视频亚洲网站| 一道本东京热加勒比一区二区三区| 亚洲天堂少妇| 天天干夜夜一操| 区一二区日韩亚洲乱码av电影| 激情在线青青操| 久草网站免费在线观看| 中文字幕人乱码中文字的预防方法 | 亚洲图片欧美日韩| 精品人妻久久久久一区二区三区| 午夜福利免费精品视频| 激情人妻另类| 淫荡熟女乱伦网| 久久国产对白激情浪潮 | 性老妇一区二区三区| 视频一区二区免费在线| 99re9这里只有精品| 女性喷水高潮在线观看| 亚洲综合性感在线| 激情熟女12P| 九九热免费国产视频婷婷伊人| 亚洲丝袜少妇在线| 久久99操天天日| 日本一区二区三区四区五区六区七区八区九区| 色婷婷五月天| 亚洲成a人v欧美综合天堂下载| 伊人天堂在线| 色y情视频免费看| 日本一片一区| 久久精品亚洲成a人天堂| 精久久久| 欧美成人9797| 无码外流操逼视频| 日韩无码人妻中字久久三区四区| 后入 亚洲 美女 射| 一级做a爰片久久毛片图片| 欧美日韩精品久久| 99色综合| 岛国色情视频在线观看| 香蕉精品二区二区| 97欧美色资源| 大香蕉免费中文| 秋霞网—男女啪啪亚洲免费体验区| 日韩精品国模| 激情图片亚洲色图| 翔田千里av一区二区三区| 蜜臀久久99精品久久久久久酒店| 绑缚麻绳人妻寝取完整版| 亚洲蜜乳av| 天天夜夜rb| 色天使大香蕉| 大香蕉97久久| 97人人干| 夜夜影视四色| 欧美gv在线观看| 九九热国产| 欧美 亚洲 另类 综合| 99国产精品人妻人伦| 久久9免费视频| 亚州宗合另类| 国产在线76页| www.婷婷六月天| 日本午夜久久电影| 欧美,日韩,亚洲视频| 久草免费福利在线播放| 中文字幕一二区二三区人妻专区| 人妻久久一区二区三区| 97天天摸天天爽| 亚洲。天堂。日本在线观看| 中文一区在线日| 超碰公开久久网| 91久久婷婷| 免费亚洲黄色视频在线观看| 天天视频黄网站| 日美免费黄片| 国产超碰人人爽人人做| 美国日韩黄色片| 男女啪啪啪18禁网站| 色欲av国内精品久久久久久| 天堂成人网| 中文字幕久久亚州无码| 人妻少妇色综合| 日本新免费二区三区| 老熟妇综合| 国产精品网站免费| 欧美一级专区免费大片| 91最新综合| 亚洲中文人妻色| 色色色色综合网| 国产传媒操逼视频| 人人操 欧美| 2019天天干| 日韩专区久久久| 日韩超碰精品综合| 亚洲有码第一页| 人人操天天爽| 国产乱伦性爱区| 亚洲国产一级黄色视频| 岛国A V在线免费看| 91精品人妻一品二品三品| 96一区二区三区| 国产97av| 狠狠91| 91丝袜在线观看| av中亚| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 天堂资源欧美| 天堂伊人久久| 97se亚洲综合自| 日韩欧美大片免费高清啪啪| 久久久久久AⅤ无码免费肉站 | 久久精品老司| 91网站18+| 久操免费观看| 18禁精品网站在线看| 精品久久99| 一区久久久二区| 青青草在线视频美女| 欧美97| 很黄很色的视频在线观看| 久久久爆乳翘臀一线天伦理视频| 96AV久久久| 劲爆欧美人妖三区91| 久久久涩| 亚瑟国产精品久久无码| 亚洲一区二区久久久久| 在线黄页看毛片| 欧美72网页| 五月天AV资源| 三级激情网站| 中文字幕一区 二区三四五 区日 日骚 | 麻豆AV96熟妇人妻| 精品久操| 日韩国产不卡在线视频| 国产女上位好爽在线| 婷婷五月天色网| 1人人看人人摸人人操| 日韩精品碰碰| 一区二区你上我| 大香网伊人久久综合网eew| 午夜精品久久久久久久第一页按摩| 日韩中文字幕视频| 99国产在线绯色一区| 99热8| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 精品传媒在线一区| 欧美日韩在线国产在线| 成 人 影视 一区 二区 三区 四区| 久欲AV| 丁香五六月啪啪| 91狠婷| 久九九九九九九九热| 日韩字幕一区| 亚洲 日韩 欧美 国产综合体| 青青草字幕AV| 五月天婷婷在线看| 96AV久久久| 亚洲欧美第一页| 情侣开房子拍 日韩无码 女的很漂亮| 97 国产精品| 亚洲字幕一区二区| 欧美夜色| 一级AV性爱| 亚洲人成色9999精品久久 | 天欧美在线| 日本无码1| 超碰久久精品| 巨爆乳肉感一区二区三区竹菊影视 | 日韩精品国产精品五码一区二区| 哈哈操电影| 人人干人人操人人..com| 久久m| 欧美性爱五月天| 欧美日韩久久精品爱爱| 久久久久久性爱视频| 亚洲影视综合| 亚洲男人天堂2013| 高清国产av无码| 久九九九九九九九热| 天天操天天射青青草| 91啦人妻| 91AV天美在线视频| 老熟女91av| 亚洲,日韩,欧美,成人播放| 欧洲小说色图视频另类| 婷婷五月天影院| 野狼福利社区| 顶级丝袜熟女一区二区三区 | 三级片大波波| 亚洲高潮少妇| 亚洲图片婷婷五月天| 99久在线精品99re8| 五月天婷婷小说| 88xx成人精品视频| 日韩成人人妻网站| 欧洲射精91| 日本一级性爱| 国产一区二区成人av在线播放| 久久久久久久久国产| 99热这里只有精| 欧美日韩色综合网| 亚洲成a人v欧美综合天堂下载| 中国黑人三级片网站上区| 女优视频第10页| 色色色色日本| 骚乳在线| 国产成人无码啪| 怡红院成人视频| 一区二区三区 丝袜高跟| 爱媛媛久久国产福利| 国产一区自拍欧美日韩| 午夜成人爽爽爽爽A片李冰冰| 曰本熟女视频| 蜜桃在线观看一区二区三区| 五月激情视频| 日韩激情中文字幕有码| 日本操逼视频不卡直接放| 国产激情在线| 91久久国产精品| 久久夜精品一区二区三区| 最新av在线| 嗯……啊…嗯嗯…啊…好舒服| 无码精品久久久天天影视| 91+欧美| 神马久久久久眼| 2001天天操| 精品人人插人人操| 人妻精品一区二区在线| 亚洲精品官网在线观看| 日本日逼高清| 人人做,人人操,人人摸| 极品销魂美女一区二区 | 成在线人在线观看视频| 99热这里只有精| 内射黑人| 嫩草伊人久久精品| 日韩人妻少妇中文字幕| 亚洲码专区| 天天操天天舔| 国产精品久久伊人| 日韩成人性爱电影在线播放| 日本精品高清一二区一本到| 成人在线午夜视频一区| 欧美大码在线视频| 中文字幕啊啊啊在线观看视频| 天天干天天干天天干| 啊嗯好大视频在线观看| 色九九九综合| 玖玖综合视频| 美女十八禁| 精品国产a∨一区天美传媒| 久久久久久中文| 久久九色| 日韩人妻播放| 大香蕉五月天婷婷| 久久超碰久| 精爱久久| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 欧美亚洲成人在线一区二区三区| 97chaopengongkai| av无码精品久久久久| 91xingse| 干B| yw尤物av无码点击进入麻豆| 强奸xx国产| 夜嗨影院| 韩国女主播青草在线| 蜜桃臀av一区二区| 免费A片三p视频| 手机在线视频国内精品| 又黑又大又粗 | 91九九九吃| 国产精品福利视频| 色久桃花影院在线观看| 五月婷婷性爱| 蜜臀在线免费观看在线免费观看| 天天干人妻| 天天影视色香欲综合网小说| 婷婷久久综合久| 97免费视频网| 日本成人在线不卡一区二区三区| 日本亚洲熟女视频| 殴美日韩m| 高潮9999外国| 久久9视频| 成人性爱全视频观看| 色情成人五月天| 亚洲一区亚洲天堂| 国产在线综合福利网站| 九色 人妻 大香蕉| 国产97亚洲| 亚洲精品影视老司机| 91成人国产综合久久精品蜜月| 熟女熟妇一区二区三区视频| 欧美日韩免费性爱| 韩国女主播青草在线| 国产h小视频在线观看免费| 天天搞在线综合网| 欧美 中文字幕 一区| 久久久精选| 九九伊人网| 欧美中日韩XXXX| 成人免费不卡在线视频| 美女网站黄页| 久操不卡视频| 色婷婷A V一二三四区麻豆综合| 亚洲综合有码| 久久婷婷五月综合| 99AV| 亚洲一区二区中文字幕| 亚洲电影91| 日韩中文字幕国产| 久日91在线| 影音先锋少妇| 色情婷婷久久五月天| 国产熟女乱论| 九热超碰| 337p大胆噜噜噜噜噜91Av| 国产熟女一区二区| 久久超碰、| 亚洲乱伦图片视频| 超碰97COm中文| 亚洲.欧美.丝袜.中文.综合| 男人天堂网站| 久久久内射良家| 亚洲日韩美女中文字幕乱| 色综合久久888| 国产97在线视频| 日日干夜夜操视频h| 一级久久久久久久久久久| 欧美97网| 91精品婷婷国产综合久久竹菊| 亚州免费啪啪视频| 五十路熟女人妻一区二区在线观看| 啊操爽品善一区二区三区| 国产精品久久久三级无码| 日韩字幕一区| 亚洲影视第一页| 一个人在线看的黄色电影网站| 国语国产操逼伊人AV网| www.男人的天堂| 久久熟妇五十路一区| 色五月激情网| 日韩免费大片一级播放| 亚洲久9| 日日黄色三级网站| 欧美嗯啊……在线观看视频免费| 青青久日| 久久九九精品一区二区 | 九九九久久久W精品| 精品一国2| 成人影 天天操 亚洲| www.色婷婷色综合| 午夜福利激情在线视频| 国内外内射高清视频| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 亚洲在线91| 日本Suv精品一区二区| 五十路熟女,国产欧美精品区一区二区三区| 有码色中文字幕在线观看| 亚洲骚女一区二区三区| 欧美激情综合色综合啪啪五月| 丁香六月东京热| 大香蕉一区二区在线观看.| 高清无码久操视频| 成人综合视频久久| 高清不卡视频| 久久精9| 亚洲第一二区另类图| 久久久婷| 欧日韩不卡视.频| 天天影视综合网欧美精品| 五月婷在线| 亚洲五月婷婷| 日韩熟妇二区| 又黑又大又粗| 国产欧美一区二区| 97超碰天天爱天天爱| 蜜臀人妻少妇久久在线观看| 精品美女少妇一区二区三区| 麻豆传媒一区二区在线观看| 久久久久久免费电影| 懂色AV网| 久久久久夜夜夜夜| 国产精品ww久久| 亚洲欧洲av影音| 黄片qw| 少妇内射www在线观看视频| 欧美性爱97超碰| 四虎视频在线观看| 国产精品粉嫩福利在线| 久久久天堂| 久久人妻| 无码天天操| 在线观看AV片| 国产九月婷婷| 97色伦欧美| 国产青视频| 嗯嗯啊啊用力视频免费| 日韩不卡码| 国产精品农村妇女| 日韩成人在线性爱视频| 97最新在线播放视频| 九九毛片这里只有精品| 美女91在线观看| aV中文麻| 看黄片视频免费| 色综合尤物| 久久久熟妇熟女国产| 国产人伦精品一区二区三区| 欧美亚洲激情一二三| 综合欧美色图| 日韩欧美tv一区二区在线观看| 久热九九| 伊人久久亚洲色欲综合网站| 人妻另类 专区 欧美 制服| 国产 丝袜 欧美中文 另类| 99国产精品久久久久久久成人热| 久久加勒比| 国产亚洲精品美女久久久| 丰满翘臀美女影院视频| 丰满人妻一区二区三区免费| 欧美日韩岛国大片在线观看| 国产欧美成人精品| 中文字幕人成乱码熟女香港| 精品久久99| 亚洲 欧美 色图| 极品极品色影院| 中文一区在线日| 欧美成人A√在线一区二区| 熟女丰满人妻一区| 中文字幕成人乱码熟女精品国50 | 97爱综合| 亚洲欧洲精品成人| 亚洲日韩熟女人妻高清在线| 香蕉黄色一级视频| 91n免费处女| 免费一级黄色录像影片| 日产成人久久| · —级AA伦aa坐爱午夜极速ⅴA一区天天噪天天噪天天噪 | 麻豆天美一区二区| 久久久久久国产精品| 91热热色| 亚洲激情综合| 激情在线青青操| www超碰| 亚洲天堂久久| 色丁香五月婷婷| 精产品久久| 亚洲无码成人精品| 美女的肌被草喷水视频| 亚洲av综合伊人久久| 夜夜嗷嗷一区二区| 日韩免费大片一级播放| 伊人96在线| 婷婷五月花| 中文字幕片| 最新日本中文字幕| 粉嫩AV输入| 色婷婷电影| 中文字幕精品探花视频| 国厂麻豆77q4| 无码少妇精品一区二区60岁老人| 啊啊啊慢点| 青娱乐亚洲热| 日韩一级特黄av毛片| 亚洲日韩狠狠撸视频| 艹我哪美一区无码| 午夜福利av电影在线| 久久国产精品视频| 丰满翘臀美女影院视频| 欧美老妇曰批的视频| 热热热热日日漂亮永久永久国产日| 人人操人人大香蕉| 色综合V| 久久宗合97| 麻豆国产原创AV色哟哟| 在线强奷到舒服的无码视频 | 女人综合网| 9精品久久久久| 国内97干免费看| 插入综合网| 美女国产一区二区久久| 日本高清免费一本视频在线观看| 欧美综合色图片| 四虎免费看黄| 青娱乐 成人娱乐在线| 国产自产自拍| 懂色av色欲av蜜臀av| 97精品在线视频| 夜夜操一区二区| 日韩乱码Av| 免费AV播放| 国产女人高潮嗷嗷嗷叫小说| 密乳视频在线| 亚洲欧美国产va在线播放频| 亚洲精品乱码久久久久久蜜桃麻豆 | CCYY草草影院地址入口| 日韩97P| 久久97视频| 久久精品99| 精品一二三区女同 | 97久久久精品| 麻豆九九九| 大香蕉中文aV在线| 久久男人网| 日本一片一区| 人妻 制服 日韩 中文 在线| 久久夜夜夜夜| 97天天综合网| 蜜桃色院一区久久| 亚洲淫色网中文| 女同在线视频一区| 麻豆人妻精品一区二区| 久久久五月天| 日本99热| 亚洲色图激情小说| 屌妞视频久久久久久久| 久久人人爽爽爽人久久久| 偷窥自拍亚洲色图| 国产老熟女| 亚洲天堂另类小说男人| 天天综合网在线| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 蜜桃天美传媒AV一区二区三区| 91熟女.com| 欧美中字不卡| asc国产精品| 日曰骚久久精品| 欧美色图综合| 日本www操操操| 大香蕉色十月| 欧美在线啊啊啊| 丰满熟妇大乳做爰| 亚洲图片欧美偷拍| 色网在线视频观看免费| 色综合婷婷| www鬼畜国产男人的天堂| 欧美九九99久久精品| 男人的天堂在线| 人妻天堂三区| 国产精品分类在线观看| 日本一级黄色电影| 亚州成人a∨| 少妇激情一区二区三区视频| 国产强奸91| 五月婷婷六月激情| 蜜臀久久久国产| 精品人妻一区二区免费看| 婷婷色综合欧美日韩| 自拍大香蕉乱插| 最新亚洲风情电影| 亚洲国产美女久久久久| 国产高清无码一区二区三区四区皇冠| 91原创在线观看| 欧美韩日精品99综合| 福利操逼| 熟妇人妻一区二区三在线 | 国产精品久久久久999| 日韩精品中文字幕人妻| 五月丁香啪啪啪| 一区二区三区四区在线不卡| 这里只有97精品| 青青伊人这里只有精品| 毛片17S| 91色插| 国产无马视频| 嫩草伊人久久精品| 五月天色图| 少妇激情一区二区三区视频| 精品中文字幕一区二区| 精品射1999| 日韩精品一区二区人人人| 综合av社区| 黄色成品网站| 92性色国产午夜福利在线661| 大香蕉色十月| 日本高清一本二本免费不卡| 色情乱伦AV| 91丝袜熟女| 加勒比在线观看一区二区| 少妇国产不卡| 91视频在线观看18| 99热这里只有精品8| 91黑丝美女| 亚洲一区二区三区不卡国产欧美| 97热视频在线观看| 日本一级一级一级一级| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 亚洲图片日本AⅤ欧美在线| 欧美性爱一区| 亚洲成人福利电影免费| 99色在线| 人妻啊啊人妻啊| 亚洲精品尤物yw在线影院| 日本不卡码黄色| 人人操 欧美| 好淫网一二三视区| 免费AV中文网在线观看| www.一本大99| AAAAAAAAA黄片| 久久久久久人| 久久久久免费少妇| 波多野结衣之双飞调教在线播放 | 国际精品久久久| 97人人操人人干| 精品视频一区二区| 牛牛久久国产精品视频一二三| 1禁看欧美黄片免费看| 天天澡天天爽日日av| 岛国黄色大片网站| 97欧美超碰| 日产狠狠干| 亚洲色欧美| 91激情网| 欧美婷婷五月天| 亚洲欧美一区二区网址| 欧美高清在线| 夜夜操av亚洲一区二区| 婷婷综合网站| 亚洲无吗在线视频| 人妻色偷色噜| 欧美黑人与女人91| 很很很很操| 欧插网站| 992这里有精品| 人人操人人搞人人草| 久久久久久97| 亚洲激情天堂网| 1禁看欧美黄片免费看| 91亚洲欧美| 久久久久深夜无码| 性爱欧美五月| 国产精品久久久视频| 五月天色图| 欧美日韩激情无码专区| 玖玖爱在线视频免费观看| 久久精品无码熟妇一区二区三区视频导航 | 色性欧美| 大香蕉综合| 国产熟女完整版中字| 欧美亚洲小说| 激情婷婷黑人91| 久久九操在线观看| 超碰97最新人妻| 手机不卡视频不卡在线一二三区| 亚洲综合春色| 欧美九9 9 9| 色婷婷久久| 久久性爱视频| 丰满人妻一区二区三区免费,| 99在线免费视频| 青青草日韩无码| 婷婷五月天网| 国产视频三区四区| 美女淫穴| 成人黄页| 神马九九九| 五月天亚洲网| 俺也射| 国产AV人人夜夜澡人人爽麻豆| 丝袜翘臀后入欧美校园亚洲自拍另类小说一区中文字幕少妇诱惑 | 欧美精品庄| 俞拍久久国应视频| 亚洲超碰97| 翔田千里A片一区二区| 思思视频免费看网站| 色呦呦呦在线观看视频| 婷婷五月色| 青青青操| AV在线播放网址| 性色aV一区二区三区噜噜| 国产美女在线精品免费看| 波多野结衣一级视频| 无套内射性感少妇视频| 91新在线欧美| 91色夜| 精品高清av中文字幕| AV无码久久久精品| 大香蕉色十月| 狠狠色一区二区中文字幕| 97操b| 三级三级三级a级全黄三| 国产精品肉丝自拍| 人妻精品一区二区| av凤凰久久久| ai欧美亚洲小说| 91骚熟女| 精品无码少妇| www.av在线视频| 欧美亚性天堂| 天堂亚洲精品久久老牛| 伊人91| 黄色性爱网网| 欧美色图天堂网m| 91宗合网| 欧亚性爱视频免费看| 91美女在线视频| 九九九精品| 五月天综合网| 久久精品无码熟妇一区二区三区视频导航 | 日本一区二区三区欧美日韩中文字幕| 91熟女.com| 天天躁日日躁xxxxx| 亚洲情色一区综合| 亚洲国产成人综合碰碰三级经典| 精品国产乱码久久久久久口爆网站| 91超碰人人| 国产免费内射视频| 国产又色又爽又舒服的三级视频| 精品然女一区二区| 欧美操人视频| 你操综合| 91丨国产丨白浆秘 洗澡动漫| 成人看片网站| 99成人| 亚洲双插| 色欲日韩欧美在线一区| 性爱AV天堂| 色波多| 久久9久9久99久9久9| 中国人高清www色视频免费| 97色婷婷| 91精品久久久久| 国内毛片无码一级毛片| 欧美性爱超碰97| 黄色AV影视| 蜜臀久久99精品久久久电影| 五月天婷婷基地| 九九热av| 嗯嗯啊啊操死我| 国产精品 久久久精品一牛| 超碰97资源中文字幕| 牛牛操视频逼| 歐美性天天| 欧美成人AⅤ大片在线观看| 国产欧美成人精品| 秋霞曰韩R级| 中文字幕后石码四区五区| 久久精品小视频| 好舒服视频| 操美女高潮抽搐白浆| av2014 日韩在线中文字幕| 99热伊人| 黑人猛交| 黑人精品久久97| 国产成人无码久久精品| 亚洲国产日韩精品久久久| 嗯啊啊啊轻点视频 | 精品久久久高清无码| 欧美性第1页| 亚洲熟女综合| 91超级碰碰| 黄色片,com| 久久久久久久97| 蜜臀一二三区| 日本最新免费韩国1区2区视频播放| 婷婷五月天AV| 国产中文精品一区二区在线观看| 97碰久久| 久久九九久精品国产尤物|国产精品爽黄69天堂A片潘金莲,国产亚洲精品第一综合 | 一区二区三区精品久久| 色网站导航大全| 久久97视频| 久久精品中文字幕女同| 久久久9品一区二区三区| 你想操日本小逼吗| 国产精品不卡av免费在线观看| 日韩有码回春沙龙第一页| 亚洲男人的天堂V| 人人喜人人妻| 日韩亚洲美州欧洲综三区一品在线| 日韩黄色一区二区三区| 91成人久久| 午夜国产成人精品视频| 在线天堂资源亚洲| 一本久久久精品| 碰人碰碰人人开房人肉| 色网综合网| 久久熟妇五十路一区| 精品国产一区二区三区av在线资源| 国产成人精品日本亚洲语言| 韩国成人精品久久久免费看| 国产三级资源在线观看| 香港澳门日本三级网站| 超碰97久久| 色姑娘综合网| 啪啪视频免费在线观看| 免费成人自拍视频在线| www国产无码| 国产60页| 欧美岛国精品在线观看| 国产在线视频午夜精华在| 九X超碰| 日韩97视频!在线| 91久久精品国产| 欧州色图区| 91 国产丝袜在线放观看| 91 国产丝袜在线放观看| 少妇被玩视频二三区| 国产精品网站免费| 夜夜福利| 欧美偷偷网| 韩日欧亚a级| 精品对白久久不卡| 女色综合| 国产极品粉嫩馒头一线天av| 免费A片三p视频| 国产 亚洲 一二三四| 波多野结衣一级视频| 国产家庭乱伦网址| 久久久久久AV无码免费网站| 日韩av乱伦| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 青青在线视频日韩欧美| 牛牛操视频逼| 色色色色网站| 亚洲最大的黄色电影网站。| 欧美激情亚洲情色| 欧美性夜| 国产隔壁老王影院在线| 日韩一级欧美一级在线观看| 国产欧美伊人| 超碰97最新人妻| 72av视频| 亚洲av综合色| 中文字幕一区二区三区蜜臀| 日夜尻逼网| 97精品一区二区视频| 国产粉嫩出水在线播放| 9久久9综合| 九九九九一区| 欧美精品23| 男人夜色天堂ss| 人人爽人人精品乱人伦AV| 综合少妇网| 91在线视频免费播放| 偷窥自拍亚洲色图| 天天操天天干美女网址导航| 久久精品国产AV一区二区三区| 日韩免费性爱视频在线观看| 蜜桃久久久久久久| 久9精品| 欧美精品久久久久久久久88| 啊啊啊啊二区好大| 97亚洲综合| 日本熟女中文| 综合色久欲| 国产乱伦性爱区| 97色冈| 国产高清自拍| 深爱激情五月天| 熟女熟妇一区二区三区视频| 狠狠中文字幕| 操b网站亚洲无码| 日产欧美电影一区二区三区| 五月丁香啪| 人妻美腿丝袜日韩| 久久黄片国产一区二区| 欧插网站| 亚洲 欧美 日韩 国产一区二区| 99性爱视频| 国产美女高潮视频| 免费久久精品麻豆一区二区av| 久久久九精品| 国产精品久久伊人| 操逼999| 在线一道啪| 色妇91| 无遮挡h肉动漫在线观看| 丰满少妇精品一区二区| 免费中文在线| 超碰在线1234区| 国产伦乱91| 天天干18禁| 91久久国产综合久久| 日本精品一级二级三级| 久久AV无码1区2区3区| 巨爆乳一区二区爆乳区| 欧美色图 人妻| 亚洲中文字幕网| 久久草草亚洲蜜桃臀| 超碰在线97国产| 国产乱伦一二三区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | www.黄色在线| 国产白丝av| 国产一区二区久久| 五月婷婷激情| 国产成人99久久亚洲综合| 丝袜狂射91| 五月天丁香| 国内毛片无遮挡国产| 精品少妇99| 麻豆一区二区三区精品| 在线看免费无码AV天堂的| 国产午夜精品在线观看| 亚州国产成人精品女人久久| 婷婷亚洲中文字幕在线| 日韩乱伦AⅤ| 99re28在线观看| A啊啊在线观看| 久久久爆乳翘臀一线天伦理视频| 亚洲综合另类小说色区亚洲成av人片在www| julia ann久久| 蜜臀久久99精品久久久久免费观| 午夜福利成人免费视频| 人人干黄色| 天天澡天天爽日日AV| 超碰 欧美| 大吊色| 九九热精品在线| 欧美精品日韩一区二区| 精品久久久久久AV无码| 91老司机精品| 另类专区加勒比| 亚洲自拍欧美国产首页网曝| 又黄又爽在线观看视频| 在线观看精品国产免费| 国产高清精品一区二区三区毛片 | 国精品一区二区三| 丰满人妻一区二区三区四| 激情深爱五月天| 成人婷婷丁香| 蜜桃臀av在线观看| 五月色网| 婷婷色中文字幕| 五月婷婷丁香| av大香蕉| 欧美不卡二区| 97资源视频| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 福利天堂| 91色女| 欧洲亚洲人妻无码中字久久三区四区 | 日本三级久| 国产欧美精品日韩区二区麻豆天美| 午夜精品视频777| 天天操夜夜操| 一区二区三区网站日日骚| 亚洲综合在线高清| 大香蕉综合久久| 99精品丰满人妻无码| 外国91| 国产真乱mangent| 精品日韩中文在线| 国产Aα| 色婷婷视频| 爱av免费| 亚欧高清在线| 色婷婷影视| 五月婷婷丁香| 中文字幕av久久爽Av| 第四色色综合91| 欲射影视| 无码人妻丰满熟妇区毛片| 亚洲三级。日韩三级| 熟女人妻精品一区二区视频| 99中文字幕| 精品久久久久久中文| 激情综合五月| 黄页18禁| 日韩精品影视| 屁股久久久久久久| 在线综合色| 亚洲情色一区三区| 久久丝袜| 国产美女自拍AV| 久热99| 国产高清不卡视频| 毛片99-全集电影手机免费观看完整-B029AV | 精品小视频在线| 深夜视频| 亚洲天堂人妻熟妇视频| 亚州伊人色综台| 激情情色五月天| 亚欧免费| 99国内精品| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 91麻豆天美国产欧美高潮| 国产精品视频91久久| 日本一区二区成人在线| 艾草av| 丰满人妻-区二区三区免费看 | 国产美女口爆吞精视频| 家庭乱伦性爱av| 91狠狠综合久久久久久| 日本精品免费一区二区三区四区| 大学生美女口爆| 中文AV制服乱伦| www.狠狠干.coom | 啊好大好舒服| 舔足天天操天天射| 国产视频一区二区免费| 91AV天堂| 久久社区一区二区三区| 区一在线观看| 夜夜躁狠狠躁日日躁av| 色欲日韩欧美在线一区| 97精品国产手机| 夜夜欧美| 色噜噜婷婷| 91中出在线| 涩五月婷婷| 亚洲男人天堂网| 久久免费中文字幕在线观看| 激情小说在线视频| 大胆91| 亚洲熟女综合网| 先锋精品av色鲁| 亚洲天堂一二| 亚洲.欧美.丝袜.中文.综合| 97久久超碰日韩精品| 欧美激情五月天| 亚洲成a人v欧美综合天堂下载| 九九九九九九九九九九九免费国产| 日本阿v天堂在线观看| 欧美天堂日韩三级国产传媒| 国产成人自拍视频视频| 欧美天堂第二区| 日韩AV无码中文一区二区| 婷婷久久久精品| 日韩性爱高清免费视频| 亚洲男人天堂网站| 啊啊啊不要好爽日韩无码一区| 久综合网| 欧美情色男人的天堂| 黄片qw| 五月天综合网| 国产精品乱码久久久久| 99re9在线| 边做饭边操逼逼| 性生活无遮挡纯毛片在线看| 操B在线观看| 欧美日韩人妻精品一区二区三区| 2024人人操人人摸| 97这里有精品| 伊人久久国产免费观看视频| 影视综合无码少妇| 91老熟女91老女人| 六月婷婷五月丁香| 2017av无码免费无线播| 九九九九九九九九九五码|