CLASSPATHを使ってフォルダやJavaパッケージから実行時にクラスをロードする方法
CLASSPATHによるクラスのロード
CLASSPATHを利用すると、実行時に任意のクラスをロードできます。この記事では、Javaにおけるclasspathの基本的な仕組みと、正しいディレクトリ構成の方法について解説します。
ソースファイルとクラスファイルのディレクトリ構成
.javaソースファイルと同様に、コンパイル済みの.classファイルも、パッケージ名に対応したディレクトリ階層に配置する必要があります。ただし、.classファイルへのパスは.javaソースファイルへのパスと同一である必要はありません。ソース用とクラス用のディレクトリは、次のように別々に管理できます。
<path-one>\sources\com\apple\computers\Dell.java <path-two>\classes\com\apple\computers\Dell.class
この構成のメリット
このようにディレクトリを分けておけば、ソースコードを公開することなく、classesディレクトリだけを他のプログラマーに提供できます。また、コンパイラやJava仮想マシン(JVM)がプログラム内で使用されるすべての型を正しく認識できるよう、ソースファイルとクラスファイルをこの形式で管理することが重要です。
classpathの仕組み
classesディレクトリまでの完全なパス(<path-two>\classes)は「classpath」と呼ばれ、CLASSPATHシステム変数によって設定されます。コンパイラとJVMはどちらも、classpathにパッケージ名を連結することで、.classファイルへのパスを構築します。
たとえば、classpathが<path-two>\classesで、パッケージ名がcom.apple.computersである場合、コンパイラとJVMは<path-two>\classes\com\apple\computersの中で.classファイルを検索します。
環境変数の設定例
# Windowsの場合 set CLASSPATH=C:\path-two\classes # Unix / Linuxの場合 export CLASSPATH=/path-two/classes
複数のパスを指定する方法
classpathには複数のパスを含めることができます。複数のパスを指定する場合は、Windowsではセミコロン(;)、Unixではコロン(:)で区切ります。また、デフォルトでは、コンパイラとJVMはカレントディレクトリと、Javaプラットフォームの標準クラスを格納するJARファイルを検索するため、これらのディレクトリは自動的にclasspathに含まれています。
-
Javaでフォルダ内のディレクトリ(フォルダ)のみを取得する方法
Javaで特定のフォルダに含まれるファイルではなく、ディレクトリ(サブフォルダ)だけを取得したいケースはよくあります。本記事では、代表的な2つの方法——FileFilterインターフェースを使う方法と、NIOのFiles.walk()を使う方法——をサンプルコード付きで解説します。listFiles()メソッドとFileFilterの基本FileクラスのlistFiles()メソッドは、そのFileオブジェクトが表すパスに含まれるすべてのファイルおよびディレクトリの抽象パス名を、配列として返します。ここで活躍するのがFileFilterインターフェースです。FileFilterはパス名をフィル
-
Javaでディレクトリからファイルのみを一覧表示する方法を解説
Javaで特定のディレクトリに含まれる「ファイルのみ」を一覧表示する方法は複数あります。本記事では、代表的な2つの手法――FileFilterインターフェースとlistFiles()メソッドを組み合わせる方法、そしてFiles.walk()とStream APIを使う方法――を、実際のコード例と実行結果とともに解説します。 listFiles()メソッドとFileFilterインターフェースとは java.io.FileクラスのlistFiles()メソッドは、現在のFileオブジェクトが表すパスに存在するすべてのファイルおよびディレクトリのオブジェクト(抽象パス名)を配列として返します。 F