IO_文件拷贝
文件拷贝就把上两文件输入输出和一起,还是四个步骤。
1.创建源,首先创建要拷贝的目标,还要创建一个目的地,也是要把东西拷到那个地方
File src = new File(srcPath);//源头
File dest = new File(destPath);//目的地
2.选择流
InputStream is = null;
OutputStream os = null;
is = new FileInputStream(src);
os = new FileOutputStream(dest,true);
3.操作,把源头里面的东西拷到目的地里面。
try {
is = new FileInputStream(src);
os = new FileOutputStream(dest,true);
//3.操作
byte[] flush = new byte[1024];//缓冲容器
int len = -1;
try {
while ((len=is.read(flush))!=-1) {
os.write(flush,0,len);
}
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
4.释放资源,先打开的后关闭
finally{
//先打开后关闭
try {
if (null != os) {
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (null!=is) { //如果 is没有就不存在释放
is.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
完整的代码如下
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/*
* 四个步骤:分段读取
* 1.创建源 选择房子
* 2.选择流 选择搬家公司
* 3.操作 选择用什么搬
* 4.释放资源 打发搬家公司
*/
public class Copy {
public static void main(String[] args) {
copy("src/io.txt", "src/test.txt");
}
public static void copy(String srcPath,String destPath){
//1.创建源
File src = new File(srcPath);//源头
File dest = new File(destPath);//目的地
//2.选择流
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(src);
os = new FileOutputStream(dest,true);
//3.操作
byte[] flush = new byte[1024];//缓冲容器
int len = -1;
try {
while ((len=is.read(flush))!=-1) {
os.write(flush,0,len);
}
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//先打开后关闭
try {
if (null != os) {
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (null!=is) { //如果 is没有就不存在释放
is.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
在这基础上我们可以把文件夹复制功能写出来。
当我们把一个文件夹复制后去目的地粘贴,首先先在目的地创建一个文件夹,如果要复制的文件,那我们要创建一个文件。如果文件夹里有文件夹和文件,我们就要在目的地创建,然后把里面的东西复制过去。
完整的代码如下
public class Copy02 {
public static void main(String[] args) {
copy("src/copy", "src/dir");
}
public static void copy(String srcPath,String destPath){
//1.创建源
File src = new File(srcPath);//源头
File dest = new File(destPath);//目的地
//创建文件
if(src !=null && src.exists()){
if (src.isFile()) {//如果是文件
File copySrc = new File(dest.getPath());//创建文件
System.out.println(dest.getPath());
System.out.println(src.getName());
System.out.println(copySrc.getPath());
/*System.out.println(src.getName());
System.out.println(copySrc.getPath());*/
try {
boolean flag = copySrc.createNewFile();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//2.选择流
InputStream is = null;
OutputStream os = null;
try {
is = new FileInputStream(src);
os = new FileOutputStream(copySrc);
//3.操作
byte[] flush = new byte[1024];//缓冲容器
int len = -1;
try {
while ((len=is.read(flush))!=-1) {
os.write(flush,0,len);
}
os.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//先打开后关闭
try {
if (null != os) {
os.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (null!=is) { //如果 is没有就不存在释放
is.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
else {//如果是文件夹
for (File s : src.listFiles()) {
File copySrc = new File(dest.getPath()+"/"+src.getName());//创建文件夹
copySrc.mkdirs();
System.out.println(copySrc.getPath());
System.out.println();
copy(s.getPath(),copySrc.getPath()+"/"+s.getName());
}
}
}
}
}