高手进!各位有没有实现过包遍历?和找出指定包下面的所有类?

jery_lee 2003-12-11 10:58:29
RT!

高手进!各位有没有实现过包遍历?和找出指定包下面的所有类?

比如给定一个 在 classpath 中的包 (比如"com.xxx.xxx") ,要找出它下面的所有类 (public 就可以.)
...全文
228 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
HelloWorldd 2003-12-12
  • 打赏
  • 举报
回复
mark
jery_lee 2003-12-12
  • 打赏
  • 举报
回复
RT!
jery_lee 2003-12-12
  • 打赏
  • 举报
回复
不是目录遍历,我是要找到在 classpath 中的包下面的所有类..

classpath下面的包我可以用 Package.getPackages();取得.
abcpl 2003-12-12
  • 打赏
  • 举报
回复
我看也是这个意思
Yanbin_Q 2003-12-12
  • 打赏
  • 举报
回复
就是遍历目录和文件呀。
wobelisk 2003-12-12
  • 打赏
  • 举报
回复
用reflect应该可以.我实验一下
jery_lee 2003-12-12
  • 打赏
  • 举报
回复
Thanks. CoolAbu(绿茶的白开水(★★★★))
CoolAbu 2003-12-12
  • 打赏
  • 举报
回复
下面就是一个找包中Class的,你看看

package studytest;

/**
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2003</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
import java.awt.*;
import java.awt.event.*;
import java.lang.reflect.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;

public class ClassTree {
public static void main(String[] args) {
JFrame frame=new ClassTreeFrame();
frame.show();
}

}

class ClassTreeFrame extends JFrame implements ActionListener
{
private DefaultMutableTreeNode root;
private DefaultTreeModel model;
private JTree tree;
private JTextField textField;

public ClassTreeFrame()
{
setTitle("Class Tree");
setSize(300,200);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

root=new DefaultMutableTreeNode(java.lang.Object.class);
model=new DefaultTreeModel(root);
tree=new JTree(model);

addClass(getClass());

ClassNameTreeCellRenderer renderer=new ClassNameTreeCellRenderer();

renderer.setClosedIcon(new ImageIcon("C:\\1.gif"));
renderer.setOpenIcon(new ImageIcon("C:\\3.gif"));
renderer.setLeafIcon(new ImageIcon("C:\\2.gif"));
tree.setCellRenderer(renderer);

Container contentPane=getContentPane();
contentPane.add(new JScrollPane(tree),"Center");

textField=new JTextField();
textField.addActionListener(this);
contentPane.add(textField,"South");


}

public void actionPerformed(ActionEvent event)
{
try
{
String text=textField.getText();
addClass(Class.forName(text));
textField.setText("");
}
catch(ClassNotFoundException e)
{
Toolkit.getDefaultToolkit().beep();
}
}

public DefaultMutableTreeNode findUserObject(Object obj)
{
Enumeration e=root.breadthFirstEnumeration();
while(e.hasMoreElements())
{
DefaultMutableTreeNode node=(DefaultMutableTreeNode)e.nextElement();
if(node.getUserObject().equals(obj))
return node;

}
return null;
}

public DefaultMutableTreeNode addClass(Class c)
{
if(c.isInterface()||c.isPrimitive()) return null;

DefaultMutableTreeNode node=findUserObject(c);
if(node!=null) return node;

Class s=c.getSuperclass();

DefaultMutableTreeNode parent;
if(s==null)
parent=root;
else
parent=addClass(s);

DefaultMutableTreeNode newNode=new DefaultMutableTreeNode(c);
model.insertNodeInto(newNode,parent,parent.getChildCount());

TreePath path=new TreePath(model.getPathToRoot(newNode));
tree.makeVisible(path);

return newNode;
}

}

class ClassNameTreeCellRenderer extends DefaultTreeCellRenderer
{
private Font plainFont=null;
private Font italicFont=null;

public Component getTreeCellRendererComponent(JTree tree,Object value,boolean selected,boolean expanded,boolean leaf,int row,boolean hasFocus)
{
super.getTreeCellRendererComponent(tree,value,selected,expanded,leaf,row,hasFocus);
DefaultMutableTreeNode node=(DefaultMutableTreeNode)value;
Class c=(Class)node.getUserObject();

if(plainFont==null)
{
plainFont=getFont();

if(plainFont!=null)
italicFont=plainFont.deriveFont(Font.ITALIC);
}
if((c.getModifiers()&Modifier.ABSTRACT)==0)
setFont(plainFont);
else
setFont(italicFont);

return this;
}
}
wobelisk 2003-12-12
  • 打赏
  • 举报
回复
use ZipFile to get ZipEntry of each class.
then use reflection
Maybe there're some better ways
hangzhoufeihu 2003-12-11
  • 打赏
  • 举报
回复
好象有难度

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