编程语言
首页 > 编程语言> > win10如何通过java执行命令行将文件夹中(包括子文件夹)所有.java文件编译到指定文件夹中,并保留原先目录结构

win10如何通过java执行命令行将文件夹中(包括子文件夹)所有.java文件编译到指定文件夹中,并保留原先目录结构

作者:互联网

 

1,问题描述

最近有一个需求,要通过命令行将一个文件夹下的所有java文件编译为class文件,包括子文件夹中的。

一开始找到一个命令:(表示将TestProjects目录下所有.java文件编译为class文件,并存放在目标文件夹中)

javac -d 目标文件夹 D:\TestProjects\*.java

但此命令不能编译子目录中的java文件

 

2,解决方法

遍历文件夹中所有文件,并用正则表达式匹配所有.java文件,匹配成功执行上述命令即可

    /**
     * 将sourceFile所指文件夹中(包括子文件夹)所有java文件编译为class文件
     * @param sourceFile
     * @param targetPath
     */
    public static void compailJavaToClass(File sourceFile, String targetPath) {
        try {
            // 判断文件不为null或文件目录存在
            if (sourceFile == null || !sourceFile.exists()){
                return;
            }
            // 取得这个目录下的所有子文件对象
            File[] files = sourceFile.listFiles();
            // 遍历该目录下的文件对象
            for (File f: files){

                //判断子目录是否存在子目录,如果是文件则删除
                if (f.isDirectory()){
                    compailJavaToClass(f, targetPath);
                }else {
//                    System.out.println("开始执行命令: sonar-scanner");
                    // 打印文件名
                    String name = f.getName();
                    String path = f.getPath();
                    // .:任意字符,*:任意次数
                    // 这里表示匹配任意结尾为java的文件
                    String pattern = ".*java";
                    System.out.println("path: " + path);
                    if(Pattern.matches(pattern, name)) {
                        String cmd = "javac -d " + targetPath + " " + path;
                        System.out.println(cmd);
                        Process proc = Runtime.getRuntime().exec(cmd);
                    }
                }
            }
        }catch (Exception e) {
            e.printStackTrace();
        }

    }

测试效果 

        File file = new File("D:\\TestProjects\\TestForFindbugs");
        GitUtil.compailJavaToClass(file, "D:\\TestProjects\\TestForFindbugs\\classes");// classes文件夹必须已经存在

 

标签:文件,java,String,sourceFile,文件夹,File,win10
来源: https://blog.csdn.net/qq_41528502/article/details/116099453