文件夾的拷貝

文件夾用來把文件包裹起來,褪去這些外衣,說到底拷貝文件夾也就是拷貝文件

模擬實例:將F:/Picture/test 文件夾 拷貝到?F:/Picture/dir文件夾

該實例中test文件夾下只包含了test.txt文件

步驟分析:

1.通過路徑得到File對象

2.遞歸查找子孫級文件夾或者文件

3.復制文件(同文件拷貝)

那么重點是在第二個步驟,我們可以通過File對象的listFiles方法得到目標文件夾下所包括的文件,listFiles方法返回一個泛型為File的集合list,由此我們就得到了test文件夾下所有的文件,通過foreach循環語句遍歷這個list,得到的每一個File對象,首先要做的就是判斷這個File對象是文件還是文件夾,如果是文件就可直接copy,如果是文件夾,則需要再通過listFiles方法得到目標文件夾下所包括的文件,步驟與上面一致,這也就是遞歸的思想

需要注意的一點是,我們需要把整個test文件夾拷貝到dir文件夾,那么當遍歷到test文件夾下的test.txt文件時,我們在拷貝的時候,需要重新創建一個新的目標文件,dir/test/text.txt.,這就需要File的另一個構造方法

File(File?parent,?String?child)?
根據 parent 抽象路徑名和 child 路徑名字符串創建一個新?File?實例

在得到dir這個文件夾的時候,也應該用上述構造方法,得到dir/testFile新對象

在拷貝文件的時候,使用了不同的流,
之前拷貝文件使用的FileInputStream與FileOutputStream,

這里使用了BufferedInputStream與BufferedOutputStream,使用方法相似

InputStream is =new BufferedInputStream(new FileInputStream(src));  
OutputStream os =new BufferedOutputStream(new FileOutputStream(dest)); 

?

?

?

package file;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class FileUtil {?
/**?
* @param args?
*/?
public static void main(String[] args) {?
// 源目錄?
String srcPath = "C:\\Users\\Administrator\\Desktop\\bbb";?

// 目標目錄?
String destPath = "C:\\Users\\Administrator\\Desktop\\ccc";?

//進行拷貝?
try {?
copyDir(srcPath, destPath);?
} catch (FileNotFoundException e) {?
// TODO Auto-generated catch block?
e.printStackTrace();?
} catch (IOException e) {?
// TODO Auto-generated catch block?
e.printStackTrace();?
}?
}?

/**?
* 通過路徑獲得File對象?
*?
* @param src源路徑?
* @param dest目標路徑?
* @throws IOException?
* @throws FileNotFoundException?
*/?
public static void copyDir(String srcPath,String destPath) throws FileNotFoundException, IOException{?
//拒絕自己拷貝給自己?
if(srcPath.equals(destPath)){?
return ;?
}?
File src=new File(srcPath);?
File dest =new File(destPath);?
copyDir(src,dest);?
}?



/**?
* 拷貝文件夾?
* @param src 源File對象?
* @param dest 目標File對象?
* @throws IOException?
* @throws FileNotFoundException?
*/?
public static void copyDir(File src,File dest) throws FileNotFoundException, IOException{?
if(src.isDirectory()){ //文件夾?
dest =new File(dest,src.getName());?
if(dest.getAbsolutePath().contains(src.getAbsolutePath())){?
System.out.println("父目錄不能拷貝到子目錄中");?
return;?
}?
}?
copyDirDetail(src,dest);?
}?

/**?
* 拷貝文件夾細節?
* @param src?
* @param dest?
*/?
public static void copyDirDetail(File src,File dest) throws FileNotFoundException,IOException{?
if(src.isFile()){ //文件?
copyFile(src, dest);?
}else if(src.isDirectory()){ //文件夾?
//確保目標文件夾存在?
dest.mkdirs();?
//獲取下一級目錄|文件?
for(File sub:src.listFiles()){?
copyDirDetail(sub,new File(dest,sub.getName()));?
}?
}?
}?


/**?
* 文件的拷貝,得到File對象?
* @param 源文件路徑?
* @param 目錄文件路徑?
* @throws FileNotFoundException,IOException?
* @return?
*/?
public static void copyFile(String srcPath,String destPath) throws FileNotFoundException,IOException {?
//1、建立聯系 源(存在且為文件) +目的地(文件可以不存在)?
copyFile(new File(srcPath),new File(destPath));?
}?
/**?
* 文件的拷貝?
* @param 源文件File對象?
* @param 目錄文件File對象?
* @throws FileNotFoundException,IOException?
* @return?
*/?
public static void copyFile(File src,File dest) throws FileNotFoundException,IOException {?
if(! src.isFile()){ //不是文件或者為null?
System.out.println("只能拷貝文件");?
throw new IOException("只能拷貝文件");?
}?
//dest為已經存在的文件夾,不能建立于文件夾同名的文件?
if(dest.isDirectory()){?
System.out.println(dest.getAbsolutePath()+"不能建立于文件夾同名的文件");?
throw new IOException(dest.getAbsolutePath()+"不能建立于文件夾同名的文件");?
}?

//2、選擇流?
InputStream is =new BufferedInputStream(new FileInputStream(src));?
OutputStream os =new BufferedOutputStream(new FileOutputStream(dest));?

//3、文件拷貝 循環+讀取+寫出?
byte[] flush =new byte[1024];?
int len =0;?

//讀取?
while(-1!=(len=is.read(flush))){?
//寫出?
os.write(flush, 0, len);?
}?
os.flush(); //強制刷出?

//關閉流?
os.close();?
is.close();?
}?
}

