Wednesday 14 December 2016

Chapter 12 Exercise 20, Introduction to Java Programming, Tenth Edition Y. Daniel LiangY.

12.20 (Remove package statement)
Suppose you have Java source files under the directories
chapter1, chapter2, . . . , chapter34. Write a program to remove the
statement package chapteri; in the first line for each Java source file
under the directory chapteri. Suppose chapter1, chapter2, . . . ,
chapter34 are under the root directory srcRootDirectory. The root
directory and chapteri directory may contain other folders and files.


import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;

public class Exercise_20 {

    public static void main(String[] args) {

        if (args.length != 1) {
            System.out.println("Invalid arguments.");
            System.out.println("Usage: java Chapter_12.Exercise_20 srcRootDirectory");
            System.exit(1);
        }
        File rootDir = new File(args[0]);
        if (!rootDir.isDirectory()) {
            System.out.println(rootDir.getAbsolutePath());
            System.out.println(rootDir + " is not a directory.");
        }
        File[] rootDirFiles = rootDir.listFiles();
        rootDirFiles = getSpecifiedDirs(rootDirFiles, "Chapter");
        //Kit.display(rootDirFiles);

        for (File dir : rootDirFiles) {

            if (dir.listFiles() == null) continue;
            for (File file : dir.listFiles()) {
                removePackageFromFile(file, dir.getName());
            }
        }

    }

    private static File[] getSpecifiedDirs(File[] rootDirFiles, String name) {

        ArrayList<File> files = new ArrayList<>();
        for (File file : rootDirFiles) {
            if (file.isDirectory() && file.getName().contains(name)) {
                files.add(file);
            }
        }
        return files.toArray(new File[files.size()]);
    }

    private static void removePackageFromFile(File file, String name) {

        String lineSeparator = System.getProperty("line.separator");
        String packageString = "package " + name + ";";
        String buffer = "";
        boolean hasPackage = false;
        try (Scanner input = new Scanner(file)) {

            while (input.hasNext()) {
                String s = input.nextLine();
                if (s.contains(packageString)) {
                    hasPackage = true;
                } else {
                    buffer += s + lineSeparator;
                }
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }

        if (!hasPackage) {
            System.out.println(packageString +" not found in " + file.getAbsolutePath());
            return; // Writing to file will be unnecessary
        }
        System.out.println(buffer);
        try (PrintWriter out = new PrintWriter(file)) {

            out.write(buffer);

        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }

    }


}

No comments :

Post a Comment