[JAVA] class info 라는 간단한 util을 만들어 보고 있는데요.
세찬
자바 초보가 질문드립니다.제가 구글링을 여기 저기 하면서 만들어 보고 있는 것인데요.임의의 .java 파일을 입력해 주면이 파일에 대한 클래스 명은 무엇이고,그 클래스가 가진 멤버 변수라던가, 타입, 메소드.. 등등의 정보를 뽑아 내주는유틸을 만들어 보려고 하는데요.
string split 부분이 아직 시원하게 잘라내질 못하네요.List~~ 부분이라던가...String [] st,문장 맨뒤에 붙는 ; ... 등등이 그것입니다.
OOP 언어라는 JAVA...하지만 아직 제겐 그저 절차지향형으로 밖에는 다가오질 않네요.공부를 더 해야 겠지요. ㅠ
혹시 이런 split 라이브러리 라던가 알고리즘(?) 이 좋은것이 있을까요?선배님의 조언 부탁 드립니다.============import java.awt.Frame;import java.awt.Label;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.BufferedInputStream;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Scanner;
//Os X//userInput = /Users/dark_hani/Documents/workspace/MyClassName/src/test.java;//windows//userInput = C:\\NovaSoft\\workspace\\testClassInfo\\testClassInfo\\src\\test.java;
// word=phrase.substring(wordIndex, index); 이녀석 알아볼것.
//한파일 분석 끝나면 자동으로 같은 폴더내의 다른 .java를 찾아 분석루틴 돌릴때 필요할 것임.//File file = new File(C:\\); //File[] files = file.listFiles(); //for (int fileInList = 0; fileInList files.length; fileInList++) //{ //System.out.println(files[fileInList].toString()); //}
public class TestClassInfo { static String[] temp; //임시 저장된 라인 배열 static String delimiter = [ ]+;//구분기호 static MapString,String memberMap = new HashMapString, String(); //클래스, int 등 구분한 내용 저장데이터 static ListString mTempTextLine = new ArrayListString(); static ListString mList = new ArrayListString();
public static void main(String[] args) { String className = ; Scanner input = new Scanner( System.in ); String userInput = new String(); System.out.println(command : ); //userInput = input.nextLine(); if (userInput.equals()){ //userInput = C:\\NovaSoft\\workspace\\testClassInfo\\testClassInfo\\src\\test.java; userInput = C:\\NovaSoft\\workspace\\testClassInfo\\testClassInfo\\src\\UsrAction.java; }
File file = new File(userInput);
FileInputStream fis = null; BufferedInputStream bis = null; DataInputStream dis = null;
try { fis = new FileInputStream(file); bis = new BufferedInputStream(fis); dis = new DataInputStream(bis);
while (dis.available() != 0) { mTempTextLine.add(dis.readLine()); }
List Stringt = new ArrayListString(); System.out.println(분석중); for (int iP=0;iPmTempTextLine.size();iP++ ){ String[] items = mTempTextLine.get(iP).split(delimiter); //이게 중요하다. for (String item : items){ String tmp = ; tmp = item.repitem.replaceAll(\\s,); // 2차 공란 split if (!item.equals({)){ if (!item.equals(})){ if (!item.equals(*)){ t.add(tmp); System.out.print(.); //System.out.println(sitem = +tmp); //+ [ sPLIT : + item.substring(0) } } } }
}
System.out.print(\n); System.out.println( ================= t 생성완료 ================== ); System.out.println(userInput + 분석줃); int q=0; for (q=1;qt.size();q++){ //클래스관련 if (t.get(q).equals(class)){ className = t.get(q+1); if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+] Type : [+t.get(q-1)+]); } if (t.get(q).equals(implements)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+] interface); } if (t.get(q).equals(extends)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+] class); } if (t.get(q).equals(List)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); }
//기본타입 if (t.get(q).equals(int)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); } if (t.get(q).equals(String) || t.get(q).equals(String[])){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); } if (t.get(q).equals(float)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); } if (t.get(q).equals(double)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); } if (t.get(q).equals(byte)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); } if (t.get(q).equals(short)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); } if (t.get(q).equals(long)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); } if (t.get(q).equals(char)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); } if (t.get(q).equals(boolean)){ if(q t.size()) System.out.println(t.get(q)+\tName : [ +t.get(q+1)+]); }
}
// 멤버 타입별로 보기 System.out.print(String : ); for (q=1;qt.size();q++){ if(t.get(q).equals(String)) System.out.print(t.get(q+1)+ | ); } System.out.print(\nint : ); for (q=1;qt.size();q++){ if(t.get(q).equals(int)) System.out.print(t.get(q+1)+ | ); }
fis.close(); bis.close(); dis.close();
} catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
Frame frame = new Frame(Close Operation Frame); Label lbl = new Label(class : +className,Label.LEFT); frame.add(lbl); frame.setSize(400,400); frame.setVisible(true); frame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } }); }
}