轉載于:https://www.cnblogs.com/chinaifae/p/10328796.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/276011.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/276011.shtml
英文地址,請注明出處:http://en.pswp.cn/news/276011.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【抽獎】若川誠邀你加前端群,長期交流學習~

最近有許多讀者朋友關注了我,加我好友沒有來得及拉群交流。另外偷偷告訴你:公眾號回復 411,參與抽獎,送極客時間100元以內的課程,今晚八點開獎,必須開獎前加了我的微信&&像是前端&&關注了我…

帝國cms重置管理員_重新設計《紐約時報》 CMS飛行員

帝國cms重置管理員1.什么是飛行員? (1. What Is Pilot?) For 10 weeks, I joined The New York Times’s Story Formats team as a Product Design Intern. Partnered with technology intern Shormie Faruque, we were tasked with redesigning Pilot.大約十個星期…

微信小程序開發 Request Headers: Provisional headers are shown

在微信小程序開發的時候,寫了兩個API請求: 請求A://請求Awx.request({url: https://wx.baidu.com/api/wx/getBallByDate,method: POST,dataType: json,data: {date: that.data.curDate},header: {content-type: application/json},success: function(dt…

昆山萬象匯機器人_昆山十鎮,在售新盤匯總

陸家建偉國際汽車城,均價 7500 元/㎡美吉特家居廣場,均價 17000 元/㎡美吉特燈都,均價 17000 元/㎡花橋綠地象嶼蘇河公園,均價 22950 元/㎡凱德都會新峰,均價 21500 元/㎡越洋國際,均價 18000 元/㎡浦西玫瑰…

Mini 容器學習筆記6——組件的獲取(應用)

1. 通過組件Id獲取組件實例&#xff1a; [Test]public void GetByIdTest(){ServiceRegistry.Register<Person>("person");var person ServiceLocator.Get<IPerson>("person");Assert.IsTrue(person ! null);var person2 ServiceLocator.Get&…

JavaScript ES2021 最值得期待的 5 個新特性解析

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天分享一篇關于ES2021的5個新特性。點擊下方卡片關注我&#xff0c;或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列在寫本文時&#xff0c;本文提到的新的 JavaScript …

uniapp延遲執行_uniapp微信小程序真機調試點擊按鈕有1秒延遲

