日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...

發布時間:2023/12/4 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

盡管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種方式及拷貝文件到另一個目錄下的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

總結

以上是生活随笔為你收集整理的java aio复制文件_java复制文件的4种方式及拷贝文件到另一个目录下的实例代码...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。