您好,登錄后才能下訂單哦!
本篇文章為大家展示了java中有哪些復制文件的方式,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
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中有哪些復制文件的方式,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。