詳細問題描述(DCloud產品不會有明顯的bug&#xff0c;所以你遇到的問題大都是在特定環境下才能重現的問題&#xff0c;請仔細描述你的環境和重現方式&#xff0c;否則DCloud很難排查解決你的問題)[內容]開發uniapp小程序項目時,在頁面中點擊按鈕后, 數據即時更新, 視圖層延遲1秒…

latex排版基礎_排版基礎分類

latex排版基礎重點 (Top highlight)There are many parts to creating a beautiful, functional, memorizing design. That’s what all User Experience designers set out to do. You need to consider your users, strategy, features, content, color, and so much more. A…

AS3 CookBook學習整理(一)

1. 我要改變swf的尺寸和顏色 在flex builder 3里&#xff0c;默認會生成一個全屏、背景色為#869CA7、幀數為24/秒的swf文件&#xff0c;要修改這些參數&#xff0c;只需要在類文件中定義 [SWF(width"800", height"600", backgroundColor"#ffffff"…

微信小程序研發問題梳理:翻頁:下拉:緩存:canvas:富文本:分享

微信小程序研發問題梳理 最近鼓搗小程序的時候&#xff0c;著實遇到了一些問題&#xff0c;盡管有些再翻看文檔幾遍&#xff0c;就能找到答案&#xff0c;但還是要發揮下爛筆頭的功效&#xff0c;順便梳理下。 問題列表 登錄流程小程序標簽頁地址無法跳轉問題頁面翻頁內容加…

Nginx重啟方式

2019獨角獸企業重金招聘Python工程師標準>>> 重啟方式有三種&#xff1a; 1.簡單型&#xff0c;先關閉進程&#xff0c;修改你的配置后&#xff0c;重啟進程。 2.重新加載配置文件&#xff0c;不重啟進程&#xff0c;不會停止處理請求 3.平滑更新nginx二進制&#x…

axure如何頁面滑動時廣告位上移_新手APP運營如何做廣告位投放

運營是什么&#xff1f;這種問題在各種論壇、貼吧、百度知道、問答百科類中都會出現。上面也有各種大神各式各樣的回答&#xff0c;從不同角度向我們闡述了什么是運營。用 戶運營、內容運營、社區運營、活動運營、市場運營、等等&#xff0c;各種各樣的文章對它們有非常多的分類…

常見的8個前端防御性編程方案

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天分享幾個常見的前端防御性編程方案。點擊下方卡片關注我&#xff0c;或者查看源碼等系列文章。學習源碼整體架構系列、年度總結、JS基礎系列關于前端防御性編程我們大多數情況可能遇到過&am…

比特平面分層_平面設計中的分層

比特平面分層One of the first windows to pop up automatically, when I first started using Adobe Photoshop back in 2013, was the Layers one. Albeit I was dabbling around with it for making memes, it was one of the first things I played around with.2013年&…

微軟中國推校園先鋒計劃,保障學生低價獲取正版軟件

2010年7月13日&#xff0c;人人網 Lucky 7 率先向同學們宣布了"微軟校園先鋒計劃"上線的消息&#xff0c;該計劃現在接受學生預購正版 Windows 7 專業版和 Office 2010 專業版&#xff0c;正式銷售的日期為7月19日。該計劃的官網是&#xff1a;http://ms.shop.edu.cn…

Nginx laraval-admin 頁面小圖標不顯示 問題處理

laraval-admin 頁面小圖標不顯示 類似問題 nginx下加載eot|otf|ttf|woff|svg等404 錯誤問題 瀏覽器console控制臺報錯 GET http://admin.xxx.com/vendor/laravel-admin/google-fonts/fonts/Source-Sans-Pro.woff2 net::ERR_ABORTED 404 (Not Found)CSS 樣式引用字體 font-face …

Ajax完整資料加代碼

什么是Ajax&#xff1f;答&#xff1a;Ajax是一種無需加載整個網頁&#xff0c;就能夠更新部分網頁&#xff0c;與后臺交互的技術。Ajax的優點&#xff1f;答&#xff1a;能夠在不更新整個頁面的前提下&#xff0c;維護數據。這使得Web程序可以更快速的回應用戶的動作&#xff…

did雙重差分法_Stata中雙重差分操流程及代碼

01簡介現代計量經濟學和統計學的發展為我們的研究提供了可行的工具。倍差法來源于計量經濟學的綜列數據模型&#xff0c;是政策分析和工程評估中廣為使用的一種計量經濟方法。主要是應用于在混合截面數據集中&#xff0c;評價某一事件或政策的影響程度。該方法的基本思路是將調…

Axios 如何緩存請求數據?

大家好&#xff0c;我是若川。歡迎加我微信 ruochuan12&#xff0c;長期交流學習。今天推薦這篇Axios緩存請求數據的文章&#xff0c;相信是常見的業務場景&#xff0c;感興趣的讀者可以看看 umi-request&#xff0c;支持緩存功能。另外我之前也寫過 axios源碼文章&#xff0c;…

Reflection in .net

最近在看設計模式的一些東西&#xff0c;在講到builder模式中使用到了c#的反射機制&#xff0c;從網上找了寫資料&#xff0c;整理如下&#xff1a; 在C#中&#xff0c;我們要使用反射&#xff0c;首先要搞清楚以下命名空間中幾個類的關系: System.Reflection命名空間(1) App…