java 通过ssh复制文件 java高效复制文件
转载
文件的复制
FileInputStream(字节流方式)
FileInputStream
从文件系统中的某个文件中获得输入字节
看如下示例:
package IOPractice;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 将file1文件复制到file2文件里
*/
publicclass CopyFile {
//复制音频文件
// private static String file1 = "D:/Test/陈奕迅 - 浮夸.mp3";
// private static String file2 = "D:/Test/aa/bb.mp3";
//复制视频文件
// private static String file1 = "D:/Test/嵌套子查询.wmv";
// private static String file2 = "D:/Test/aa/bb.wmv";
//复制图片
// private static String file1 = "D:/Test/05.jpg";
// private static String file2 = "D:/Test/aa/bb.jpg";
//复制文字文档文件
privatestatic String file1 = "D:/Test/c.txt";
privatestatic String file2 = "D:/Test/aa/bb.txt";
publicstaticvoid main(String[] args) {
try {
//字节输入流
FileInputStream fis = new FileInputStream(file1);
FileOutputStream fos = new FileOutputStream(file2);
//字节输出流
byte[] b = newbyte[1024];
while((fis.read(b))!=-1){
fos.write(b);
}
fis.close();
fos.flush();
fis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
|
从以上示例代码中可以看到:
我们的目的是想将file1这个文件复制到file2这个文件里,对于file1,我们分别用音频文件、视频文件、图片和文档文件做了实验,运行结果显示,都是可以实现复制功能的,而且file2这个文件还可以正常的使用和查看,说明了FileInPutStream这种方式是可以对音频文件、视频文件、图片和文档文件进行操作的,而且不会产生什么问题
BufferedReader(字符流方式)
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取
看如下示例:
package IOPractice;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
* 将file1文件复制到file2文件里
*/
publicclass BufferedRWDemo {
//复制音频文件
// private static String file1 = "D:/Test/陈奕迅 - 浮夸.mp3";
aa/bb.mp3";
// 复制视频文件
wmv";
aa/bb.wmv";
// 复制图片
jpg";
aa/bb.jpg";
// 复制文字文档文件
privatestatic String file1 = "D:/Test/c.txt";
privatestatic String file2 = "D:/Test/aa/bb.txt";
publicstaticvoid main(String[] args) {
try {
BufferedReader br = new BufferedReader(new FileReader(file1));
BufferedWriter bw = new BufferedWriter(new FileWriter(file2));
String s = null;
while ((s = br.readLine()) != null) {
bw.write(s + "\r\n");
}
br.close();
bw.flush();
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
|
从以上示例代码中可以看到:
我们的目的是想将file1这个文件复制到file2这个文件里,对于file1,我们分别用音频文件、视频文件、图片和文档文件做了实验,运行结果显示,都是可以实现复制功能的,但是复制后的音频文件、视频文件、图片打不开,只有文档文件能正常打开,说明了BufferedReader这种方式不能对音频文件、视频文件和图片进行操作,只能对文档文件
总结:
有些人在这里就有疑问了:那我们应该在什么时候用FileInputStream这种方式、什么时候采用BufferedReader这种方式呢?
这就取决于你需要要操作的对象是什么了。如果你操作的对象是图片、音频和视频文件的话,那么就选择FileInputStream;如果操作对象是文字内容的文档的话,就选择BufferedReader,因为BufferedReader对图片、音频和视频文件的操作会使原文件产生损坏,不能播放。
那么又会有人会问了,那万一有个文件夹里,既存在图片、音频和视频文件,又存在文字文档文件,现在又想将这个文件夹复制到另外一个地方,怎么实现这个操作呢?
文件夹的复制
在理解上面的基础上,再看如下小示例即可明白了:
package IOPractice;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 将文件夹"D:/Test"里的所有内容复制到"D:/Test1"里
*/
publicclass MyFileCopy {
publicstaticvoid main(String[] args) throws IOException {
copyFile("D:/Test", "D:/Test1");
}
//文件复制操作
publicstaticvoid copyFile(String file1, String file2) throws IOException{
File in = new File(file1);//源文件
File out = new File(file2);//目标文件
if(!in.exists()){//源文件不存在时
System.out.println(in.getAbsolutePath()+"源文件路径错误");
}else{//源文件存在时
System.out.println("源文件路径" + in.getAbsolutePath());
System.out.println("目标路径" + out.getAbsolutePath());
}
if(!out.exists()){
out.mkdirs();//如果目标文件夹不存在,则自动创建
}
//将源文件中的文件放入file数组中
File[] file = in.listFiles();
//定义字节输入流和输出流
FileInputStream fis = null;
FileOutputStream fos = null;
for(int i=0; i<file.length; i++){
if(file[i].isFile()){
//如果从file中拿出来的是文件,则开始copy操作
fis = new FileInputStream(file[i]);
fos = new FileOutputStream(new File(file2+"/"+file[i].getName()));
byte[] b = newbyte[1024*10];
int c;
while((c = fis.read(b)) != -1){
fos.write(b,0,c);
System.out.println("文件复制中..");
}
fis.close();
fos.flush();
fos.close();
}else{
//如果从file中拿出来的是文件夹,则反复执行此方法
copyFile(file1+"/"+file[i].getName(),file2+"/"+file[i].getName());
}
}
}
}
|
以上代码的功能为:将文件夹"D:/Test"里的所有内容复制到"D:/Test1"里
而且复制得到的所有文件都是正常的,没有损坏
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。