中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中有哪些復制文件的方式

發布時間:2021-06-08 16:41:07 來源:億速云 閱讀:135 作者:Leah 欄目:編程語言

本篇文章為大家展示了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中有哪些復制文件的方式,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陇川县| 开平市| 怀安县| 永兴县| 大邑县| 芜湖县| 勐海县| 汉源县| 安庆市| 万州区| 伊金霍洛旗| 融水| 襄樊市| 贵南县| 余江县| 沙洋县| 盐津县| 马关县| 隆子县| 扶绥县| 乐业县| 赣州市| 长海县| 五河县| 梨树县| 宁夏| 东乡族自治县| 河北省| 云龙县| 永春县| 扎兰屯市| 牟定县| 太康县| 昌黎县| 惠东县| 游戏| 惠安县| 万盛区| 行唐县| 饶河县| 凭祥市|