我创建了一个类来手动将.java文件编译成.class文件。该程序成功运行。但是,.class文件与我的.java文件在同一目录中创建。但是,我希望它们可以在某个自定义目录中创建。我该怎么办?
下面是我用来编译.java文件的代码。 : -
// * ** * ** * ** * ** * ** * ** * ** * ** * ** //
//这会将我的.java文件编译成.class文件并将其存储在同一位置
public void compileFile(String pageName,String packageName) {
String fileToCompile = packageName + pageName +".java";
System.out.println("String to compile :- " + fileToCompile );
System.setProperty("java.home", "C:\\install\\Java\\jdk1.7");
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
int compilationResult = compiler.run(null, null, null, fileToCompile);
if(compilationResult == 0){
System.out.println("Compilation is successful");
}else{
System.out.println("Compilation Failed");
// this.deleteFiles(fileToCompile);
}
}
//此方法尝试将生成的.class文件移动(通过复制并粘贴)到自定义目录中。 但它给出了一些错误,如错误的类文件:mycustomdir \ MarketWatchBean.class 类文件包含错误的类:mycustomdir.MarketWatchBean 请删除或确保它出现在类路径的正确子目录中。
public void moveFiles(String sourcePath, String destPath){
InputStream inStream = null;
OutputStream outStream = null;
try{
File afile =new File(sourcePath);
File bfile =new File(destPath);
inStream = new FileInputStream(afile);
outStream = new FileOutputStream(bfile);
byte[] buffer = new byte[1024];
int length;
//copy the file content in bytes
while ((length = inStream.read(buffer)) > 0){
outStream.write(buffer, 0, length);
}
inStream.close();
outStream.close();
//delete the original file
// afile.delete();
System.out.println("File is copied successfully!");
}catch(IOException e){
// this.deleteFiles(sourcePath);
// this.deleteFiles(destPath);
e.printStackTrace();
}
}
答案 0 :(得分:1)
您必须将选项-d dest_directory
传递给方法compiler.run(null,null,null,"-d destdirectory",fileToCompile);
请确保目标目录已存在。
int run(InputStream in,
OutputStream out,
OutputStream err,
String... arguments)
您可以将可变数量的参数传递给该工具。即javac工具选项应作为此方法的参数传递