《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 其他 > 業(yè)界動(dòng)態(tài) > Java調(diào)用Ant API用法收集

Java調(diào)用Ant API用法收集

2008-11-21
作者:yaohao

Ant是Java程序員的一個(gè)好的工具,主要可以幫助程序員進(jìn)行java項(xiàng)目的的管理,包括批量編譯、部署、文檔生成等工作,其用途遠(yuǎn)不止如此,ant內(nèi)置了大量的API進(jìn)行各種文件系統(tǒng)" title="文件系統(tǒng)">文件系統(tǒng)操作,在各種應(yīng)用服務(wù)器" title="應(yīng)用服務(wù)器">應(yīng)用服務(wù)器中都被廣泛應(yīng)用于程序和資源的部署。
Ant功能強(qiáng)大的地方在于,程序員不僅能通過編寫Ant的腳本(build.xml)來進(jìn)行各種文件部署管理操作,還可以通過調(diào)用Ant的豐富的API,甚至擴(kuò)展Ant的API進(jìn)行編程。
用于介紹Ant 腳本編寫的書比較多,而介紹Java 調(diào)用 Ant API的書籍和資料比較少,初學(xué)者用戶在進(jìn)行Ant編程時(shí)會(huì)遇到不少麻煩,筆者也是在項(xiàng)目開發(fā)過程中,逐漸摸索并掌握了一些Java調(diào)用Ant API的一些方法和技巧,并將常用的案例收集起來呈現(xiàn)給大家(本文使用Ant 1.7.0版本),以供大家參考。當(dāng)然,Ant的API非常豐富,本文僅做拋磚引玉之用,更強(qiáng)大的功能還需要讀者自己在結(jié)合Ant的API進(jìn)行摸索和領(lǐng)悟。
1. 目錄操作:
1) 創(chuàng)建目錄

1. Project prj=new Project();
2. Mkdir mkdir=new Mkdir();
3. mkdir.setProject(prj);
4. mkdir.setDir(new File("d:tempdir1"));
5. mkdir.execute();


2) 刪除目錄

1. Project prj=new Project();
2. Delete delete=new Delete();
3. delete.setProject(prj);
4. delete.setDir(new File("d:tempdir1")); //可同時(shí)將子目錄及所有文件刪除
5. delete.execute();


注:對每一個(gè)Ant Task,如Mkdir,Delete、Copy、Move、Zip等,都必須設(shè)置一個(gè)Project對象,可以幾個(gè)Ant Task共用一個(gè)Project對象,但不能有Ant Task不設(shè)置Project對象。
2. 文件拷貝和移動(dòng)、更名
1)文件copy

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setFile(new File("d:tempf1.txt");
5. copy.setTodir(new File("d:tempdir1"));
6. copy.execute(); //將f1.txt文件copy到dir1中


2)copy文件并同時(shí)替換其中的內(nèi)容, 如將 xml中的 @eosapp_name@ 替換成真" title="成真">成真正的應(yīng)用名稱

1. Project prj=new Project();
2. Copy copy = new Copy();
3. copy.setEncoding("UTF-8");
4. copy.setProject(prj);
5. copy.setTodir("d:temp");
6.
7. FileSet fileSet=new FileSet();
8. fileSet.setDir(new File(eosHome "/base/template.app"));
9. fileSet.setIncludes("**/*.xml");
10. copy.addFileset(fileSet);
11.
12. FilterSet filter=copy.createFilterSet();
13. filter.addFilter("eosapp_name","app1");
14. copy.execute();


