很久没更新博客了,这段时间很忙,今天抽个午休的时间发表一份博客,来给大家展示一下I/O流。
思路:首先我们把这个题目剖析一下,可以先通过输入输出流把单个文件的方法写出来,在处理文件夹的复制的时候,首先肯定是先把文件夹目录下所有的文件夹和文件遍历出来,小编在这里用的是(递归深度遍历),通过循环这样目录下就变成单个文件和文件夹,在通过调用前面我们写出的单个文件的复制,这样基本就完成了题目,值得注意的是在文件夹复制到文件夹时,是把被复制的文件夹放到新文件夹目录下。
代码如下:
public static void fileCopy(String file, String newFile) {
File files = new File(file);
File newfiles = new File(newFile);
// 判断是否是个目录
if (files.isDirectory()) {
// 对空的文件夹进行创建
if (!newfiles.exists()) {
newfiles.mkdirs();
}
String[] strfile = files.list();
// 遍历文件和目录
for (String newstr : strfile) {
// 创建新的File实例
File fastfile2 = new File(files, newstr);
File lastfile3 = new File(newfiles, newstr);
// 递归调用
fileCopy(fastfile2.getAbsolutePath(),
lastfile3.getAbsolutePath());
}
} else {
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
byte[] bytes = new byte[512];
int len = 0;
try {
fileInputStream = new FileInputStream(files);
if (!newfiles.isDirectory()) {
fileOutputStream = new FileOutputStream(newfiles);
} else {
fileOutputStream = new FileOutputStream(
new File(newfiles.getAbsolutePath() + "\\"
+ files.getName()));
}
while ((len = fileInputStream.read(bytes)) != -1) {
fileOutputStream.write(bytes, 0, len);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (fileInputStream != null) {
try {
fileInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
这段代码可以剖析方法,本人在这里把它们合在一起了。
请读者自己创建文件夹和文件进行测试。
下篇小编将写一个通过字符流来实现文件夹/文件的Copy.