Pregunta

Creé una clase para compilar manualmente mis archivos .java en archivos .class.Este programa funciona exitosamente.Pero los archivos .class se crean en el mismo directorio que mis archivos .java.Pero quiero que se creen en algún directorio personalizado.¿Qué puedo hacer?

A continuación se muestra el código que estoy usando para compilar archivos .java.:-

//***************************//

//esto compilará mi archivo .java en un archivo .class y lo almacenará en la misma ubicación

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);

            }


    } 

//este método intenta mover (copiando y pegando) mi archivo .class generado a un directorio personalizado.pero da algún error como archivo de clase incorrecto:El archivo de clase MyCustomDir MarketWatchBean.Class contiene una clase incorrecta:mycustomdir. MarketWatchBean (en inglés) Por favor, elimínelo o asegúrese de que aparece en el subdirectorio correcto de la ruta de clase.

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();
            }
        }
¿Fue útil?

Solución

Tienes que pasar la opción. -d dest_directory al método compiler.run(null,null,null,"-d destdirectory",fileToCompile); Asegúrese de que el directorio de destino ya exista.

Desde el documentación,

int run(InputStream in,
        OutputStream out,
        OutputStream err,
        String... arguments)

Puede pasar un número variable de argumentos a la herramienta.es decir, las opciones de la herramienta javac deben pasarse como argumentos para este método

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top