2)文件或目錄移動(dòng)
Move的用法和Copy用法基本一致,Move本身為Copy的子類" title="子類">子類。

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setFile(new File("d:tempf1.txt");
5. copy.setTodir(new File("d:tempdir1"));
6. copy.execute(); //將f1.txt文件移動(dòng)到dir1中


3)文件改名:

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setFile(new File("d:tempf1.txt");
5. copy.setTodir(new File("d:tempf2.txt"));
6. copy.execute(); //將f1.txt文件更名為f2.txt中


4)目錄更名:

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setFile(new File("d:tempdir1");
5. copy.setTodir(new File("d:tempdir2"));
6. copy.execute(); //將dir1目錄更名為dir2,相當(dāng)于將dir1目錄下的所有文件移到dir2目錄下


3.使用文件集 FileSet
使用文件集可以同時(shí)將多個(gè)滿足匹配條件的文件集合進(jìn)行copy、move和壓縮等操作。

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setTodir(new File("d:temptodir"));
5.
6. FileSet fs=new FileSet();
7. fs.setProject(prj);
8. fs.setDir(new File("d:javaprjsrc"));
9. fs.setIncludes("**/*.*"); //包含所有文件
10. fs.setExcludes("**/CVS,**/*.class"); //排除CVS相關(guān)文件,以及.class文件
11. copy.addFileset(fs);
12.
13. copy.execute();


注: FileSet的setIncludes, 和setExcludes方法輸入pattern, pattern是一個(gè)使用“,”或空格分隔的匹配字符串,其中, “**”代表所有文件或目錄,“*.*”代表說有文件, “*.java”代表所有擴(kuò)展名為java的文件。
4.目錄掃描,查找文件

1. DirectoryScanner ds=new DirectoryScanner();
2. ds.setBasedir(new File("d:tempwar"));
3. ds.setIncludes(new String[] );
4. ds.scan();
5. if(ds.getIncludedFilesCount()>0) {
6. System.out.println("found jsp!");
7. String[] includeFiles=ds.getIncludedFiles();
8. for(String file:includeFiles){
9. System.out.println(file);
10. }
11. }


5.文件壓縮,打包
//壓縮為zip文件

1. Project prj=new Project();
2. Zip zip=new Zip();
3. zip.setProject(prj);
4. zip.setDestFile(new File("d:tempsrc.zip"));
5. FileSet fileSet=new FileSet();
6. fileSet.setProject(prj);
7. fileSet.setDir(new File("d:javaprjprj1src"));
8. fileSet.setIncludes("**/*.java");
9. zip.addFileset(fileSet);
10. zip.execute();
11.
12. //將class文件打成jar包
13. Project prj=new Project();
14. Jar jar=new Jar();
15. jar.setProject(prj);
16. jar.setDestFile(new File("d:tempprj1.jar"));
17. FileSet fileSet=new FileSet();
18. fileSet.setProject(prj);
19. fileSet.setDir(new File("d:javaprjprj1bin"));
20. fileSet.setIncludes("**/*.class,**/*.properties");
21. jar.addFileset(fileSet);
22. jar.execute();


6.文件解壓
1)將壓縮文件中的所有文件解壓

1. Project prj=new Project();
2. Expand expand=new Expand();
3. expand.setProject(prj);
4. expand.setSrc(new File("d:tempsrc.zip"));
5. expand.setOverwrite(overwrite);
6. expand.setDest("d:tempoutsrc");
7. expand.execute();


2)將壓縮文件中的符合匹配條件的文件解壓

1. Project prj=new Project();
2. Expand expand=new Expand();
3. expand.setProject(prj);
4. expand.setSrc(new File("d:tempsrc.zip"));
5. expand.setOverwrite(overwrite);
6. expand.setDest("d:tempoutsrc");
7. PatternSet patternset = new PatternSet();
8. patternset.setIncludes("**/*.java");
9. patternset.setProject(prj);
10. expand.addPatternset(patternset);
11. expand.execute();


3)利用Mapper解壓文件: 如將 .../lib/*.jar 解壓到 .../WEB-INF/lib目錄下(去除目錄結(jié)構(gòu)" title="目錄結(jié)構(gòu)">目錄結(jié)構(gòu))

1. Expand expand = new Expand();
2. expand.setProject(prj);
3. expand.setSrc(new File(zipFilePath));
4. expand.setDest(new File(webDir "/WEB-INF/lib"));
5.
6. PatternSet pattern = new PatternSet();
7. pattern.setIncludes("lib/*.jar");
8. expand.addPatternset(pattern);
9.
10. FileNameMapper mapper=new FlatFileNameMapper();
11. expand.add(mapper);
12.
13. /* another way using mapper
14. Mapper mapper=expand.createMapper();
15. MapperType type=new MapperType();
16. type.setValue("flatten");
17. mapper.setType(type);
18. */
19. expand.execute();


