簡単な説明
このクラスでは、javax.tools.toolproviderに含まれるJavacompilerをコンピレーションに使用し、対応するパスの作成、読み取り、コピーにIOファイルとNIOファイルを使用し、正規表現を使用してパッケージ名とディレクトリを変換します。私はこれらのことを誤りのある統合したばかりで、技術的な内容がないので、便利です。
モジュールAPI
class dynamicreactor://空のパラメーター構築パブリッククラス<?それに応じて、他の異なるコンパイラを使用する場合は、適切な変更のために対応する実行中のコンテキスト設定を参照してください)プライベートストリングgetPackage; //法的Javaファイルパスからパッケージ名を取得してみてください
ソースコード
java.io.bufferedreader;インポートjava.io.file; Import java.io.filereader; Import java.io.ioexception; Import java.nio.file.files; import java.nio.file.path; Import java.nio.file.file.paths; Java.nio.nio.nio.nio.nio.nio.nio.nio.standcopy.paths java.util.regex.matcher; import java.util.regex.pattern;インポートjavax.tools.javacompiler; Import javax.tools.toolprovider;/*** dynamicreactorダイナミックなコンピレーションモジュールは、ソースファイルを編成し、対応するパッケージにコピーして、 @clases(JDKにコピーして)をコピーします。 */public class dynamicReactor {javacompilerコンパイラ;パターンパッケージパターン;静的最終文字列regex = "(?<= package // s)。 @Param SRCPathソースファイルパス * @return class * <br>対応するクラスのクラスインスタンスを返す場合 * <br>故障がnull * * */public compile(string srcpath){class <? {system.out.println( "dynamicecreter:load packagename error!"); return null;} //指定されたソースファイルint res = compiler.run(null、null、null、srcpath); if(res!= 0){system.out.out.println(retunt nultln(get -java andrecreter:compile java)パッケージ名に対応して、パスが存在しない場合にそれを作成し、指定されたクラスファイルが存在する場合に上書きされますstringパッケージ= changepackettodic(packname); file dstdir = new file(packagedst); if(!dstdir.exists()){dstdir.mkdir();} path = paths.(dstdir.mkdir(); + ".class"); path pathto = paths.get(packagedst、pathfrom.getFileName()。toString()); try {files.move(pathfrom、pathto、stardandcopyoption.replace_existing);} catch(ioexception e){system.out.out.Out.Out. fail! "); e.printstacktrace();} try {result = class.forname(packname+"。 "+pathfrom.getFileName()。toString()。メソッドは、法的パッケージ名を対応するパスに変換しますプライベート文字列changepackettodic(string packagename){string [] dirs = packagename.split( "//。"); string res = ".//bin" file private string getPackage(string srcpath){string result = null; bufferedreader br; try {br = new fileReader(srcpath)); string data = br.readline(); {result = m.group();} break;} data = br.readline();} br.close();} catch(ioexception e){system.out.println( "dynamicrector:ener in open file"+srcpath);} return result;}}}}要約します
上記は、Javaプログラミングの動的な編集と読み込みに関するこの記事のすべての内容です。私はそれが誰にでも役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!