当前位置: 首页 > 知识库问答 >
问题:

在java中执行ProcessBuilder后获取。class文件名和路径

盖成弘
2023-03-14
{"code": "class Demo{  \r\n" + 
            "    public static void main(String args[]){  \r\n" + 
            "     System.out.println(\"Hello Java\");  \r\n" + 
            "    }  \r\n" + 
            "}",
"language": "java"}
ProcessBuilder processBuilder = new ProcessBuilder(new String[] { "javac", fullPath });
//fullPath is C:\temp\BNkHZk.java
Process process = processBuilder.start();
processBuilder = new ProcessBuilder(new String[] { "javac", fullPath });
Process process = processBuilder.start();
            if (process.getErrorStream().read() != -1) {
                System.out.println("Compilation Errors" + process.getErrorStream());
            }
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            String line = "";

            while ((line = reader.readLine()) != null) {
                System.out.Println(line);
            }
    private void ExecuteCode(String language, String code){
    String tempFileName = RandomStringUtils.randomAlphanumeric(6);
    // Code to creating the file and save under "C:\\temp\\"
    String fullPath = "C:\\temp\\" + tempFileName+ "." + language;
    try {
            fileWriter = new FileWriter(new File(fullPath));
            fileWriter.write(code);
        } catch (Exception e) {
            System.out.println("IO Exception while creating new file");
            e.printStackTrace();
        } finally {
            if (fileWriter != null) {
                fileWriter.close();
            }
        }
    
    ProcessBuilder processBuilder = new ProcessBuilder(new String[] { "javac", fullPath });
                ////fullPath is C:\temp\BNkHZk.java
            Process process = processBuilder.start();

            if (process.getErrorStream().read() != -1) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
                String line = "";

                while ((line = reader.readLine()) != null) {
                    System.out.println(line);
                }
            }
 //the above execution will create a new **Demo.class** file.
            int exitcode = -1;
            try {
                exitcode = process.waitFor();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (exitcode == 0) {
                (
                    processBuilder  = new ProcessBuilder(new String[] { "java","tempFileName"});//BNkHZk
                        Process process1 = processBuilder.start();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
                        String line = "";

                        while ((line = reader.readLine()) != null) {
                            System.out.println(line + "\n");
                        }
            }
            
}

注意:由于我将以字符串的形式获取文件内容,所以不能保存与.class名称相同的文件名。是否有任何变通方法将文件名保存为。类名??任何变通建议都是赞赏和欢迎的。提前谢了。

共有1个答案

乐成济
2023-03-14

有两个不同的问题。第一个是类文件的命名。类的名称必须与文件的名称匹配。类demo->Demo.java,这就是为什么不能使用随机文件名。编译运行良好,但不是运行。

第二个是ProccessBuilder的处理。我建议采用以下模式

ProcessBuilder pb = new ProcessBuilder("javac.exe", "Demo.java");
pb.directory(Paths.get("path_to_java_file").toFile());
pb.redirectErrorStream(true);
Process process = pb.start();
try (var infoStream = process.getInputStream()) {
    infoStream.transferTo(System.out);
}
status = process.waitFor();

现在您可以看到,如果编译运行正确。

 类似资料:
  • 问题内容: 我有调用其他脚本文件的脚本,但是我需要获取该进程中当前正在运行的文件的文件路径。 例如,假设我有三个文件。使用: 来电。 调用。 我怎样才能获得的文件名和路径,从内部代码,而无需从传递这些信息作为参数? (执行将返回原始启动脚本的文件路径,而不是当前文件的路径。) 问题答案: p1.py: p2.py:

  • 问题内容: 我正在尝试为SVN编写一个提交后钩子,该钩子托管在我们的开发服务器上。我的目标是尝试自动将已提交项目的副本检出到服务器上托管的目录。但是,我需要能够仅读取传递给脚本的目录字符串中的最后一个目录,以便签出到托管我们项目的同一子目录。 例如,如果我对项目“ example”进行SVN提交,则我的脚本将“ / usr / local / svn / repos / example”作为其第一

  • 问题内容: 似乎是一个新手问题,但事实并非如此。一些通用方法并非在所有情况下都有效: sys.argv [0] 这意味着使用,但是如果你是从另一个目录中的另一个Python脚本运行的,则此方法不起作用,并且这可能在现实生活中发生。 文件 这意味着使用,但是我发现这不起作用: py2exe没有属性,但是有一种解决方法 当你从IDLE运行时,没有属性 我得到的 答案不完整的相关问题: Python-查

  • 我想从SD卡文件路径中获取文件名。e、 g.:/storage/sdcard0/DCIM/Camera/1414240995236。jpg我想得到1414240995236。jpg我已经编写了获取相同内容的代码,但它不起作用。请帮忙<下面是我的代码:

  • 问题内容: 这个问题已经在这里有了答案 : 查找从何处加载Java类 (11个答案) 2年前关闭。 给定使用命令执行的类,是否有任何方法可以在运行时从此类的代码确定其当前文件系统的位置? 例如以下课程: 是否有任何方法可以在刚刚被调用的MyClass.class文件的文件系统中获取并打印正确的路径? 同样,如果我从命令调用jar文件,是否有任何方法可以从该jar内的类中获取jar文件的路径? PS

  • 我正在创建一个应用程序,从画廊上传选定的图像,并上传到一个网络服务。web服务需要所选图像的文件名以及文件内容的base64编码。我已经设法用硬编码的文件路径实现了这一点。然而,我很难获得图像的真实文件路径。我在网上看了很多资料,找到了这段代码,但它对我不起作用: 我得到这个错误: 编辑 忘了提到我正在使用Kitkat。看起来我的问题与KitKat有关。我发现了这个(见下文),它帮助我让我的应用程