(1/4)本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は「ファイル操作」について。Eclipseではじめるプログラミング」をご参照ください。前回より少し間が空いてしまいましたが、今回は「ファイル操作」について学んでいきます。OSやアプリケーションなどのさまざまなプログラムでは、ファイルに関する各種操作をよく行います。それらファイルに関する操作をJava言語を通じて見ていきましょう。「ファイル操作」を一から考え直すプログラムにおけるファイル操作を調べるのに先立ち、私たちにとって身近なファイル操作の1つであるOS付属ツールによるファイル操作を振り返っていきます。プログラムにおけるファイル操作で困ったときには、OS付属ツールにおけるファイル操作から解決のためのヒントが得られることがあります。XPに付属のツールで確認していきます。エクスプローラを見直してみる[スタートメニュー]から、[すべてのプログラム]→[アクセサリ]→[エクスプローラ]を選択すると、エクスプローラが起動します。多くの人にとって見慣れたエクスプローラの画面が表示されます。エクスプローラの画面フォルダ(ディレクトリ)という階層構造とその中に含まれるファイルによって全体が構成されていることが分かりますね。注意エクスプローラの設定によっては、一部のファイルやディレクトリ(フォルダ)が非表示となっていることでしょう。エクスプローラのフォルダオプションエクスプローラではどんなことができるのか?エクスプローラを使って、どのような操作ができるのかについて、簡単に確認していきます。画面上でファイルを選択しない状態で右クリックすると、下記のようなメニューが出てきます。一方で、ファイルを選択した状態で右クリックすると、下記のようなメニューが表示されます。ファイルを選択した状態のメニューこれをまとめると、ファイルマネージャではファイルに対して下記のような操作ができることが分かります(機能については一部抜粋をしています)。APIに対応する機能が提供されます。用語:「ディレクトリ」と「フォルダ」について歴史的な経緯などから、「ディレクトリ」は「フォルダ」と呼ばれる場合があります。先ほど見てきたようにエクスプローラでは「フォルダ」と呼んでいます。APIではディレクトリ(directory)という名称で呼んでいます。この記事が話題とする範囲では、ディレクトリとフォルダは同じ意味であると考えて差し支えないでしょう。この記事中では、ディレクトリという用語を優先して利用していますプログラムによるファイル操作の概要それではいよいよ、プログラムによるファイル操作を見ていきます。APIでは歴史的な経緯により2系統のファイル操作用パッケージが提供されています。パッケージjava.ioパッケージjava.nioパッケージjava.nio.channelsこれら2系統のうち、一般的にはjava.ioパッケージの方がよく使われます。一方で、ファイルのロック機能やより効率のよいファイル操作などが求められる場合には、java.nioパッケージに含まれるクラスの利用が必要になることがあります。java.nioパッケージのAPIは使い方が少し難しいものが含まれています。APIを紹介していきます。データを流れとして扱う2つの「ストリーム」java.ioパッケージのクラスの多くは、データを流れとして扱う「ストリーム」と呼ばれる仕組みにのっとっています。「バイトストリーム」と「文字ストリーム」の2つはストリームに関するものの中でも特に重要なものとなっています。ファイル操作プログラミングの多くの局面でもストリームが使われます。ストリームの概念やそのプログラミングは、初心者のうちは難しく感じられるものの1つです。Java言語やほかのオブジェクト指向言語の多くにおいて、ストリームによるプログラミングは重要なものですので、今回の記事でストリームをじっくり学んでマスターしていきましょう。1:「バイトストリーム」(java.io.InputStreamとjava.io.OutputStream)バイト(byte)のストリームがバイトストリームです。bytes(8ビット単位のデータ)がストリームとなって次々と流れてきます。バイトストリームjava.ioパッケージでは、バイトストリームのすべてのクラスのスーパークラスとしてjava.io.InputStreamとjava.io.OutputStreamの2つが提供されています。入力側がInputStreamで、出力側がOutputStreamです。バイト入力ストリームとバイト出力ストリームこのように、入力や出力をストリームとして抽象化して同じスーパークラスを持つことにより、処理対象がファイルであろうとネットワークであろうと、同じように扱えるようになるのが、ストリームプログラミングの特徴の1つです。2:「文字ストリーム」(java.io.Readerとjava.io.Writer)文字(char)のストリームが文字ストリームです。文字(16ビット単位のデータ)がストリームとなって次々と流れてきます。文字ストリームのすべてのクラスのスーパークラスとして、java.io.Readerとjava.io.Writerの2つが提供されています。入力側がReaderで、出力側がWriterです。文字入力ストリームと文字出力ストリームそれでは、次ページよりこれらストリームを実際に使ったプログラミングを見ていきます。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。