1

toString()メソッドが含まれるクラスの変数を取得してフォーマットすることで、リフレクションを機能させることができました。

public class ReadFile {

public int test1 =0;
public String test2 = "hello";
Boolean test3 = false;
int test4 = 1;

public static void main(String[] args) throws IOException{

    ReadFile test = new ReadFile();

    System.out.println(test);

}


public String toString(){

    //Make a string builder so we can build up a string
    StringBuilder result = new StringBuilder();
    //Declare a new line constant
    final String NEW_LINE = System.getProperty("line.separator");

    //Gets the name of THIS Object
    result.append(this.getClass().getName() );
    result.append(" Class {" );
    result.append(NEW_LINE);

    //Determine fields declared in this class only (no fields of superclass)
    Field[] fields = this.getClass().getDeclaredFields();

    //Print field names paired with their values
    for ( Field field : fields  ) {
        result.append("  ");
        try {
            result.append(field.getType() + " "); 
            result.append( field.getName() );
            result.append(": ");
            //requires access to private field:
            result.append( field.get(this) );
        } catch ( IllegalAccessException ex ) {
            System.out.println(ex);
        }
        result.append(NEW_LINE);
    }
    result.append("}");

    return result.toString();
}
}

toString()しかし、ディレクトリ内の特定のファイルを指定して作業できるかどうか疑問に思っていました。

私はファイルを取得してプラグインしようとしましたSystem.out.println()が、私が見る限り、クラスのインスタンスを作成し、それが機能するようにインスタンスを与える必要があります。ですから、それをプログラムでどのように行うことができるのかわかりません。

私はこのようなことを試みてきました:

    Path path = FileSystems.getDefault().getPath("D:\\Directory\\Foo\\Bar\\Test.java", args);

    File file = path.toFile();

    System.out.println(file);

しかし、私はそれについてあまり理解していません。私は主に、ファイルを使用可能なものに変換できるかどうかを確認してきましたが、何をする必要があるのか​​わかりません。

どんなアドバイスも素晴らしいでしょう。

4

2 に答える 2

2

ClassLoader APIを調べる必要があると思います。新しいURLClassLoaderを取得して、.javaファイルをJVMにロードするように依頼する必要があります。その後、それについて考えることができます。

于 2013-02-15T22:32:17.843 に答える
1

ファイル(D:\ Directory \ Foo \ Bar \ Test.java)からパッケージ情報を読み取ってから、次の名前でクラスをロードしてみてください。

Class.forName(nameOfTheClass)

JavaAPIクラス

于 2013-02-15T22:28:24.067 に答える