这个是我写的方法,凑合看吧,我也是初学者。
- package com.itheima;
- //9、 编写程序,将指定目录下所有.java文件拷贝到另一个目的中,并将扩展名改为.txt
- import java.io.*;
- import java.util.ArrayList;
- public class test9 {
- //顶一个集合存入File类型对象
- static ArrayList<File>array= new ArrayList<File>();
- public static void showDir(File dir)//定义一个递归方法取出传入路径的所有文件
- {
- //定义一个File数组接受目录中的文件
- File[] fi=dir.listFiles();
- //把当前接受的目录存入数组
- array.add(dir);
- for(int x=0;x<fi.length;x++)
- {
- if(fi[x].isDirectory())//判断否是一个目录
- {
- showDir(fi[x]);//如果是目录再次调用本方法
- }
- else{
- if(fi[x].toString().endsWith(".java"))//如果不是目录判断当前文件是否是.java结尾
- array.add(fi[x]);//如果是加入集合
- }
- }
- }
- public static void Write(File dir1,File dir2) //定义写出方法,需要有源和目的地,
- {
- showDir(dir1);//先把接受的远传入递归方法取出所有目录和文件路径
-
- for(File f1:array)//因为流无法直接创建带有路径的文件,所以遍历集合中的所有目录和文件,创建文件夹
- {
- String ss=f1.toString().replaceAll("\\\\","\\\\\\\\");
- ss=ss.replaceAll(".java",".txt");
- StringBuffer sb1=new StringBuffer(ss);
- sb1.replace(0, dir1.getPath().length()+1,dir2.getPath().replaceAll("\\\\","\\\\\\\\"));
- File f2=new File(sb1.toString());
- makeDir(f2);
- }
- for(File f1:array)//遍历集合中的所有目录和文件,创建文件
- {
- String ss=f1.toString().replaceAll("\\\\","\\\\\\\\");
- ss=ss.replaceAll(".java",".txt");
- StringBuffer sb1=new StringBuffer(ss);
- sb1.replace(0, dir1.getPath().length()+1,dir2.getPath().replaceAll("\\\\","\\\\\\\\"));
- File f2=new File(sb1.toString());
- Writedir(f1,f2);
- }
- }
- public static void makeDir(File f1)
- {
- if(!f1.getParentFile().exists())//获取父路径是否存在。如果不存在则创建
- {
- f1.getParentFile().mkdir();
- }
- }
- public static void Writedir(File f1,File f2)
- {
- //创建读取流和输出流
- BufferedInputStream bufr = null;
- BufferedOutputStream buot = null;
-
- if(!f1.isDirectory())//判断是否是目录
- {
- try {
- bufr= new BufferedInputStream(new FileInputStream(f1));//如果不是把文件读出来
- } catch (FileNotFoundException e) {
-
- throw new RuntimeException("文件读取失败");//如果文件读取不到,抛出异常
- }
- }
- if(!f2.exists())//判断文件或目录是否存在
- {
- try {
- buot=new BufferedOutputStream(new FileOutputStream(f2));//创建输出流
- } catch (FileNotFoundException e) {
- throw new RuntimeException("文件写入失败");
- }
- }
- try
- {//当两个流都不为空时,普通的流输出方法
- if(bufr!=null &&buot!=null){
- int len=0;
- byte [] b=new byte[1024];
- while((len=bufr.read(b))!=-1)
- {
- buot.write(b);
- buot.flush();
- }
- }
- }
- catch(IOException e)
- {
- throw new RuntimeException("文件写入失败");
- }
- finally//最后关闭流
- {
- try
- {
- if(!(bufr==null))
- bufr.close();
- if(!(buot==null))
- buot.close();
- }
- catch(IOException e)
- {
- throw new RuntimeException("操作失败");
- }
-
- }
-
- }
- public static void main(String[] args) {
- File dir1=new File("E:\\1");
- File dir2=new File("F:\\1");
- Write(dir1,dir2);
-
- }
- }
复制代码 |