Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

どなたかお助けください><

JAVAのあるディレクトリ以下のjavaファイルのメソッド名称をすべて抽出したいです。。。
そして、テキストで集めたいです。
しかし、良い方法が思いつきません。
問題は、
?ディレクトリ以下のjavaファイル数が200を超える。
?エクリプスのCtr+Oの機能使える!と思ったんですが、1ファイルずつはめんどくさい。。。
?リフレクションの機能を使えばできる??と思ったんですが、組めない><;

このような悩み持たれた方や、良い方法をご存知の方助けていただけないでしょうか><;;

3

回答

291

閲覧

3件の回答

評価

0

とりあえず、ガイドラインから読んで来よう。

とりあえず2つほど考えてみた。

1つ目。リフレクションで、あるパッケージ内のクラスを列挙してそれぞれのメソッドの一覧を取得、ファイル出力する。
まあオーソドックスだな。

2つ目。JavaDocで生成したHTMLファイルを、テキストエディタで好きなように加工する。
言語の知識がなくても可能だ。

「組めない」なんて言ってないで、ちゃんと勉強しよう。それが今後の力になる。
作っている途中で、調べて試してもどうにも分からない、何を言ってるのか分からない、などというところが出てきたら質問だ。

評価

0

どこまで出来るのか書いた方がいいね
基本的なことだけどファイルに出力方法は分かるの?
パッケージ配下のクラス一覧は?
順番に調べたら分かりそうだよ

評価

0

C:の位置に、指定したフォルダ以下の全javaファイルの名前とそれぞれに入ったメソッド名の連なった.txtファイルが作られるプログラムです

javaのクラスパスの通ったフォルダにコンパイルした全クラスファイルが生成される上元の.javaファイルを色々と操作するのでその過程で元と違う形になる可能性が残るため
javaのクラスパスの通ったフォルダ以下内と読み込むフォルダ以下内の全ファイルをバックアップした後でないとこのまま使用するのは危険だと思うので万一使用する場合生じる問題については全て自己責任でお願いします と言うより内容が理解できない場合決してこのまま使用してはいけませんが

もしご自身で抽出プログラムを作られる場合は参考にどうぞ



import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;

import java.nio.file.*;
import java.io.File;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.lang.reflect.Method;
import java.time.*;
import java.time.format.*;
import java.time.temporal.*;

public class Finds4{
public static void main(String[] args){
Path path=Paths.get("C:\\files\\files2\\Javacode\\");//この位置のフォルダ内及びそれ以下のフォルダに含まれるjavaファイルからメソッド名を取り出す
LocalDateTime dtime=LocalDateTime.now();
try{
Files.walk(path).filter(s -> s.toString().endsWith(".java")).forEach(c -> No(c,dtime));
}catch(IOException e){e.printStackTrace();}
}
static void No(Path s, LocalDateTime localt){
String V="";
String str=s.toString();
   int index = str.lastIndexOf(".");
 String g1=str.substring(0,index);
String g2=g1+"修正.java";
    int index2 = g1.lastIndexOf("\\")+1;
    int index3=g1.length();
String g3=g1.substring(index2,index3);
  System.out.println(g3+".java内のメソッド");
 String q2="\\;";
String q3=q2.substring(1,2);
String q1="pack"+"age "+"Java"+q3;
String r1="Java."+g3;
try(BufferedReader br=new BufferedReader(new FileReader(str));
BufferedWriter bw=new BufferedWriter(new FileWriter(g2)); 
){
String data=null;
String regrex1=".*pack"+"age.*";
Pattern p=Pattern.compile(regrex1);
while((data=br.readLine())!=null){
Matcher m=p.matcher(data);
if(m.find()){
V=data;
}else{
bw.write(data);
bw.newLine();
}
}
}catch(IOException e){e.printStackTrace();}
try(BufferedReader br=new BufferedReader(new FileReader(g2));
BufferedWriter bw=new BufferedWriter(new FileWriter(str)); 
){
String data=null;
while((data=br.readLine())!=null){
bw.write(data);
bw.newLine();
}
}catch(IOException e){e.printStackTrace();}
File s6 = new File(str);
String[] args = { s6.getAbsolutePath()};
JavaCompiler c3 = ToolProvider.getSystemJavaCompiler();
int r = c3.run(null, null, null, args);
//classファイル移動
try(FileInputStream br=new FileInputStream(new File(g1+".class"));
FileOutputStream bw=new FileOutputStream(new File("C:\\program\\Java\\"+g3+".class")); //C:\\program\\Javaにjavaのクラスパスが通っている場合こう書く 別の場所に通している場合はそのパスをC:\\program\\Java\\の代わりに入れる
){
int data=0;
while((data=br.read())!=-1){
bw.write(data);
}
}catch(IOException e){e.printStackTrace();}
//移動終了
ZoneId zo1=ZoneId.systemDefault();
ZonedDateTime zz2=ZonedDateTime.of(localt,zo1);
DateTimeFormatter fm1=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.FULL);
String fs=fm1.format(zz2);
try(BufferedWriter bw=new BufferedWriter(new FileWriter("C:\\"+fs+"のメソッド名.txt",true)); ){//このパス上(C:\\)のファイル内に全てのファイル名とそれぞれについての全てのメソッド名が順に入る 毎回「時刻+メソッド名」の新しいテキストファイル生成
bw.write(g3+".java内のメソッド");
bw.newLine();
try {
    String regrexs=".*lambda.*";
Pattern p=Pattern.compile(regrexs);
  Class c = Class.forName(g3);
    for(Method m : c.getDeclaredMethods()) {//メソッド名取得
Matcher m2=p.matcher(m.getName());
if(m2.find()){}else{
bw.write(m.getName());
bw.newLine();
        System.out.println(m.getName());}
}
} catch (Exception e) {
}
}catch(IOException e){e.printStackTrace();}
try(BufferedReader br=new BufferedReader(new FileReader(g2));
BufferedWriter bw=new BufferedWriter(new FileWriter(str)); 
){
String data=null;
bw.write(V);
bw.newLine();
while((data=br.readLine())!=null){
bw.write(data);
bw.newLine();
}
}catch(IOException e){e.printStackTrace();}
File newdir = new File(g2);
newdir.delete();
}
}

回答する

ログインしていません。

ログインしなくても回答はできますが、ログインすると、質問・回答の管理、更新があった場合のメールでの通知を受けることができます。 アカウントをお持ちでない方は会員登録を行ってください。

ユーザ名匿名