【JAVA】ライブラリの使い方について
今日はライブラリの使用方法についてやっていきます。
開発時にエクリプスなどの開発ツールを利用している場合は、あまり意識することがないと思いますが、基礎を理解していないと応用が効かないので、基礎から理解していこうと思います。
----------------------------------------------------------------------------
さて、いつも通り、実際に実行してみながらトライアンドエラーでやっていきます。
今回はライブラリを使うことが目的なので、簡単な内容のzipファイルを作るライブラリを使います。
選択したのはこちら「zip4j」
フリーのライブラリで、暗号化zipの作成などに使えます。
「zip4j」とgoogleで検索すると最初に出てくるサイトでライブラリをダウンロードできますので、ダウンロードしていきます。
自分は「zip4j_1.3.2.jar」というのをダウンロードしました。
ここでダウンロードした「jarファイル」とはjavaのファイルで「classファイル」をまとめたファイルです。
「classファイル」は「javaファイル」をコンパイルしたファイルです。
このjavaファイルを実行していきます。
まず、jarファイルを展開します。
jarファイルは上に書いたように、単に「classファイル」を集めただけのファイルなので、zipなどと同じです。
「Lhaplus」というツールで解凍してみます。
自分は「G:\test」に設置しました。
これでライブラリの設置は完了です。
続いて、このライブラリを使用するための実行ファイルを設置します。
同じサイトのexampleという欄に、「zip4j_examples_1.3.2.zip」というのがあるので、こちらもダウンロードします。
ダウンロードしたファイルは先ほど設置した「G:\test」配下の「zip4j」に解凍します。
こんな感じになりました。
G:\test\net>tree
フォルダー パスの一覧: ボリューム ボリューム
ボリューム シリアル番号は 6040-5955 です
G:.
└─lingala
└─zip4j
├─core
├─crypto
│ ├─engine
│ └─PBKDF2
├─examples
│ ├─extract
│ ├─misc
│ └─zip
├─exception
├─io
├─model
├─progress
├─unzip
├─util
└─zip
では、ライブラリを使っていきます。
簡単な実行ファイルの「example/zip/AddFolder.java」を実行します。
ファイルを実行するために実行ファイルまで移動します。
cd G:\test\net\lingala\zip4j\examples\zip
続いて、ファイルをコンパイルです。
javac AddFolder.java
早速エラーです。
たくさん表示されましたが、最初の2行にはこんなことが書いてあります
AddFolder.java:19: エラー: パッケージnet.lingala.zip4j.coreは存在しません
import net.lingala.zip4j.core.ZipFile;
存在しませんと書いてあるので、存在しないのでしょう。
確認して見ます。
G:\test\net\lingala\zip4j\core
は存在しているようです。
ということは、「存在はしているけど認識していない」ということですね。
困ったらググりましょう。
「AddFolder.java:19: エラー: パッケージnet.lingala.zip4j.coreは存在しません」とそのままgoogleで検索します。
一つ目にterateilの記事が引っかかりました。
>>javaのプログラムをコンパイルする際、javacが「パッケージの起点となる
>>ディレクトリーがどこか」を正しく知らないと他のパッケージをうまく
>>importできずコンパイルに失敗します。
なるほど。
では、「パッケージの起点となるディレクトリーがどこか」はどうやって認識するのでしょうか。
「java パッケージの起点」で検索してみました。
上の方にはありませんでしたが、それっぽいのが載ってました。
>>CLASSPATH (クラスパス) 環境変数を設定することによって、
>>Java のシステムが class ファイルを探すパスの基点を設定することができます。
出ました。クラスパスです。
クラスパスを設定する必要があるようです。
環境変数の設定はwindowsではsetコマンドで設定可能です。
やってみます。
set CLASSPATH=.;G:\test\
「;」で区切っているので、これは2パターン設定しています。
「.」(カレントディレクトリ)と「G:\test\」ですね。
もともと、CLASSPATHは設定しなくてもカレントディレクトリを参照するようです。
なので、カレントディレクトリと指定した「G:\test\」がCLASSPATHになりました。
これで、「G:\test\」の配下においたフォルダが「java パッケージの起点」になります。
よって、CLASSPATHの「G:\test\」配下 「net」がjavaパッケージの起点として認識されるようになっています。
では、再度コンパイルしてみます。
javac AddFolder.java
今度はエラーが発生することなく実行できました。
「AddFolder.class」こんなファイルが生成されたと思います。
では、実行してみます。
java AddFolder
またエラーです。
「エラー: メイン・クラスAddFolder.classが見つからなかったかロードできませんでした」
「見つからなかった」か「ロードできませんでした」とあります。
ファイルは確実に存在しているので、「ロードできなかった」のでしょう。
また、google先生に聞いてみます。
一つ目にありました。
また、terateilです。便利ですね。
>>ソース中にpackage practice1とあるので、正式なクラス名は practice1.test1 です。
なるほど。
実行時にパッケージをフルパスで指定しないといけないようです。
こんな感じですかね。
java net.lingala.zip4j.examples.zip.AddFolder
また、エラーです。
net.lingala.zip4j.exception.ZipException: input folder does not exist
「インプットとなるフォルダーが存在しない」と出てます。
しかし今回はnet.lingala.zip4j.exception.ZipExceptionとライブラリに定義してあるような例外を出力しているようなので、実行はできています。
要は、機能を利用するための事前準備ができていないということです。
ここからはライブラリに依存する話なので、実際にソースを見て見ます。
大抵のプログラムには、中にコメントで利用方法や利用意図が簡単に記載されています。
* Demonstrated adding a folder to zip file
*
* @author Srikanth Reddy Lingala
「zipファイルをフォルダーに追加するデモンストレーションである」と書いてます。
もう少し読んで見ます。
// Initiate ZipFile object with the path/name of the zip file.
ZipFile zipFile = new ZipFile("c:\\ZipTest\\AddFolder.zip");
// Folder to add
String folderToAdd = "c:\\FolderToAdd";
まず、path/nameのzipファイルオブジェクトを初期化するとあります。
そして、追加するフォルダーとあります。
つまり、「c:\\FolderToAdd」を「c:\\ZipTest\\」へ圧縮して「AddFolder.zip」にするということですね。
なので、「FolderToAdd」と「ZipTest」をCドライブに作ってみます。
ついでに、意図したフォルダが圧縮されたか確認のため「FolderToAdd」に中に適当なテキストファイルを作成しておきます。
では、実行です。
java net.lingala.zip4j.examples.zip.AddFolder
できました!
確認してみます。
「C:\ZipTest」に「AddFolder.zip」があります。
解凍してみると、作成しておいたテキストファイルも格納されていることが確認できました。
これで、ライブラリを利用することができました。
今回覚えたことは以下です。
・ライブラリの起点はクラスパスで設定する
・正式なクラス名で実行する
思ったより順調にできました。
今回は以上です。