Как получить количество переменных класса данного. java файла? - PullRequest
0 голосов
/ 12 апреля 2020

Мне нужно создать приложение, чтобы получить подсчет переменных (атрибутов) класса для заданного файла. java. Поэтому я разработал код, используя отражение java, как показано ниже. Так что здесь я создаю новый. java файл с тем же содержимым, что и при импорте. java файл в моем пакете sr c, потому что тогда этот файл. java может быть доступен для целей отражения. Но проблема в том, что IDE не выясняет обновления этих файлов автоматически, что означает, что даже если файл уже создан в моей директории, IDE не может определить его сразу, поэтому мне нужно обновить sh пакет sr c, чтобы уведомить об обновлениях в IDE. Так как я могу решить эту проблему? проблема. Поэтому, когда вы запустите это в первый раз, будет исключение класса не найден, потому что даже если этот файл. java, уже находящийся в папке IDE sr c, не знает. Я пробовал с затмением, Intelij IDES.

  import java.io.FileReader;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.lang.reflect.Field;
  importjava.util.concurrent.atomic.AtomicInteger;


 public class AppInitializer {
public static void main(String args[])throws Exception{
    AtomicInteger atomicInteger = new AtomicInteger();
    Runtime.getRuntime().addShutdownHook(new Thread()
    {
        public void run()
        {
            try {
                meth ();
            } catch (ClassNotFoundException e) {
                e.printStackTrace ( );
            }
        }
    });

    FileReader fr=new FileReader("C:\\Users\\User\\Desktop\\Sample.java");
    int i;
    StringBuffer str= new StringBuffer("");
    while((i=fr.read())!=-1){
    str.append ( (char)i );}

    String s = String.valueOf ( str );


    String replaceString=s.replaceAll ( "public class [^\\n]+", "public class filename{" );
    System.out.println (replaceString );

    fr.close();
    try {
        FileWriter myWriter = new FileWriter("src/filename.java");
        myWriter.write( String.valueOf ( replaceString ) );

        myWriter.close();
        System.out.println("Successfully wrote to the file.");

    } catch (IOException e) {
        System.out.println("An error occurred.");
        e.printStackTrace();
    }

}
 static void meth() throws ClassNotFoundException {

    Class classs= Class.forName ( "filename" );
    int count = 0;
    for (Field field : classs.getDeclaredFields ()){
        count++;
    }
    System.out.println (count );
}
}

1 Ответ

0 голосов
/ 12 апреля 2020

Если вы просто добавите новый файл .java в свою программу, это не добавит к нему новый класс. Вы должны скомпилировать его во время выполнения, чтобы метод Class.forName(...) смог его найти.

Руководство о том, как это сделать, см. В этом руководстве .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...