/**
* 将某个文件夹下的所有的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();
}
}