- import java.io.*;
- /*
- 思路;
- |-- 首先定义一个方法,用来copy单个文件,
- |-- 创建一个带缓冲的字符读取流与源文件相关联
- |-- 在创建一个带缓冲的字符写入流与目标文件相关联
- |-- 完成读写操作
- |-- 关闭资源
- |-- 然后定义一个用来判断File对象是目录还是文件,用递归来遍历整个文件夹
- |-- 如果是目录,就递归该目录
- |-- 如果是文件就调用文件copy方法复制文件
- */
- class CopyFilesDemo2
- {
- public static void main(String[] args)
- {
- File sour = new File("e:\\Open_Sourse");
- File targ = new File("e:\\copy");
- targ.mkdir();
- findFile(sour,targ);
- }
- public static void findFile(File sour,File targ)
- {
- File[] files = sour.listFiles();
- for(File file:files)
- {
- if(file.isDirectory())
- {
- String dir = file.getName();
- File newFile = new File(targ+"\\"+dir);
- newFile.mkdirs();
- findFile(file,newFile);
- }
- else
- {
- try
- {
- if(file.getName().endsWith("java"))
- {
- String fileName = file.getName();
- String[] newFileName = fileName.split("\\.");
- File new2File = new File(targ+"\\"+newFileName[0]+".txt");
- new2File.createNewFile();
- copyFile(file,new2File);
- }
-
- }
- catch (IOException e1)
- {
- e1.printStackTrace();
- throw new RuntimeException("文件复制失败!");
- }
- }
- }
-
- }
- public static void copyFile(File sour,File targ)
- {
- FileInputStream fis = null;
- FileOutputStream fos = null;
- try
- {
- if(!sour.isFile())
- throw new RuntimeException("sour不是一个文件");
- fis = new FileInputStream(sour);
- fos = new FileOutputStream(targ);
- byte[] buf = new byte[1024];
- int len = 0;
- while((len = fis.read(buf))!=-1)
- {
- fos.write(buf,0,len);
- }
-
- }
- catch (IOException e)
- {
- e.printStackTrace();
- throw new RuntimeException("文件复制失败!");
- }finally
- {
- try
- {
- if(fis != null)
- fis.close();
- }
- catch (IOException efr)
- {
- efr.printStackTrace();
- }
- try
- {
- if(fos != null)
- fos.close();
- }
- catch (IOException efw)
- {
- efw.printStackTrace();
- }
- }
- }
- }
复制代码 |