对任何类型文件进行文件复制
1.要求
通过二进制流的操作方式把程序调整为可以实现对任何类型文件进行文件复制。
2.方法
- FileInputStream类是文件输入流,根据文件路径可以构造一个FileInputStream对象。
- FileInputStream的read实例方法从文件输入流中读取数据,即读取文件内容。
- FileOutputStream类是文件输出流,根据文件路径可以构造一个FileOutputStream对象。
- FileOutputStream的write实例方法将数据写入到输入流中,即往文件中写内容。
- 读写文件结束后,需要关闭文件输入、输出流。
3.实现过程
- copyFileFromDir()方法复制目录下的文件到指定的目录,会连同子目录一起复制过去,其中不包括该目录。根据指定目录创建文件对象,调用createFile()方法创建文件对象,由于传递的第二个参数为false则是创建目录,如果参数为true,则是创建文件。根据目标路径创建文件对象。如果创建的都是目录,则调用copyFileToDir()方法将指定目录中的文件复制到目标目录中。
- copyFileToDir()方法复制一组文件到指定目录。判断指定目录是否为空,若为空则返回。根据目标路径创建文件对象,如果该文件对象不存在,则新建该目录对象,否则判断文件对象是否是目录,如果不是目录则返回。运用循环遍历需要复制的文件路径,根据路径创建相应的文件对象,如果该文件对象是目录,则调用 copyFileDir()方法通过listFile()方法获得目录中的文件并将文件复制到指定目录中,如果是文件则直接将文件复制到目录中。
- copyFile()方法是复制文件到指定的目录中,File类的exists()方法判断指定文件是否存在,如果存在则返回,否则调用createFile()方法创建文件。根据传入的目标文件创建输入流,再根据流对象创建文件输出流,创建字节数组用来储存读取的数据。根据读取的数据不为空进行循环,利用文件输出流的write()方法将目标文件的内容写入到指定文件中,读取完毕后释放相关的流资源。
listFile()方法获得指定目录下的文件,并将文件的绝对路径放入字符串数组中返回。文件对象的list()方法获得目录中的文件,运用循环将目录中的文件的绝对路径放在字符串数组中返回。 - createFile()方法判断文件是否存在,如果不存在则判断该文件的上级目录是否存在,如果不存在则调用createFile()方法创建该目录,否则判断上级目录是否是文件,如果是文件则创建新文件,否则创建目录。
4.代码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class rw14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
String frompath = "D:\\office\\学前任务\\工程训练\\工程训练代码\\目录路径"; //目录路径
String topath ="D:\\office\\学前任务\\工程训练\\工程训练代码\\源路径"; //源路径
System.out.println("复制目录"+topath+"下的文件(不包含该目录)到指定目录"+frompath+",会连同子目录一起复制过去");
copyFileFromDir(frompath,topath); //调用方法实现目录复制
}
//复制目录下的文件(不包括该目录)到指定目录,会连同子目录一起复制过去
public static void copyFileFromDir(String topath, String frompath) {
// TODO Auto-generated method stub
File file = new File(frompath);//
createFile(topath,false);//true表示创建文件,false表示创建目录
if(