package pack1;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;
public class DeletePackage {
public static void main(String[] args) throws IOException {
File rootDirectory = preparation();
if (rootDirectory == null)
System.out.println("初始准备失败!");
else {
addPackage(rootDirectory);
deletePackage(rootDirectory);
System.out.println("请于目录" + rootDirectory.getAbsolutePath() + "查看");
}
}
/**删除包*/
public static void deletePackage(File rootDirectory) throws IOException {
for (File f : rootDirectory.listFiles()) //遍历根目录的所有子目录
if (f.getName().matches(".*chapter.*")) //匹配子目录名是否为chapter
for (File sourceFile : f.listFiles()) //遍历chapter下的文件和目录
if (sourceFile.getName().matches(".*java.*")) { //如果为java源文件
Scanner input = new Scanner(sourceFile); //从源文件中创建输入流
StringBuilder stringBuilder = new StringBuilder();
if (input.hasNextLine()) input.nextLine(); //读取首行(带包行)
while (input.hasNextLine()) //读取其他行并添加进字符串构建器
stringBuilder.append(input.nextLine()).append("\n");
//源文件重新输入数据
outputData(sourceFile, stringBuilder.toString());
}
}
/**添加包*/
private static void addPackage(File rootDirectory) throws IOException {
for (File f : rootDirectory.listFiles())
if (f.getName().matches(".*chapter.*"))
for (File sourceFile : f.listFiles())
if (sourceFile.getName().matches(".*java.*")) {
Scanner input = new Scanner(sourceFile);
StringBuilder stringBuilder = new StringBuilder();
if (input.hasNextLine()) input.nextLine();
while (input.hasNextLine())
stringBuilder.append(input.nextLine()).append("\n");
outputData(sourceFile, "package " + f.getName() + ";\n" + stringBuilder);
}
}
/**输出数据*/
public static void outputData(File file, String text) throws IOException {
try(PrintWriter printWriter = new PrintWriter(file);) {
printWriter.write(text);
}
}
/**初始化目录和文件*/
public static File preparation() throws IOException{
File rootDirectory = new File("D:\\srcRootDirectory");
if(rootDirectory.exists())
return rootDirectory; //根目录存在时返回根目录
rootDirectory.mkdir(); //创建根目录
createSubDirectories(rootDirectory, 1, 34); //创建子目录
createOtherSubDirectories(rootDirectory, 1, 5); //创建其他子目录
String parentFile = "D:\\JavaIDE程序\\JavaProject1\\src\\pack1"; //自己的带源文件的路径
String[] sourceFiles = {"AddPackage.java", "ArrayIndexOutBoundsException.java", "DeleteText.java"};
for (File f : rootDirectory.listFiles()) //遍历根目录下的子目录
if (f.exists() && f.getName().matches(".*chapter.*")) //如果目录存在且为chapter目录
for (String fil : sourceFiles) { //在此目录下创建源文件
Scanner input = new Scanner(new File(parentFile, fil));
while (input.hasNextLine())
createSourceFile(f, fil, input.nextLine() + "\n");
}
if (!rootDirectory.exists())
return null; //如果根目录创建失败,返回null
for (File f : rootDirectory.listFiles())
if (!f.exists()) return null;
return rootDirectory;
}
/**创建其他子目录*/
public static void createOtherSubDirectories(File rootDirectory, int origin, int end) {
for (int i = origin; i <= end; i++) {
File subDirectory = new File(rootDirectory, "exercise" + i);
if (!subDirectory.exists()) subDirectory.mkdir();
}
}
/**创建子目录*/
public static void createSubDirectories(File rootDirectory, int origin, int end) {
for (int i = origin; i <= end; i++) {
File subDirectory = new File(rootDirectory, "chapter" + i);
if (!subDirectory.exists()) subDirectory.mkdir();
createOtherSubDirectories(subDirectory, 1, 5);
}
}
/**创建源文件*/
public static void createSourceFile(File parentFile, String fileName, String data) throws IOException {
try(PrintWriter output = new PrintWriter(new FileOutputStream(new File(parentFile, fileName), true));) {
output.write(data);
}
}
}