2008年8月6日水曜日

jarコマンド(三):warファイル内容の確認と解凍

◆作成したwarファイル内容の確認:
 ・コマンド:
   >jar tvf confirmFile.war
 ・説明:
   tvf:jarコマンドのパラメータ組み合わせ
   confirmFile.war:確認したいwarファイル
 ・補足:
   パラメータの中に”v”がなければ、内容リストだけが表示される、
   詳細のサイズ、日付など情報は表示されていない。

◆warファイル/jarファイルの解凍:
 アーカイブされた内容は、warファイル/jarファイルから解凍(抽出)されること。
 ・コマンド:
  >jar xvf confirmFile.war
 ・説明:
  xvf:jarコマンドのパラメータ組み合わせ
  confirmFile.war:解凍したいwarファイル

jarコマンド(二):warファイルの更新

◆Warファイルの更新:
 ・コマンド:
  >jar uvf existedFile.war sourceFile
 ・説明:
  uvf:jarコマンドのパラメータ組み合わせ
  existedFile.war:既存のwarファイルを更新するために、同じな名前は使う
  sourceFile:このところにひとつのファイルでもいいですが、普通の場合
   ”*”を使って、各Classファイルを含むすべてのリソースファイルを
   用いて、一つのwarファイルを作成することです。
  >jar cvf createdFile.war *
 ・補足:
   上記コマンドの場合、既存のwarファイルの内容について、下記のこと
   がある:
   ①更新のソースファイルの内容と違う部分があれば、そのまま新しい
    warファイルに残る。
   ②更新のソースファイルの内容と同じ部分があれば、更新される。

jarコマンド(一):warファイルの新規作成

このコマンドは、warファイルの作成とjarファイルの作成ともに使える。
◆Warファイルの新規作成:
 ・コマンド:
  >jar cvf createdFile.war sourceFile
 ・説明:
  cvf:jarコマンドのパラメータ組み合わせ
  createdFile.war:作成したいwarファイル
  sourceFile:このところにひとつのファイルでもいいですが、普通の場合
    ”*”を使って、
各Classファイルを含むすべてのカレントディレクトリ
    にあるリソースファイルを用いて、
一つのwarファイルを作成する
    ことです。

  >jar cvf createdFile.war *
 ・補足:
  上記コマンドの場合、既存の同じ名前のwarファイルがあった場合、
  中の内容は全部なくなる。

2008年8月1日金曜日

FileChannelクラスのことは、知ってるの?

1、特徴
このクラスは、バイトチャネルに対する一般的な操作 (読み込み、書き込み、
クローズ) のほかに、
次のようなファイル固有の操作を定義します。

◆バイトの読み込みや書き込みは、チャネルの現在位置に影響を及ぼす
ことなく、
ファイル内の絶対位置で行われる

◆ファイルの領域はメモリに直接マッピングされる。ファイルのサイズが
大きい場合は、通常の
read メソッドやwrite メソッドを呼び出すより、この
方法のほうが効率的


◆ファイルの更新は、基準となる記憶装置に強制書き出しされる。
したがって、システムが
クラッシュしてもデータの損失は回避される

◆バイトはファイルからその他のチャネルへ転送できる。反対に、
その他のチャネルから
転送することもできる。多くのオペレーティング
システムをファイルシステムのキャッシュ
と直接接続し、データを非常
に速い速度で送受信することにより、この転送を最適化できる


◆ファイルの領域は、その他のプログラムからアクセスできないよう
にロックできる


2.メソッド:
このクラスは、既存のファイルを開くメソッドや新しいファイルを作成する
メソッドは
定義しません。これらのメソッドは、将来のリリースで追加される
可能性があります。
このたびのリリースでファイルチャネルを取得したい
場合は、既存の FileInputStream、
FileOutputStream、RandomAccessFile の
いずれかのオブジェクトの getChannel メソッドを
呼び出します。こうすること
により、基準となる同じファイルに接続されたファイルチャネルが

返されます。

3.ファイルチャネルの状態:
ファイルチャネルの状態は、チャネルを返した getChannel メソッドを持つ
オブジェクトの状態
と密接な関係にあります。たとえば、チャネルの位置を
明示的に、あるいはバイトの読み込みや
書き込みによって変更すると、
発生元のオブジェクトのファイル位置が変わります (逆も同様)。
ファイル
チャネルからファイルの長さを変更すると、発生元オブジェクトから見た
ときの長さが
変わります (逆も同様)。バイトの書き込みによってファイル
のコンテンツを変更すると、
元のオブジェクトから見たときのコンテンツが
変わります (逆も同様)。