7.讀取zip文件
1) 讀取zip文件中的文件和目錄

1. ZipFile zipfile = new ZipFile(new File(filepath));
2. for (Enumeration entries = zipfile.getEntries(); entries.hasMoreElements();) {
3. ZipEntry entry = (ZipEntry) entries.nextElement();
4. if(entry.isDirectory())
5. System.out.println("Directory: " entry.getName());
6. else
7. System.out.println("file: " entry.getName());
8. }
9. zipfile.close(); //ZipFile用完必須close,否則文件被鎖定


2)zip文件掃描,在Zip文件中查找目錄或文件

1. ZipScanner scan=new ZipScanner();
2. scan.setSrc(new File("d:temptest.zip"));
3. scan.setIncludes(new String[] ); //查找目錄(一、二級目錄);
4. scan.scan();
5. String dirs[]=scan.getIncludedDirectories();
6. scan.setIncludes(new String[]); //查找文件
7. scan.scan();
8. String files[]=scan.getIncludedFiles();


Ant是Java程序員的一個(gè)好的工具,主要可以幫助程序員進(jìn)行java項(xiàng)目的的管理,包括批量編譯、部署、文檔生成等工作,其用途遠(yuǎn)不止如此,ant內(nèi)置了大量的API進(jìn)行各種文件系統(tǒng)操作,在各種應(yīng)用服務(wù)器中都被廣泛應(yīng)用于程序和資源的部署。
Ant功能強(qiáng)大的地方在于,程序員不僅能通過編寫Ant的腳本(build.xml)來進(jìn)行各種文件部署管理操作,還可以通過調(diào)用Ant的豐富的API,甚至擴(kuò)展Ant的API進(jìn)行編程。
用于介紹Ant 腳本編寫的書比較多,而介紹Java 調(diào)用 Ant API的書籍和資料比較少,初學(xué)者用戶在進(jìn)行Ant編程時(shí)會(huì)遇到不少麻煩,筆者也是在項(xiàng)目開發(fā)過程中,逐漸摸索并掌握了一些Java調(diào)用Ant API的一些方法和技巧,并將常用的案例收集起來呈現(xiàn)給大家(本文使用Ant 1.7.0版本),以供大家參考。當(dāng)然,Ant的API非常豐富,本文僅做拋磚引玉之用,更強(qiáng)大的功能還需要讀者自己在結(jié)合Ant的API進(jìn)行摸索和領(lǐng)悟。
1. 目錄操作:
1) 創(chuàng)建目錄

1. Project prj=new Project();
2. Mkdir mkdir=new Mkdir();
3. mkdir.setProject(prj);
4. mkdir.setDir(new File("d:tempdir1"));
5. mkdir.execute();


2) 刪除目錄

1. Project prj=new Project();
2. Delete delete=new Delete();
3. delete.setProject(prj);
4. delete.setDir(new File("d:tempdir1")); //可同時(shí)將子目錄及所有文件刪除
5. delete.execute();


注:對每一個(gè)Ant Task,如Mkdir,Delete、Copy、Move、Zip等,都必須設(shè)置一個(gè)Project對象,可以幾個(gè)Ant Task共用一個(gè)Project對象,但不能有Ant Task不設(shè)置Project對象。
2. 文件拷貝和移動(dòng)、更名
1)文件copy

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setFile(new File("d:tempf1.txt");
5. copy.setTodir(new File("d:tempdir1"));
6. copy.execute(); //將f1.txt文件copy到dir1中


2)copy文件并同時(shí)替換其中的內(nèi)容, 如將 xml中的 @eosapp_name@ 替換成真正的應(yīng)用名稱

1. Project prj=new Project();
2. Copy copy = new Copy();
3. copy.setEncoding("UTF-8");
4. copy.setProject(prj);
5. copy.setTodir("d:temp");
6.
7. FileSet fileSet=new FileSet();
8. fileSet.setDir(new File(eosHome "/base/template.app"));
9. fileSet.setIncludes("**/*.xml");
10. copy.addFileset(fileSet);
11.
12. FilterSet filter=copy.createFilterSet();
13. filter.addFilter("eosapp_name","app1");
14. copy.execute();


