国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > Java > 正文

java復制文件的4種方式及拷貝文件到另一個目錄下的實例代碼

2024-07-14 08:41:21
字體:
來源:轉載
供稿:網友

盡管Java提供了一個可以處理文件的IO操作類。 但是沒有一個復制文件的方法。 復制文件是一個重要的操作,當你的程序必須處理很多文件相關的時候。 然而有幾種方法可以進行Java文件復制操作,下面列舉出4中最受歡迎的方式。 

1. 使用FileStreams復制

這是最經典的方式將一個文件的內容復制到另一個文件中。 使用FileInputStream讀取文件A的字節,使用FileOutputStream寫入到文件B。 這是第一個方法的代碼: 

private static void copyFileUsingFileStreams(File source, File dest)     throws IOException {     InputStream input = null;     OutputStream output = null;     try {       input = new FileInputStream(source);       output = new FileOutputStream(dest);           byte[] buf = new byte[1024];           int bytesRead;           while ((bytesRead = input.read(buf)) > 0) {         output.write(buf, 0, bytesRead);       }   } finally {     input.close();     output.close();   } } 

正如你所看到的我們執行幾個讀和寫操作try的數據,所以這應該是一個低效率的,下一個方法我們將看到新的方式。

2. 使用FileChannel復制

Java NIO包括transferFrom方法,根據文檔應該比文件流復制的速度更快。 這是第二種方法的代碼: 

private static void copyFileUsingFileChannels(File source, File dest) throws IOException {       FileChannel inputChannel = null;       FileChannel outputChannel = null;     try {     inputChannel = new FileInputStream(source).getChannel();     outputChannel = new FileOutputStream(dest).getChannel();     outputChannel.transferFrom(inputChannel, 0, inputChannel.size());   } finally {     inputChannel.close();     outputChannel.close();   } } 

3. 使用Commons IO復制

Apache Commons IO提供拷貝文件方法在其FileUtils類,可用于復制一個文件到另一個地方。它非常方便使用Apache Commons FileUtils類時,您已經使用您的項目?;旧?這個類使用Java NIO FileChannel內部。 這是第三種方法的代碼: 

private static void copyFileUsingApacheCommonsIO(File source, File dest)     throws IOException {   FileUtils.copyFile(source, dest); } 

4. 使用Java7的Files類復制

如果你有一些經驗在Java 7中你可能會知道,可以使用復制方法的Files類文件,從一個文件復制到另一個文件。 這是第四個方法的代碼: 

private static void copyFileUsingJava7Files(File source, File dest)     throws IOException {       Files.copy(source.toPath(), dest.toPath()); }

下面看下java拷貝文件到另一個目錄下的實現代碼,具體代碼如下所示:

package com.util;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;public class TestHtml {/** * 復制單個文件 * @param oldPath String 原文件路徑 如:c:/fqf.txt * @param newPath String 復制后路徑 如:f:/fqf.txt * @return boolean */ public void copyFile(String oldPath, String newPath) { try { int bytesum = 0; int byteread = 0; File oldfile = new File(oldPath); if (oldfile.exists()) { //文件存在時 InputStream inStream = new FileInputStream(oldPath); //讀入原文件 FileOutputStream fs = new FileOutputStream(newPath); byte[] buffer = new byte[1444]; int length; while ( (byteread = inStream.read(buffer)) != -1) { bytesum += byteread; //字節數 文件大小 System.out.println(bytesum); fs.write(buffer, 0, byteread); } inStream.close(); } } catch (Exception e) { System.out.println("復制單個文件操作出錯"); e.printStackTrace();}}/** * 復制整個文件夾內容 * @param oldPath String 原文件路徑 如:c:/fqf * @param newPath String 復制后路徑 如:f:/fqf/ff * @return boolean */ public void copyFolder(String oldPath, String newPath) {try { (new File(newPath)).mkdirs(); //如果文件夾不存在 則建立新文件夾 File a=new File(oldPath); String[] file=a.list(); File temp=null; for (int i = 0; i < file.length; i++) { if(oldPath.endsWith(File.separator)){ temp=new File(oldPath+file[i]); } else{ temp=new File(oldPath+File.separator+file[i]); }if(temp.isFile()){ FileInputStream input = new FileInputStream(temp); FileOutputStream output = new FileOutputStream(newPath + "/" + (temp.getName()).toString()); byte[] b = new byte[1024 * 5]; int len; while ( (len = input.read(b)) != -1) { output.write(b, 0, len); } output.flush(); output.close(); input.close(); } if(temp.isDirectory()){//如果是子文件夾 copyFolder(oldPath+"/"+file[i],newPath+"/"+file[i]); } } } catch (Exception e) { System.out.println("復制整個文件夾內容操作出錯"); e.printStackTrace();}}public static void main(String[] args)throws Exception {// //這是你的源文件,本身是存在的// File beforefile = new File("C:/Users/Administrator/Desktop/Untitled-2.html");//// //這是你要保存之后的文件,是自定義的,本身不存在// File afterfile = new File("C:/Users/Administrator/Desktop/jiekou0/Untitled-2.html");//// //定義文件輸入流,用來讀取beforefile文件// FileInputStream fis = new FileInputStream(beforefile);//// //定義文件輸出流,用來把信息寫入afterfile文件中// FileOutputStream fos = new FileOutputStream(afterfile);//// //文件緩存區// byte[] b = new byte[1024];// //將文件流信息讀取文件緩存區,如果讀取結果不為-1就代表文件沒有讀取完畢,反之已經讀取完畢// while(fis.read(b)!=-1){// //將緩存區中的內容寫到afterfile文件中// fos.write(b);// fos.flush();// }String oldPath="C:/Users/Administrator/Desktop/Untitled-2.html";String newPath="C:/Users/Administrator/Desktop/jiekou0/Untitled-2.html";TestHtml t=new TestHtml();t.copyFile(oldPath, newPath);}}

總結

以上所述是小編給大家介紹的java復制文件的4種方式及拷貝文件到另一個目錄下的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鹤峰县| 名山县| 宁德市| 济阳县| 东明县| 马尔康县| 启东市| 清新县| 罗山县| 文成县| 盐边县| 修水县| 明溪县| 清丰县| 左云县| 曲阳县| 达孜县| 甘洛县| 台东市| 婺源县| 乌兰浩特市| 凉山| 万全县| 香格里拉县| 临漳县| 清原| 普格县| 高州市| 安丘市| 阿克陶县| 益阳市| 永福县| 石河子市| 福州市| 成都市| 个旧市| 湛江市| 伊川县| 民丰县| 浦江县| 巩留县|