4.読み書きインスタンス:
このクラスは、さまざまな点で、「読み込み可能」、「書き込み可能」または
「読み込みと
書き込みが可能」であるインスタンスが必要なことを条件
として指定します。FileInputStream
インスタンスの getChannel メソッドで取得
したチャネルは読み込み可能です。FileOutputStream
インスタンスの
getChannel メソッドで取得したチャネルは書き込み可能です。そして、
RandomAccessFile インスタンスの getChannel メソッドで取得した
チャネルは、インスタンスが
モード "r" で作成されている場合は
読み込み可能、モード "rw"で作成されている場合は読み込み

書き込みが可能です。


5.チャネルのオーペンとクローズ:
チャネルの状態はオープンまたはクローズです。作成時はオープンですが、
クローズするとクローズ
したままになります。チャネルがクローズしている
状態で入力操作を行おうとすると、
ClosedChannelException がスローされ
ます。チャネルがオープンしているかどうかは isOpen
メソッドの呼び出し
によって判断できます。


===========補足===============
1.FileChannelの親インタフェース:
public interface Channel:
入出力操作に関係するチャネルです。
2.チャネルの定義:
チャネルは、ハードウェアデバイス、ファイル、ネットワークソケットのほか、
個別の入出力操作
(読み込み、書き込みなど) を実行できるプログラム
コンポーネントなどのエンティティへの
オープン接続を表します。

やっと終わった^^^^^

ファイルの読み書きと文字のエンコード

動作環境:
JDK5.0
システム文字コード:Shift-JIS
ファイル文字コード:EUC-JP

1.Javaの文字データ処理流れ:
Javadでは、文字データをUnicodeで管理します。
◆読み込み:
Unicode以外の文字モードのデータを読み込む場合は、Unicodeへエンコードして読み込みます。
◆書き込み:
書き込み先の文字コードはUnicode以外の場合、Unicodeで管理されている文字データを書き込み先
の文字コードへ、エンコードして書き込みます。
書き込み先の文字コードを指定してない場合、Javaを実行しているシステムのデフォルトの
エンコード方式が使用されます。(今回はShift-JISです)
◆システムのエンコードの確認:
関数System.getProperty("file.encoding")を使って、システムのエンコードの確認ができます。

2.ファイル操作Javaクラスの選択:
◆FileReader、FileWriter:
この二つのクラスを使って、文字データを読み書く場合は、システムのデフォルトの
エンコードが使用されます。
◆FileInputStream、FileOutputStream:
エンコードを指定して、ファイルの入出力を行いたい場合、この二つのクラスを使います。

3.エンコード指定の読み込みオブジェクト、書き込みオブジェクトの作成:
◆読み込みオブジェクト:
読み込みの場合、ファイルのエンコードにかかわらず、JavaがUnicodeでファイルの文字データを
エンコードして処理しますから、特にエンコードを指定する必要がないでしょう。

※下記はサンプルソース:
// Readerオブジェクトの作成
FileInputStream reader=null;
try {
reader = new FileInputStream(filePath);
} catch (FileNotFoundException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
return null;
}

InputStreamReader streamReader=null;
try {
streamReader = new InputStreamReader(reader , "JISAutoDetect");
} catch (UnsupportedEncodingException e2) {
// TODO 自動生成された catch ブロック
e2.printStackTrace();
return null;
}
BufferedReader objBufferedReader = new BufferedReader(streamReader);
◆書き込みオブジェクト:
今回書き込み先のエンコード(EUC-JP)は、システムのデフォルトのエンコード(Shift-JIS)と
違いますから、エンコードの指定が必要になります。

※下記はサンプルソース:
// Writerオブジェクトの作成
FileOutputStream writer=null;
try {
writer = new FileOutputStream(filePath);
} catch (FileNotFoundException e3) {
// TODO 自動生成された catch ブロック
e3.printStackTrace();
return null;
}

OutputStreamWriter streamWriter=null;
try {
streamWriter = new OutputStreamWriter(writer , "EUC-JP");
} catch (UnsupportedEncodingException e1) {
// TODO 自動生成された catch ブロック
e1.printStackTrace();
return null;
}
BufferedWriter objWriter = new BufferedWriter(streamWriter);

==終わり==