2)文件或目錄移動(dòng)
Move的用法和Copy用法基本一致,Move本身為Copy的子類。

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setFile(new File("d:tempf1.txt");
5. copy.setTodir(new File("d:tempdir1"));
6. copy.execute(); //將f1.txt文件移動(dòng)到dir1中


3)文件改名:

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setFile(new File("d:tempf1.txt");
5. copy.setTodir(new File("d:tempf2.txt"));
6. copy.execute(); //將f1.txt文件更名為f2.txt中


4)目錄更名:

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setFile(new File("d:tempdir1");
5. copy.setTodir(new File("d:tempdir2"));
6. copy.execute(); //將dir1目錄更名為dir2,相當(dāng)于將dir1目錄下的所有文件移到dir2目錄下


3.使用文件集 FileSet
使用文件集可以同時(shí)將多個(gè)滿足匹配條件的文件集合進(jìn)行copy、move和壓縮等操作。

1. Project prj=new Project();
2. Copy copy=new Copy();
3. copy.setProject(prj);
4. copy.setTodir(new File("d:temptodir"));
5.
6. FileSet fs=new FileSet();
7. fs.setProject(prj);
8. fs.setDir(new File("d:javaprjsrc"));
9. fs.setIncludes("**/*.*"); //包含所有文件
10. fs.setExcludes("**/CVS,**/*.class"); //排除CVS相關(guān)文件,以及.class文件
11. copy.addFileset(fs);
12.
13. copy.execute();


注: FileSet的setIncludes, 和setExcludes方法輸入pattern, pattern是一個(gè)使用“,”或空格分隔的匹配字符串,其中, “**”代表所有文件或目錄,“*.*”代表說有文件, “*.java”代表所有擴(kuò)展名為java的文件。
4.目錄掃描,查找文件

1. DirectoryScanner ds=new DirectoryScanner();
2. ds.setBasedir(new File("d:tempwar"));
3. ds.setIncludes(new String[] );
4. ds.scan();
5. if(ds.getIncludedFilesCount()>0) {
6. System.out.println("found jsp!");
7. String[] includeFiles=ds.getIncludedFiles();
8. for(String file:includeFiles){
9. System.out.println(file);
10. }
11. }


5.文件壓縮,打包
//壓縮為zip文件

1. Project prj=new Project();
2. Zip zip=new Zip();
3. zip.setProject(prj);
4. zip.setDestFile(new File("d:tempsrc.zip"));
5. FileSet fileSet=new FileSet();
6. fileSet.setProject(prj);
7. fileSet.setDir(new File("d:javaprjprj1src"));
8. fileSet.setIncludes("**/*.java");
9. zip.addFileset(fileSet);
10. zip.execute();
11.
12. //將class文件打成jar包
13. Project prj=new Project();
14. Jar jar=new Jar();
15. jar.setProject(prj);
16. jar.setDestFile(new File("d:tempprj1.jar"));
17. FileSet fileSet=new FileSet();
18. fileSet.setProject(prj);
19. fileSet.setDir(new File("d:javaprjprj1bin"));
20. fileSet.setIncludes("**/*.class,**/*.properties");
21. jar.addFileset(fileSet);
22. jar.execute();


6.文件解壓
1)將壓縮文件中的所有文件解壓

1. Project prj=new Project();
2. Expand expand=new Expand();
3. expand.setProject(prj);
4. expand.setSrc(new File("d:tempsrc.zip"));
5. expand.setOverwrite(overwrite);
6. expand.setDest("d:tempoutsrc");
7. expand.execute();


2)將壓縮文件中的符合匹配條件的文件解壓

1. Project prj=new Project();
2. Expand expand=new Expand();
3. expand.setProject(prj);
4. expand.setSrc(new File("d:tempsrc.zip"));
5. expand.setOverwrite(overwrite);
6. expand.setDest("d:tempoutsrc");
7. PatternSet patternset = new PatternSet();
8. patternset.setIncludes("**/*.java");
9. patternset.setProject(prj);
10. expand.addPatternset(patternset);
11. expand.execute();


