何をするものか?

アルゴリズム

  1. Jarファイルに含まれるファイルのファイル名をクラス名と見なす。
    たとえば、com/mysql/jdbc/Driver.class を com.mysql.jdbc.Driver と見なす。
  2. Jarファイルを URLClassloader に設定して、URLClassloader を使って 1. で見つけたクラスを load する。
  3. 2. で load したクラスのインタフェースを列挙する。

ソースコード

package com.snail.example;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;

import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;

public class JarContentsAnalyzer {

  public static void main(String[] args) {
    try {
      File jarFile = new File("mysql-connector-java-5.1.5-bin.jar");

      ClassLoader parent = ClassLoader.getSystemClassLoader();
      URLClassLoader urlClazzloader = new URLClassLoader(new URL[] {
            jarFile.toURI().toURL()
          }, parent);

      JarInputStream jarIn = new JarInputStream(new FileInputStream(jarFile));
      JarEntry entry;

      while ((entry = jarIn.getNextJarEntry()) != null) {
        if (!entry.isDirectory()) {
          String fileName = entry.getName();
          String clazzName = fileName2className(fileName);

          try {
            Class<?> clazz = urlClazzloader.loadClass(clazzName);
            System.out.println(clazz.getName());

            for (Class<?> inf : clazz.getInterfaces()) {
              System.out.println("  <" + inf.getName() + ">");
            }
          } catch (Throwable th) {
            th = null;
          }
        }
      }
    } catch (MalformedURLException e) {
      e.printStackTrace();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private static String fileName2className(String fileName) {
    int dot = fileName.lastIndexOf(".");

    if (dot > 0) {
      return fileName.substring(0, dot).replaceAll("/", ".");
    }

    return fileName;
  }
}

実行結果

com.mysql.jdbc.AssertionFailedException
com.mysql.jdbc.Blob
  <java.sql.Blob>
  <com.mysql.jdbc.OutputStreamWatcher>
com.mysql.jdbc.BlobFromLocator$LocatorInputStream
com.mysql.jdbc.BlobFromLocator
  <java.sql.Blob>
com.mysql.jdbc.Buffer
com.mysql.jdbc.BufferRow
com.mysql.jdbc.ByteArrayRow
com.mysql.jdbc.CachedResultSetMetaData
com.mysql.jdbc.CallableStatement$CallableStatementParam
com.mysql.jdbc.CallableStatement$CallableStatementParamInfo
com.mysql.jdbc.CallableStatement$CallableStatementParamInfoJDBC3
  <java.sql.ParameterMetaData>
com.mysql.jdbc.CallableStatement
  <java.sql.CallableStatement>
com.mysql.jdbc.CharsetMapping
…(中略)…
com.mysql.jdbc.DatabaseMetaData$1
com.mysql.jdbc.DatabaseMetaData$2
com.mysql.jdbc.DatabaseMetaData$3
com.mysql.jdbc.DatabaseMetaData$4
com.mysql.jdbc.DatabaseMetaData$5
com.mysql.jdbc.DatabaseMetaData$6
com.mysql.jdbc.DatabaseMetaData$7
com.mysql.jdbc.DatabaseMetaData$8
com.mysql.jdbc.DatabaseMetaData$9
com.mysql.jdbc.DatabaseMetaData$IteratorWithCleanup
com.mysql.jdbc.DatabaseMetaData$LocalAndReferencedColumns
com.mysql.jdbc.DatabaseMetaData$ResultSetIterator
com.mysql.jdbc.DatabaseMetaData$SingleStringIterator
com.mysql.jdbc.DatabaseMetaData$TypeDescriptor
com.mysql.jdbc.DatabaseMetaData
  <java.sql.DatabaseMetaData>
com.mysql.jdbc.DatabaseMetaDataUsingInfoSchema
com.mysql.jdbc.DocsConnectionPropsHelper
com.mysql.jdbc.Driver
  <java.sql.Driver>
com.mysql.jdbc.EscapeProcessor
com.mysql.jdbc.EscapeProcessorResult
…(中略)…
com.mysql.jdbc.util.ServerController
com.mysql.jdbc.util.TimezoneDump
com.mysql.jdbc.util.VersionFSHierarchyMaker
org.gjt.mm.mysql.Driver

Java#JavaSE


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2008-02-07 (木) 01:14:33 (3222d)
ISBN10
ISBN13
9784061426061