JavaSE經(jīng)典小練習(xí)項(xiàng)目之拷貝文件夾
前言
在學(xué)io流的時(shí)候,我發(fā)現(xiàn)聽(tīng)的課程中講的這個(gè)小練習(xí)很有幫助,就記錄了下來(lái),防止忘記哈哈哈
在Java IO操作中,文件和目錄的拷貝功能是非常常用的。我們經(jīng)常需要將整個(gè)目錄下的所有文件復(fù)制到另一個(gè)位置進(jìn)行備份。為了實(shí)現(xiàn)這個(gè)功能,Java提供了豐富的IO類讓我們方便操作。
本文將通過(guò)一個(gè)示例代碼,演示如何使用File類和流完成整個(gè)目錄的遞歸拷貝。我們僅需幾行代碼,就可以批量拷貝任意文件數(shù)量的目錄。希望這個(gè)實(shí)用的小Demo可以幫助大家更好地理解目錄處理和Java IO操作中的細(xì)節(jié)。讓我們開(kāi)始今天的目錄拷貝之旅吧!
效果
我們發(fā)現(xiàn),src文件夾中有內(nèi)容,但是dest文件夾中沒(méi)有內(nèi)容
運(yùn)行后發(fā)現(xiàn)
二者字節(jié)數(shù)一樣,完全復(fù)制過(guò)來(lái)了從兩張圖片可以看到,源文件夾中有一些文檔文件和子文件夾,目標(biāo)文件夾開(kāi)始是完全空的。程序運(yùn)行后,目標(biāo)文件夾中的內(nèi)容和源文件夾一模一樣,實(shí)現(xiàn)了完整的文件夾復(fù)制效果。
代碼
package IODemo1; import java.io.*; public class Demo1 { public static void main(String[] args) throws IOException { //創(chuàng)建對(duì)象表示數(shù)據(jù)源 File src=new File("G:\\src"); //創(chuàng)建對(duì)象表示目的地 File dest=new File("G:\\dest"); //調(diào)用方法開(kāi)始拷貝 copydir(src,dest); } private static void copydir(File src,File dest) throws IOException { //進(jìn)入數(shù)據(jù)源 File[] files=src.listFiles(); //遍歷數(shù)組 for (File file:files){ if (file.isFile()){ //判斷文件,拷貝 FileInputStream fis=new FileInputStream(file); FileOutputStream fos=new FileOutputStream(new File(dest,file.getName())); byte[] bytes=new byte[1024]; int len; while ((len=fis.read(bytes))!=-1){ fos.write(bytes,0,len); } fos.close(); fis.close(); }else { copydir(file,new File(dest,file.getName())); } } } }
講解
??代碼結(jié)構(gòu)上也是采用了函數(shù)調(diào)用
??在主函數(shù)中要設(shè)置好copy的數(shù)據(jù)源和目的地,然后調(diào)用自定義函數(shù)完成copy
??下面copy的過(guò)程是使用循環(huán),判斷文件后,進(jìn)行復(fù)制
??這里我們編寫一個(gè)方法叫copydir,利用File類能夠遞歸遍歷文件夾結(jié)構(gòu),配合流對(duì)象實(shí)現(xiàn)文件讀取和寫入,這樣就可以批量復(fù)制整個(gè)文件夾的內(nèi)容。
??直接寫入目標(biāo)文件夾是不行的,會(huì)改變結(jié)構(gòu)。必須針對(duì)每個(gè)源文件創(chuàng)建同名的目標(biāo)文件對(duì)象,這樣寫入才能保證目錄樹(shù)的樣子不變。
重點(diǎn)
主要來(lái)說(shuō)一下下面的內(nèi)容
為什么要new一個(gè)file,而不是直接寫到dest文件夾中呢
是因?yàn)槲覀兪且裺rc文件夾的文件復(fù)制到dest文件夾中,但是要 復(fù)制到dest文件夾的哪個(gè)地方呢
是要寫到dest文件夾中的文件中
但是現(xiàn)在dest文件夾是空的
所以要new一個(gè)file
我們通過(guò)這個(gè)簡(jiǎn)單的練習(xí),學(xué)會(huì)了使用File類結(jié)合流完成目錄的遞歸拷貝。注意使用new File構(gòu)造目標(biāo)文件對(duì)象的技巧,這是保證目錄結(jié)構(gòu)同步的關(guān)鍵。文件和目錄的處理是Java IO中常見(jiàn)的操作之一,掌握拷貝,刪除,壓縮解壓等技能,可以讓我們更便捷地處理文件資源。本文內(nèi)容較簡(jiǎn)單,如果有其他目錄處理相關(guān)的問(wèn)題,歡迎留言討論??梢孕薷拇a,只復(fù)制某種類型的文件,比如只復(fù)制txt文件。歡迎大家繼續(xù)探討目錄操作的相關(guān)問(wèn)題。學(xué)習(xí)編程最重要的是做練習(xí),希望大家要多寫代碼,成為技術(shù)高手!最后,希望大家要多動(dòng)手練習(xí),才能真正掌握這些IO編程技巧。
總結(jié)
到此這篇關(guān)于JavaSE經(jīng)典小練習(xí)項(xiàng)目之拷貝文件夾的文章就介紹到這了,更多相關(guān)JavaSE拷貝文件夾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java構(gòu)造函數(shù)示例(構(gòu)造方法)
這篇文章主要介紹了java構(gòu)造函數(shù)示例(構(gòu)造方法),需要的朋友可以參考下2014-03-03Java控制臺(tái)實(shí)現(xiàn)猜拳游戲小游戲
這篇文章主要為大家詳細(xì)介紹了Java控制臺(tái)實(shí)現(xiàn)猜拳游戲小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-11-11gRPC實(shí)踐之proto及Maven插件概念及使用詳解
這篇文章主要為大家介紹了gRPC實(shí)踐之proto及Maven插件概念及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04Springboot事件監(jiān)聽(tīng)與@Async注解詳解
這篇文章主要介紹了Springboot事件監(jiān)聽(tīng)與@Async注解詳解,在開(kāi)發(fā)中經(jīng)??梢岳肧pring事件監(jiān)聽(tīng)來(lái)實(shí)現(xiàn)觀察者模式,進(jìn)行一些非事務(wù)性的操作,如記錄日志之類的,需要的朋友可以參考下2024-01-01SpringBoot2.X整合Spring-Cache緩存開(kāi)發(fā)的實(shí)現(xiàn)
本文主要介紹了SpringBoot2.X整合Spring-Cache緩存開(kāi)發(fā)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07Springboot 實(shí)現(xiàn)數(shù)據(jù)庫(kù)備份還原的方法
這篇文章主要介紹了Springboot 實(shí)現(xiàn)數(shù)據(jù)庫(kù)備份還原的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09