プログラマーの“宿命”? ファイル操作に関する常識:プログラマーの常識をJavaで身につける(7)(1/4 ページ)
本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は「ファイル操作」について。OSやアプリケーションなどのさまざまなプログラムでよく行われ、とても身近な存在であるファイル操作の仕方を一から解説します
前回より少し間が空いてしまいましたが、今回は「ファイル操作」について学んでいきます。
OSやアプリケーションなどのさまざまなプログラムでは、ファイルに関する各種操作をよく行います。それらファイルに関する操作をJava言語を通じて見ていきましょう。
「ファイル操作」を一から考え直す
プログラムにおけるファイル操作を調べるのに先立ち、私たちにとって身近なファイル操作の1つであるOS付属ツールによるファイル操作を振り返っていきます。プログラムにおけるファイル操作で困ったときには、OS付属ツールにおけるファイル操作から解決のためのヒントが得られることがあります。
ここでは、Windows XPに付属のツールで確認していきます。
いまさらながら、エクスプローラを見直してみる
[スタートメニュー]から、[すべてのプログラム]→[アクセサリ]→[エクスプローラ]を選択すると、エクスプローラが起動します。多くの人にとって見慣れたエクスプローラの画面が表示されます。
フォルダ(ディレクトリ)という階層構造とその中に含まれるファイルによって全体が構成されていることが分かりますね。
エクスプローラではどんなことができるのか?
エクスプローラを使って、どのような操作ができるのかについて、簡単に確認していきます。
画面上でファイルを選択しない状態で右クリックすると、下記のようなメニューが出てきます。
一方で、ファイルを選択した状態で右クリックすると、下記のようなメニューが表示されます。
これをまとめると、ファイルマネージャではファイルに対して下記のような操作ができることが分かります(機能については一部抜粋をしています)。
- ファイルを新規に作成する
- ファイルをコピーする
- ファイルを切り取る
- ファイルを削除する
- ファイルの名前を変更する
- ファイルを貼り付ける
- ファイルのプロパティを表示する
- ファイルの一覧を表示する
そして、これらの機能のうちのいくつかについては、Java APIに対応する機能が提供されます。
用語:「ディレクトリ」と「フォルダ」について
歴史的な経緯などから、「ディレクトリ」は「フォルダ」と呼ばれる場合があります。先ほど見てきたようにエクスプローラでは「フォルダ」と呼んでいます。一方で、これから紹介していくJava APIではディレクトリ(directory)という名称で呼んでいます。この記事が話題とする範囲では、ディレクトリとフォルダは同じ意味であると考えて差し支えないでしょう。なお、この記事中では、ディレクトリという用語を優先して利用しています
プログラムによるファイル操作の概要
それではいよいよ、プログラムによるファイル操作を見ていきます。
2系統のファイル操作用パッケージ
Java APIでは歴史的な経緯により2系統のファイル操作用パッケージが提供されています。
これら2系統のうち、一般的にはjava.ioパッケージの方がよく使われます。一方で、ファイルのロック機能やより効率のよいファイル操作などが求められる場合には、java.nioパッケージに含まれるクラスの利用が必要になることがあります。しかし、java.nioパッケージのAPIは使い方が少し難しいものが含まれています。
本記事では、一般的によく使われるjava.ioパッケージのJava 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パッケージでは 文字ストリームのすべてのクラスのスーパークラスとして、java.io.Readerとjava.io.Writerの2つが提供されています。入力側がReaderで、出力側がWriterです。
それでは、次ページよりこれらストリームを実際に使ったプログラミングを見ていきます。
Copyright © ITmedia, Inc. All Rights Reserved.