2014-01-10 62 views
1

我創建了一個類來手動編譯我的.java文件到.class文件中。該程序成功運行。但是,.class文件與我的.java文件在同一個目錄中創建。但是,我希望它們在某個自定義目錄中創建。我能做什麼?java -setting手動編譯的類文件的位置

下面是我用來編譯.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

你必須通過選項-d dest_directory的方法compiler.run(null,null,null,"-d destdirectory",fileToCompile);請確保目標目錄已經存在。

documentation

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

您可以通過可變數量的參數的工具。即javac工具選項應作爲參數傳遞給此方法

+0

謝謝章魚......它的工作:) – star95

+0

不客氣。請接受答案,讓其他人知道它已被回答並運作。 – Keerthivasan

+0

如何接受答案? – star95