3)利用Mapper解壓文件: 如將 .../lib/*.jar 解壓到 .../WEB-INF/lib目錄下(去除目錄結(jié)構(gòu))

1. Expand expand = new Expand();
2. expand.setProject(prj);
3. expand.setSrc(new File(zipFilePath));
4. expand.setDest(new File(webDir "/WEB-INF/lib"));
5.
6. PatternSet pattern = new PatternSet();
7. pattern.setIncludes("lib/*.jar");
8. expand.addPatternset(pattern);
9.
10. FileNameMapper mapper=new FlatFileNameMapper();
11. expand.add(mapper);
12.
13. /* another way using mapper
14. Mapper mapper=expand.createMapper();
15. MapperType type=new MapperType();
16. type.setValue("flatten");
17. mapper.setType(type);
18. */
19. expand.execute();


7.讀取zip文件
1) 讀取zip文件中的文件和目錄

1. ZipFile zipfile = new ZipFile(new File(filepath));
2. for (Enumeration entries = zipfile.getEntries(); entries.hasMoreElements();) {
3. ZipEntry entry = (ZipEntry) entries.nextElement();
4. if(entry.isDirectory())
5. System.out.println("Directory: " entry.getName());
6. else
7. System.out.println("file: " entry.getName());
8. }
9. zipfile.close(); //ZipFile用完必須close,否則文件被鎖定


2)zip文件掃描,在Zip文件中查找目錄或文件

1. ZipScanner scan=new ZipScanner();
2. scan.setSrc(new File("d:temptest.zip"));
3. scan.setIncludes(new String[] ); //查找目錄(一、二級目錄);
4. scan.scan();
5. String dirs[]=scan.getIncludedDirectories();
6. scan.setIncludes(new String[]); //查找文件
7. scan.scan();
8. String files[]=scan.getIncludedFiles();

