java-设置手动编译的类文件的位置

时间:2014-01-10 11:37:01

标签: java file-io javac .class-file

我创建了一个类来手动将.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();
            }
        }

1 个答案:

答案 0 :(得分:1)

您必须将选项-d dest_directory传递给方法compiler.run(null,null,null,"-d destdirectory",fileToCompile);请确保目标目录已存在。

来自documentation

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

您可以将可变数量的参数传递给该工具。即javac工具选项应作为此方法的参数传递