黑马程序员技术交流社区

标题: .java文件(包含文件夹)的拷贝 [打印本页]

作者: JYcainiao    时间: 2015-11-16 13:43
标题: .java文件(包含文件夹)的拷贝
package com.heima.file_Demo;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class file_move_Java {

        /**
         * 将某个文件夹下的所有的java文件包含目录移到同级的copy目录下下
         * 例如F:\黑马基础\java作业\1.java拷贝到F:\copy\java作业\1.java
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                // TODO Auto-generated method stub
                File file = getDir();
                File newfile = new File("F:\\copy\\");
                newfile.mkdirs();
                BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\copy\\java.txt"));//java.txt中存储的是获取到的所有的.java文件的绝对路径
                getJava(file,bw);
                copy(file);
               
        }
        //获取查找路径
        public static File getDir() {
                System.out.println("请输入需要copy的java的文件的路径");
                Scanner sc = new Scanner(System.in);
                while (true) {
                        String line = sc.nextLine();
                        File dir = new File(line);
                        if (dir.isDirectory()) {
                                return dir;
                        }else if (dir.isFile()) {
                                System.out.println("您输入的是是文件路径,请输入文件夹目录");
                        }else {
                                System.out.println("输入路径错误,请重新输入");
                        }
                }
               
        }
       
        //查找目录下的java文件,并把所有的文件目录输入一个txt文档保存起来
        public static BufferedWriter getJava(File dir,BufferedWriter bw) throws IOException {
                File[] files = dir.listFiles();
//                BufferedWriter bw = new BufferedWriter(new FileWriter("java.txt"));
                for (File file : files) {
                        if (file.isFile() && file.getName().endsWith(".java")) {
                                bw.write(file.toString().toCharArray());
                                bw.flush();
                                bw.newLine();
                               
                        }else if (file.isDirectory()) {
                                getJava(file,bw);
                        }
                }
                return bw;
        }
        //获取java.txt中的每行的内容为输入流的文件,再用输出流将每个文件(包含父文件夹)写入到F:\code文件夹下
        public static void copy(File file) throws IOException {
                //从存储路径信息的java.txt文本中获取每行的内容,每行都是一个java文件的绝对路径
                BufferedReader br = new BufferedReader(new FileReader("F:\\copy\\java.txt"));
                BufferedWriter bw1 = new BufferedWriter(new FileWriter("F:\\copy\\newjava.txt"));
                String line ;
                while ((line = br.readLine()) != null) {
                        //先把java文件的父目录创建出来
                        //1.获取原路径中需要改变的路径的索引
                        int index = line.indexOf(file.toString()) + file.toString().length();
                        //2.截取不改变的路径字符串,再将改变的路径添加进字符串
                        String newline = ("F:\\copy\\" + line.substring(index + 1, line.length()));
                        //这里是做个记录,记录改变后的路径
                        bw1.write(newline);
                        bw1.newLine();
                        bw1.flush();
                        //获取路径最后面的路径表示符\的索引   后面的是文件名,前面的是路径名
                        int newindex = newline.lastIndexOf("\\");
                        //获取路径名
                        String dir_name = newline.substring(0, newindex + 1);
                        //这里需要把所有的父文件夹都创建好  才能写文件     是不是不能直接创建没有的路径呢?
                        //把文件夹先创建出来
                        File dir = new File(dir_name);
                        dir.mkdirs();
                        //获取文件的名称
                        String file_name = newline.substring(newindex +1 ,newline.length());
                        BufferedReader br1 = new BufferedReader(new FileReader(line));
                        char[] chs = new char[1024 * 8];
                        //该从源文件读取内容到目标文件了
                        BufferedWriter bw = new BufferedWriter(new FileWriter(dir_name + file_name));
                        int len;
                        while ((len = br1.read(chs)) != -1) {
                                bw.write(chs, 0, len);
                                bw.flush();
                        }
                        br1.close();
                        bw.close();
                }
                br.close();
                bw1.close();
        }
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2