本站內(nèi)容除特別聲明的原創(chuàng)文章之外,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者。如涉及作品內(nèi)容、版權(quán)和其它問題,請及時(shí)通過電子郵件或電話通知我們,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118;郵箱:aet@chinaaet.com。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产精品久久久久久超碰| 亚洲电影专区| 免费日韩视频| 久久爱www久久做| 亚洲欧美日韩另类精品一区二区三区| 亚洲人www| 欧美在线观看一二区| 午夜视频在线观看一区二区| 在线亚洲一区观看| 99成人精品| 亚洲免费观看视频| 亚洲精品日韩久久| 亚洲人成人99网站| 亚洲美女视频网| 亚洲日本黄色| 亚洲免费av观看| 日韩午夜av| 亚洲免费观看视频| 日韩一级视频免费观看在线| 亚洲三级国产| 夜色激情一区二区| 一本一本a久久| 一区二区三区高清在线| 亚洲无线一线二线三线区别av| 夜夜嗨av色综合久久久综合网| 亚洲看片免费| 一区二区三区回区在观看免费视频| 日韩午夜在线| 亚洲午夜激情免费视频| 亚洲欧美日韩一区二区三区在线观看| 亚洲一区欧美| 欧美在线视频a| 亚洲国产精品嫩草影院| 亚洲日本乱码在线观看| 日韩视频一区| 亚洲欧美日韩国产精品| 欧美一区二区三区久久精品茉莉花| 欧美一级免费视频| 久久久女女女女999久久| 噜噜噜在线观看免费视频日韩| 欧美gay视频激情| 欧美日韩免费高清| 国产精品视频免费观看| 国内久久精品视频| 亚洲精品乱码久久久久久按摩观| 亚洲最新视频在线播放| 午夜精品一区二区三区在线视| 久久精品论坛| 99热免费精品在线观看| 亚洲免费在线看| 久久精品亚洲乱码伦伦中文| 免播放器亚洲一区| 欧美日韩亚洲成人| 国产欧美视频一区二区三区| 伊人久久成人| 亚洲精品系列| 欧美一区=区| 日韩一级免费| 欧美一区二区免费观在线| 蜜桃av一区二区三区| 欧美日韩在线视频首页| 国产午夜精品久久久| 亚洲激情成人网| 亚洲一区二区免费视频| 亚洲东热激情| 亚洲无毛电影| 久久久久综合| 欧美日韩在线播放三区四区| 国产一区二区三区免费在线观看| 亚洲国产视频直播| 亚洲欧美日韩综合aⅴ视频| 日韩视频一区二区三区在线播放| 欧美一区二区国产| 欧美激情国产精品| 国产一区深夜福利| 亚洲最新视频在线| 亚洲黄色高清| 欧美在线啊v| 欧美日韩国产一区二区三区地区| 国产网站欧美日韩免费精品在线观看 | 亚洲二区在线| 亚洲欧美成人| 欧美精品一区二区三区在线播放| 国产视频一区三区| 一本综合久久| 亚洲伦理在线| 久久综合伊人| 国产午夜精品美女视频明星a级| 亚洲美女网站| 亚洲破处大片| 久久久久久久久久久成人| 欧美四级电影网站| 亚洲韩国精品一区| 亚洲国产精品成人一区二区 | 亚洲欧美制服另类日韩| 欧美日韩不卡合集视频| 激情婷婷久久| 欧美一区二区成人6969| 亚洲男人第一av网站| 欧美激情亚洲| 亚洲电影成人| 亚洲国产欧美不卡在线观看| 久久国产天堂福利天堂| 国产精品99免费看| 99精品福利视频| 99成人在线| 欧美精品导航| 在线观看亚洲视频| 欧美永久精品| 欧美自拍偷拍午夜视频| 国产精品色婷婷久久58| 亚洲视频一区二区在线观看 | 亚洲激情视频在线播放| 亚洲国产欧美日韩| 久久综合九色欧美综合狠狠| 国产视频在线一区二区 | 亚洲欧洲精品一区二区三区波多野1战4 | 欧美日韩一区在线观看视频| 亚洲日本成人女熟在线观看| 亚洲精品国产系列| 免费日本视频一区| 亚洲电影免费观看高清完整版在线 | 免费成人高清在线视频| 一区在线视频| 91久久精品久久国产性色也91 | 国产精品一区在线观看你懂的| 亚洲私人影院| 亚洲欧美日韩综合国产aⅴ| 欧美午夜国产| 国产精品99久久久久久久久| 亚洲一区二区三区高清不卡| 欧美视频亚洲视频| 亚洲一区二区动漫| 久久精品系列| 经典三级久久| 亚洲激情一区二区| 欧美韩国在线| 99热免费精品在线观看| 亚洲欧美激情精品一区二区| 国产乱肥老妇国产一区二| 午夜影院日韩| 巨胸喷奶水www久久久免费动漫| 激情欧美亚洲| 亚洲精品资源美女情侣酒店| 欧美日韩和欧美的一区二区| 一区二区三区视频免费在线观看| 亚洲欧美精品| 国模精品娜娜一二三区| 亚洲激情电影在线| 欧美精品一区二区三区很污很色的| 亚洲精品老司机| 亚洲欧美日韩精品久久久久| 国产欧美一区二区精品性色| 亚洲成色www久久网站| 欧美国产丝袜视频| 亚洲一区在线播放| 久久久在线视频| 亚洲国产毛片完整版| 一区二区三区四区国产| 国产精品久久久久三级| 欧美在线免费观看视频| 欧美—级在线免费片| 中文欧美日韩| 久久久五月天| 亚洲精品女av网站| 午夜精品久久久久久久99樱桃 | 久久久777| 亚洲日本一区二区| 亚洲嫩草精品久久| 伊人久久综合| 亚洲欧美999| 一区二区视频免费在线观看 | 亚洲午夜激情网页| 国产日韩在线一区二区三区| 亚洲精品精选| 国产精品入口夜色视频大尺度| 亚洲大片精品永久免费| 欧美日韩精品在线| 欧美在线视频一区二区| 欧美日韩裸体免费视频| 欧美影院在线| 欧美色图一区二区三区| 亚洲国产合集| 国产精品久久久久久av下载红粉| 亚洲第一精品夜夜躁人人躁| 欧美午夜精品久久久久久人妖| 久久av老司机精品网站导航| 欧美三区视频| 亚洲国产日韩一区二区| 国产精品久久久一区二区| 亚洲理论电影网| 国产一区二区视频在线观看 | 亚洲精品国产精品国自产观看| 欧美在线播放高清精品| 亚洲人成毛片在线播放女女| 久久国产免费看| 日韩视频一区二区| 美女精品一区| 欧美一区二区在线免费播放| 欧美日韩性生活视频|