您好,登錄后才能下訂單哦!
本篇文章為大家展示了java中有哪些復(fù)制文件的方式,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。
1. 使用FileStreams復(fù)制
這是最經(jīng)典的方式將一個(gè)文件的內(nèi)容復(fù)制到另一個(gè)文件中。 使用FileInputStream讀取文件A的字節(jié),使用FileOutputStream寫入到文件B。 這是第一個(gè)方法的代碼:
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(); } }
正如你所看到的我們執(zhí)行幾個(gè)讀和寫操作try的數(shù)據(jù),所以這應(yīng)該是一個(gè)低效率的,下一個(gè)方法我們將看到新的方式。
2. 使用FileChannel復(fù)制
Java NIO包括transferFrom方法,根據(jù)文檔應(yīng)該比文件流復(fù)制的速度更快。 這是第二種方法的代碼:
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復(fù)制
Apache Commons IO提供拷貝文件方法在其FileUtils類,可用于復(fù)制一個(gè)文件到另一個(gè)地方。它非常方便使用Apache Commons FileUtils類時(shí),您已經(jīng)使用您的項(xiàng)目?;旧?這個(gè)類使用Java NIO FileChannel內(nèi)部。 這是第三種方法的代碼:
private static void copyFileUsingApacheCommonsIO(File source, File dest) throws IOException { FileUtils.copyFile(source, dest); }
4. 使用Java7的Files類復(fù)制
如果你有一些經(jīng)驗(yàn)在Java 7中你可能會(huì)知道,可以使用復(fù)制方法的Files類文件,從一個(gè)文件復(fù)制到另一個(gè)文件。 這是第四個(gè)方法的代碼:
private static void copyFileUsingJava7Files(File source, File dest) throws IOException { Files.copy(source.toPath(), dest.toPath()); }
下面看下java拷貝文件到另一個(gè)目錄下的實(shí)現(xiàn)代碼,具體代碼如下所示:
package com.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; public class TestHtml { /** * 復(fù)制單個(gè)文件 * @param oldPath String 原文件路徑 如:c:/fqf.txt * @param newPath String 復(fù)制后路徑 如: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()) { //文件存在時(shí) 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; //字節(jié)數(shù) 文件大小 System.out.println(bytesum); fs.write(buffer, 0, byteread); } inStream.close(); } } catch (Exception e) { System.out.println("復(fù)制單個(gè)文件操作出錯(cuò)"); e.printStackTrace(); } } /** * 復(fù)制整個(gè)文件夾內(nèi)容 * @param oldPath String 原文件路徑 如:c:/fqf * @param newPath String 復(fù)制后路徑 如: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("復(fù)制整個(gè)文件夾內(nèi)容操作出錯(cuò)"); 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); // // //文件緩存區(qū) // byte[] b = new byte[1024]; // //將文件流信息讀取文件緩存區(qū),如果讀取結(jié)果不為-1就代表文件沒有讀取完畢,反之已經(jīng)讀取完畢 // while(fis.read(b)!=-1){ // //將緩存區(qū)中的內(nèi)容寫到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); } }
上述內(nèi)容就是java中有哪些復(fù)制文件的方式,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。