欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java復(fù)制文件的4種方式及拷貝文件到另一個(gè)目錄下的實(shí)例代碼

 更新時(shí)間:2018年06月27日 08:34:55   投稿:mrr  
這篇文章主要介紹了java復(fù)制文件的4種方式,通過(guò)實(shí)例帶給大家介紹了java 拷貝文件到另一個(gè)目錄下的方法,需要的朋友可以參考下

盡管Java提供了一個(gè)可以處理文件的IO操作類。 但是沒(méi)有一個(gè)復(fù)制文件的方法。 復(fù)制文件是一個(gè)重要的操作,當(dāng)你的程序必須處理很多文件相關(guān)的時(shí)候。 然而有幾種方法可以進(jìn)行Java文件復(fù)制操作,下面列舉出4中最受歡迎的方式。

1. 使用FileStreams復(fù)制

這是最經(jīng)典的方式將一個(gè)文件的內(nèi)容復(fù)制到另一個(gè)文件中。 使用FileInputStream讀取文件A的字節(jié),使用FileOutputStream寫(xiě)入到文件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è)讀和寫(xiě)操作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");
//
// //定義文件輸入流,用來(lái)讀取beforefile文件
// FileInputStream fis = new FileInputStream(beforefile);
//
// //定義文件輸出流,用來(lái)把信息寫(xiě)入afterfile文件中
// FileOutputStream fos = new FileOutputStream(afterfile);
//
// //文件緩存區(qū)
// byte[] b = new byte[1024];
// //將文件流信息讀取文件緩存區(qū),如果讀取結(jié)果不為-1就代表文件沒(méi)有讀取完畢,反之已經(jīng)讀取完畢
// while(fis.read(b)!=-1){
// //將緩存區(qū)中的內(nèi)容寫(xiě)到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);
}
}

總結(jié)

以上所述是小編給大家介紹的java復(fù)制文件的4種方式及拷貝文件到另一個(gè)目錄下的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

最新評(píng)論