很久没更新博客了,这段时间很忙,今天抽个午休的时间发表一份博客,来给大家展示一下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.