Java 如何使用深度优先遍历从jar获取类

Java 如何使用深度优先遍历从jar获取类,java,algorithm,data-structures,jar,tree,Java,Algorithm,Data Structures,Jar,Tree,解决方案(,)都用于jarEntry列出jar文件中的类,但是,jarEntry只能用作级别遍历。当我想使用深度优先遍历遍历jar文件中的类和文件夹时,应该怎么做?谢谢你的考虑 固定的 ENV JDK1.6 尝试过 添加到树中 预期输入 如果输入jar文件的路径(例如org.objectweb.asm_3.3.1.v201105211655.jar) 预期产出 输出应该是文件结构(最好只包含类文件和包含类文件的文件夹) 编辑 用于存储结果的结构: class { String d

解决方案(,)都用于
jarEntry
列出jar文件中的类,但是,
jarEntry
只能用作级别遍历。当我想使用深度优先遍历遍历jar文件中的类和文件夹时,应该怎么做?谢谢你的考虑

固定的

ENV

JDK1.6

尝试过

添加到树中

预期输入

如果输入jar文件的路径(例如org.objectweb.asm_3.3.1.v201105211655.jar)

预期产出

输出应该是文件结构(最好只包含类文件和包含类文件的文件夹)

编辑

用于存储结果的结构:

    class {
    String data;  
    TJtree parent;   //treenode
    LinkedList<TJtree> childlist; 
    }
类{
字符串数据;
TJtree父节点;//树节点
LinkedList儿童列表;
}

按条目出现的顺序读取条目。使用完整路径名将它们添加到树映射中。这将对它们进行排序,并按照您想要的方式进行排列。要显示为树,请遍历完整路径名,查看目录何时更改并适当显示

e、 g

final NavigableMap entryMap=new TreeMap();
//按完整路径将每个条目添加到entryMap
entryMap.put(完整路径,新MyData(……);
//以后按要求的顺序处理条目
File lastDirectory=新文件(“/”);
对于(Map.Enrty条目:entryMap.entrySet()){
File File=新文件(entry.getKey());
MyData MyData=entry.getValue();
如果(!file.getParent().equals(lastDirectory.getParent()){
//不同目录
}

基本上-在提取条目时使用队列而不是队列。如果您可以参考您头脑中的广度优先解决方案,这将很有帮助。堆栈如何知道父条目和子条目之间的关系?为什么要这样做?作为一个类,它只能在一个包中,因此您如何实现它“没关系。@NickDong没关系,你只是问如何更改遍历顺序。如果你想更改,你也必须添加它。按照条目出现的顺序阅读条目。使用完整路径名将它们添加到树形图中。这将按照你想要的方式对它们进行排序和排列。要显示为树,请遍历完整路径名,查看w当目录更改并适当显示时。我将它们存储到一个列表中,并对它们进行排序。然后将它们视为具有完整路径的字符串。然后将这些字符串拆分为树节点。您的想法很有帮助。thx
  static void displaytree2(TJtree f , int level) {  

        String preStr = "";  
        for(int i=0; i<level; i++) {  
         preStr += "    ";  
        }  

        for(int i=0; i<f.childlist.size(); i++) {  
            TJtree t = f.childlist.get(i);  
            System.out.println(preStr + "-"+t.data);  

         if(! t.childlist.isEmpty()) {  
             displaytree2(t, level + 1);  
         }  
        }  
   } 
-org.objectweb.asm_3.3.1.v201105211655.jar
    -META-INF
        -about_files
            -org
                -objectweb
                    -asm
                        -commons
                            -signature
                                -tree
                                    -analysis
                                        -util
                                            -xml
                                                -AnnotationVisitor.class
                                                -AnnotationWriter.class
                                                -Attribute.class
                                                -ByteVector.class
                                                -ClassAdapter.class
                                                -ClassReader.class
                                                -ClassVisitor.class
                                                -ClassWriter.class
                                                -Edge.class
                                                -FieldVisitor.class
                                                -FieldWriter.class
                                                -Frame.class
                                                -Handler.class
                                                -Item.class
                                                -Label.class
                                                -MethodAdapter.class
                                                -MethodVisitor.class
                                                -MethodWriter.class
                                                -Opcodes.class
                                                -Type.class
                                                -AdviceAdapter.class
                                                -AnalyzerAdapter.class
                                                -CodeSizeEvaluator.class
                                                -EmptyVisitor.class
                                                -GeneratorAdapter.class
                                                -InstructionAdapter.class
                                                -JSRInlinerAdapter$Instantiation.class
                                                -JSRInlinerAdapter$Subroutine.class
                                                -JSRInlinerAdapter.class
                                                -LocalVariablesSorter.class
                                                -Method.class
                                                -Remapper.class
                                                -RemappingAnnotationAdapter.class
                                                -RemappingClassAdapter.class
                                                -RemappingFieldAdapter.class
                                                -RemappingMethodAdapter.class
                                                -RemappingSignatureAdapter.class
                                                -SerialVersionUIDAdder$Item.class
                                                -SerialVersionUIDAdder.class
                                                -SimpleRemapper.class
                                                -StaticInitMerger.class
                                                -TableSwitchGenerator.class
                                                -TryCatchBlockSorter$1.class
                                                -TryCatchBlockSorter.class
                                                -SignatureReader.class
                                                -SignatureVisitor.class
                                                -SignatureWriter.class
                                                -AbstractInsnNode.class
                                                -AnnotationNode.class
                                                -ClassNode.class
                                                -FieldInsnNode.class
                                                -FieldNode.class
                                                -FrameNode.class
                                                -IincInsnNode.class
                                                -InnerClassNode.class
                                                -InsnList$InsnListIterator.class
                                                -InsnList.class
                                                -InsnNode.class
                                                -IntInsnNode.class
                                                -JumpInsnNode.class
                                                -LabelNode.class
                                                -LdcInsnNode.class
                                                -LineNumberNode.class
                                                -LocalVariableNode.class
                                                -LookupSwitchInsnNode.class
                                                -MemberNode.class
                                                -MethodInsnNode.class
                                                -MethodNode$1.class
                                                -MethodNode.class
                                                -MultiANewArrayInsnNode.class
                                                -TableSwitchInsnNode.class
                                                -TryCatchBlockNode.class
                                                -TypeInsnNode.class
                                                -VarInsnNode.class
                                                -Analyzer.class
                                                -AnalyzerException.class
                                                -BasicInterpreter.class
                                                -BasicValue.class
                                                -BasicVerifier.class
                                                -Frame.class
                                                -Interpreter.class
                                                -SimpleVerifier.class
                                                -SmallSet.class
                                                -SourceInterpreter.class
                                                -SourceValue.class
                                                -Subroutine.class
                                                -Value.class
                                                -ASMifiable.class
                                                -ASMifierAbstractVisitor.class
                                                -ASMifierAnnotationVisitor.class
                                                -ASMifierClassVisitor.class
                                                -ASMifierFieldVisitor.class
                                                -ASMifierMethodVisitor.class
                                                -AbstractVisitor.class
                                                -CheckAnnotationAdapter.class
                                                -CheckClassAdapter.class
                                                -CheckFieldAdapter.class
                                                -CheckMethodAdapter$1.class
                                                -CheckMethodAdapter.class
                                                -CheckSignatureAdapter.class
                                                -TraceAbstractVisitor.class
                                                -TraceAnnotationVisitor.class
                                                -TraceClassVisitor.class
                                                -TraceFieldVisitor.class
                                                -TraceMethodVisitor.class
                                                -TraceSignatureVisitor.class
                                                -Traceable.class
                                                -ASMContentHandler$AnnotationDefaultRule.class
                                                -ASMContentHandler$AnnotationParameterRule.class
                                                -ASMContentHandler$AnnotationRule.class
                                                -ASMContentHandler$AnnotationValueAnnotationRule.class
                                                -ASMContentHandler$AnnotationValueArrayRule.class
                                                -ASMContentHandler$AnnotationValueEnumRule.class
                                                -ASMContentHandler$AnnotationValueRule.class
                                                -ASMContentHandler$ClassRule.class
                                                -ASMContentHandler$ExceptionRule.class
                                                -ASMContentHandler$ExceptionsRule.class
                                                -ASMContentHandler$FieldRule.class
                                                -ASMContentHandler$FrameRule.class
                                                -ASMContentHandler$FrameTypeRule.class
                                                -ASMContentHandler$InnerClassRule.class
                                                -ASMContentHandler$InterfaceRule.class
                                                -ASMContentHandler$InterfacesRule.class
                                                -ASMContentHandler$LabelRule.class
                                                -ASMContentHandler$LineNumberRule.class
                                                -ASMContentHandler$LocalVarRule.class
                                                -ASMContentHandler$LookupSwitchLabelRule.class
                                                -ASMContentHandler$LookupSwitchRule.class
                                                -ASMContentHandler$MaxRule.class
                                                -ASMContentHandler$MethodRule.class
                                                -ASMContentHandler$Opcode.class
                                                -ASMContentHandler$OpcodeGroup.class
                                                -ASMContentHandler$OpcodesRule.class
                                                -ASMContentHandler$OuterClassRule.class
                                                -ASMContentHandler$Rule.class
                                                -ASMContentHandler$RuleSet.class
                                                -ASMContentHandler$SourceRule.class
                                                -ASMContentHandler$TableSwitchLabelRule.class
                                                -ASMContentHandler$TableSwitchRule.class
                                                -ASMContentHandler$TryCatchRule.class
                                                -ASMContentHandler.class
                                                -Processor$ASMContentHandlerFactory.class
                                                -Processor$ContentHandlerFactory.class
                                                -Processor$EntryElement.class
                                                -Processor$InputSlicingHandler.class
                                                -Processor$OutputSlicingHandler.class
                                                -Processor$ProtectedInputStream.class
                                                -Processor$SAXWriter.class
                                                -Processor$SAXWriterFactory.class
                                                -Processor$SingleDocElement.class
                                                -Processor$SubdocumentHandlerFactory.class
                                                -Processor$TransformerHandlerFactory.class
                                                -Processor$ZipEntryElement.class
                                                -Processor.class
                                                -SAXAdapter.class
                                                -SAXAnnotationAdapter.class
                                                -SAXClassAdapter.class
                                                -SAXCodeAdapter.class
                                                -SAXFieldAdapter.class
D:\WORK\WORKSPACE\MYJAR\CC\ORG.OBJECTWEB.ASM_3.3.1.V201105211655
│  about.html
│  plugin.properties
│
├─about_files
│      LICENSE.txt
│      README.txt
│
├─META-INF
│      eclipse.inf
│      ECLIPSEF.RSA
│      ECLIPSEF.SF
│      MANIFEST.MF
│
└─org
    └─objectweb
        └─asm
            │  AnnotationVisitor.class
            │  AnnotationWriter.class
            │  Attribute.class
            │  ByteVector.class
            │  ClassAdapter.class
            │  ClassReader.class
            │  ClassVisitor.class
            │  ClassWriter.class
            │  Edge.class
            │  FieldVisitor.class
            │  FieldWriter.class
            │  Frame.class
            │  Handler.class
            │  Item.class
            │  Label.class
            │  MethodAdapter.class
            │  MethodVisitor.class
            │  MethodWriter.class
            │  Opcodes.class
            │  Type.class
            │
            ├─commons
            │      AdviceAdapter.class
            │      AnalyzerAdapter.class
            │      CodeSizeEvaluator.class
            │      EmptyVisitor.class
            │      GeneratorAdapter.class
            │      InstructionAdapter.class
            │      JSRInlinerAdapter$Instantiation.class
            │      JSRInlinerAdapter$Subroutine.class
            │      JSRInlinerAdapter.class
            │      LocalVariablesSorter.class
            │      Method.class
            │      Remapper.class
            │      RemappingAnnotationAdapter.class
            │      RemappingClassAdapter.class
            │      RemappingFieldAdapter.class
            │      RemappingMethodAdapter.class
            │      RemappingSignatureAdapter.class
            │      SerialVersionUIDAdder$Item.class
            │      SerialVersionUIDAdder.class
            │      SimpleRemapper.class
            │      StaticInitMerger.class
            │      TableSwitchGenerator.class
            │      TryCatchBlockSorter$1.class
            │      TryCatchBlockSorter.class
            │
            ├─signature
            │      SignatureReader.class
            │      SignatureVisitor.class
            │      SignatureWriter.class
            │
            ├─tree
            │  │  AbstractInsnNode.class
            │  │  AnnotationNode.class
            │  │  ClassNode.class
            │  │  FieldInsnNode.class
            │  │  FieldNode.class
            │  │  FrameNode.class
            │  │  IincInsnNode.class
            │  │  InnerClassNode.class
            │  │  InsnList$InsnListIterator.class
            │  │  InsnList.class
            │  │  InsnNode.class
            │  │  IntInsnNode.class
            │  │  JumpInsnNode.class
            │  │  LabelNode.class
            │  │  LdcInsnNode.class
            │  │  LineNumberNode.class
            │  │  LocalVariableNode.class
            │  │  LookupSwitchInsnNode.class
            │  │  MemberNode.class
            │  │  MethodInsnNode.class
            │  │  MethodNode$1.class
            │  │  MethodNode.class
            │  │  MultiANewArrayInsnNode.class
            │  │  TableSwitchInsnNode.class
            │  │  TryCatchBlockNode.class
            │  │  TypeInsnNode.class
            │  │  VarInsnNode.class
            │  │
            │  └─analysis
            │          Analyzer.class
            │          AnalyzerException.class
            │          BasicInterpreter.class
            │          BasicValue.class
            │          BasicVerifier.class
            │          Frame.class
            │          Interpreter.class
            │          SimpleVerifier.class
            │          SmallSet.class
            │          SourceInterpreter.class
            │          SourceValue.class
            │          Subroutine.class
            │          Value.class
            │
            ├─util
            │      AbstractVisitor.class
            │      ASMifiable.class
            │      ASMifierAbstractVisitor.class
            │      ASMifierAnnotationVisitor.class
            │      ASMifierClassVisitor.class
            │      ASMifierFieldVisitor.class
            │      ASMifierMethodVisitor.class
            │      CheckAnnotationAdapter.class
            │      CheckClassAdapter.class
            │      CheckFieldAdapter.class
            │      CheckMethodAdapter$1.class
            │      CheckMethodAdapter.class
            │      CheckSignatureAdapter.class
            │      Traceable.class
            │      TraceAbstractVisitor.class
            │      TraceAnnotationVisitor.class
            │      TraceClassVisitor.class
            │      TraceFieldVisitor.class
            │      TraceMethodVisitor.class
            │      TraceSignatureVisitor.class
            │
            └─xml
                    ASMContentHandler$AnnotationDefaultRule.class
                    ASMContentHandler$AnnotationParameterRule.class
                    ASMContentHandler$AnnotationRule.class
                    ASMContentHandler$AnnotationValueAnnotationRule.class
                    ASMContentHandler$AnnotationValueArrayRule.class
                    ASMContentHandler$AnnotationValueEnumRule.class
                    ASMContentHandler$AnnotationValueRule.class
                    ASMContentHandler$ClassRule.class
                    ASMContentHandler$ExceptionRule.class
                    ASMContentHandler$ExceptionsRule.class
                    ASMContentHandler$FieldRule.class
                    ASMContentHandler$FrameRule.class
                    ASMContentHandler$FrameTypeRule.class
                    ASMContentHandler$InnerClassRule.class
                    ASMContentHandler$InterfaceRule.class
                    ASMContentHandler$InterfacesRule.class
                    ASMContentHandler$LabelRule.class
                    ASMContentHandler$LineNumberRule.class
                    ASMContentHandler$LocalVarRule.class
                    ASMContentHandler$LookupSwitchLabelRule.class
                    ASMContentHandler$LookupSwitchRule.class
                    ASMContentHandler$MaxRule.class
                    ASMContentHandler$MethodRule.class
                    ASMContentHandler$Opcode.class
                    ASMContentHandler$OpcodeGroup.class
                    ASMContentHandler$OpcodesRule.class
                    ASMContentHandler$OuterClassRule.class
                    ASMContentHandler$Rule.class
                    ASMContentHandler$RuleSet.class
                    ASMContentHandler$SourceRule.class
                    ASMContentHandler$TableSwitchLabelRule.class
                    ASMContentHandler$TableSwitchRule.class
                    ASMContentHandler$TryCatchRule.class
                    ASMContentHandler.class
                    Processor$ASMContentHandlerFactory.class
                    Processor$ContentHandlerFactory.class
                    Processor$EntryElement.class
                    Processor$InputSlicingHandler.class
                    Processor$OutputSlicingHandler.class
                    Processor$ProtectedInputStream.class
                    Processor$SAXWriter.class
                    Processor$SAXWriterFactory.class
                    Processor$SingleDocElement.class
                    Processor$SubdocumentHandlerFactory.class
                    Processor$TransformerHandlerFactory.class
                    Processor$ZipEntryElement.class
                    Processor.class
                    SAXAdapter.class
                    SAXAnnotationAdapter.class
                    SAXClassAdapter.class
                    SAXCodeAdapter.class
                    SAXFieldAdapter.class
    class {
    String data;  
    TJtree parent;   //treenode
    LinkedList<TJtree> childlist; 
    }
final NavigableMap<String, MyData> entryMap = new TreeMap<>();

// add each entry by full path to the entryMap
entryMap.put(fullpath, new MyData(... ... ...));

// later process the entries in the order required
File lastDirectory = new File("/");
for(Map.Enrty<String, MyData> entry : entryMap.entrySet()) {
   File file = new File(entry.getKey());
   MyData myData = entry.getValue();
   if (!file.getParent().equals(lastDirectory.getParent()) {
        // different directory
   }