Java -Saiting la posizione dei file di classe compilati manualmente
-
21-12-2019 - |
Domanda
Ho creato una classe per compilare manualmente i miei file .java in file .Class.Questo programma funziona con successo.Ma, i file .Class vengono creati nella stessa directory dei miei file .java.Ma, voglio che vengano creati in qualche directory personalizzata.Cosa posso fare?
Di seguito è riportato il codice che sto usando per compilare i file .java.: -
// * ** * ** * ** * ** * ** * ** * ** * ** * ** //
// Questo compilerà il mio file .java in file .Class e memorizzalo nella stessa posizione
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);
}
}
.
// Questo metodo tenta di spostarsi (dalla copia e incolla) il mio file .Class generato in directory personalizzata. Ma dà qualche errore come un file di cattiva classe: mycustomdir \ marketwatchbean.class Il file di classe contiene classe sbagliata: mycustomdir.marketwatchbean Si prega di rimuovere o assicurarsi che appaia nella corretta sottodirectory del classpath.
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();
}
}
. Soluzione
È necessario passare l'opzione -d dest_directory
al metodo compiler.run(null,null,null,"-d destdirectory",fileToCompile);
Assicurarsi che la directory di destinazione esista già.
Dal Documentazione ,
int run(InputStream in,
OutputStream out,
OutputStream err,
String... arguments)
.
È possibile passare il numero variabile di argomenti allo strumento.I.e le opzioni dello strumento Javac dovrebbero essere passate come argomenti a questo metodo