Question

J'ai créé une classe pour compiler manuellement mes fichiers .java en fichiers .class.Ce programme fonctionne avec succès.Mais les fichiers .class sont créés dans le même répertoire que mes fichiers .java.Mais je veux qu’ils soient créés dans un répertoire personnalisé.Que puis-je faire?

Vous trouverez ci-dessous le code que j'utilise pour compiler les fichiers .java.:-

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

// cela compilera mon fichier .java dans un fichier .class et le stockera au même emplacement

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

            }


    } 

//cette méthode essaie de déplacer (par copier-coller) mon fichier .class généré dans un répertoire personnalisé.mais cela donne une erreur comme un mauvais fichier de classe :MyCustomDir MarketWatchBean.Class Class File contient une mauvaise classe:myCustomDir.marketwatchBean Veuillez supprimer ou assurer qu'il apparaît dans le sous-répertoire correct du 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();
            }
        }
Était-ce utile?

La solution

Vous devez passer l'option -d dest_directory à la méthode compiler.run(null,null,null,"-d destdirectory",fileToCompile); Veuillez vous assurer que le répertoire de destination existe déjà.

Du Documentation,

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

Vous pouvez transmettre un nombre variable d'arguments à l'outil.c'est-à-dire que les options de l'outil javac doivent être transmises comme arguments à cette méthode

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top