【发布时间】:2021-12-12 14:50:04
【问题描述】:
我创建了一个 API,它将获取有效负载 (code, language),它会生成一个随机名称来从 java 中保存文件(基于将选择扩展名的语言)。来自 UI 的有效负载在下方
{"code": "class Demo{ \r\n" +
" public static void main(String args[]){ \r\n" +
" System.out.println(\"Hello Java\"); \r\n" +
" } \r\n" +
"}",
"language": "java"}
文件保存按预期正常工作,我可以将文件保存在 C:\\temp 下,但是当我尝试使用 @ 执行这些保存的文件时出现问题987654324@在java中,得到Error: Could not find or load main class BNkHZk(因为执行下面代码后随机生成的文件名与class文件不同)。
ProcessBuilder processBuilder = new ProcessBuilder(new String[] { "javac", fullPath });
//fullPath is C:\temp\BNkHZk.java
Process process = processBuilder.start();
上述执行将创建一个新的 Demo.class 文件。 执行上述命令后,我正在执行以下代码
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);
}
我收到以下错误
Error: Could not find or load main class BNkHZk
完整功能如下
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");
}
}
}
我收到 error Error: Could not find or load main class BNkHZk
注意:由于我将以字符串形式获取文件的内容,因此我无法将 filename 保存为与 .class 名称相同的名称。是否有任何解决方法可以将文件名保存为与 .class 名称相同的文件名?
任何解决方法建议都表示赞赏和欢迎。提前致谢。
【问题讨论】:
标签: java file-io processbuilder