連載
» 2007年09月12日 00時00分 公開

プログラマーの常識をJavaで身につける(7):プログラマーの“宿命”? ファイル操作に関する常識 (1/4)

本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は「ファイル操作」について。OSやアプリケーションなどのさまざまなプログラムでよく行われ、とても身近な存在であるファイル操作の仕方を一から解説します

[伊賀敏樹,NTTデータ ビジネスブレインズ]

編集部注

Java言語の基礎を学びたい読者は、連載「【改訂版】Eclipseではじめるプログラミング」をご参照ください。


 前回より少し間が空いてしまいましたが、今回は「ファイル操作」について学んでいきます。

 OSやアプリケーションなどのさまざまなプログラムでは、ファイルに関する各種操作をよく行います。それらファイルに関する操作をJava言語を通じて見ていきましょう。

「ファイル操作」を一から考え直す

 プログラムにおけるファイル操作を調べるのに先立ち、私たちにとって身近なファイル操作の1つであるOS付属ツールによるファイル操作を振り返っていきます。プログラムにおけるファイル操作で困ったときには、OS付属ツールにおけるファイル操作から解決のためのヒントが得られることがあります。

 ここでは、Windows XPに付属のツールで確認していきます。

いまさらながら、エクスプローラを見直してみる

 [スタートメニュー]から、[すべてのプログラム]→[アクセサリ]→[エクスプローラ]を選択すると、エクスプローラが起動します。多くの人にとって見慣れたエクスプローラの画面が表示されます。

図1 エクスプローラの画面 図1 エクスプローラの画面

 フォルダディレクトリ)という階層構造とその中に含まれるファイルによって全体が構成されていることが分かりますね。

注意

エクスプローラの設定によっては、一部のファイルやディレクトリ(フォルダ)が非表示となっていることでしょう。確認の目的によっては、フォルダオプションの設定を変更し、すべてのファイルを表示するようにしておく必要があります

図2 エクスプローラのフォルダオプション 図2 エクスプローラのフォルダオプション

エクスプローラではどんなことができるのか?

 エクスプローラを使って、どのような操作ができるのかについて、簡単に確認していきます。

 画面上でファイルを選択しない状態で右クリックすると、下記のようなメニューが出てきます。

図3 ファイルを選択しない状態のメニュー 図3 ファイルを選択しない状態のメニュー

 一方で、ファイルを選択した状態で右クリックすると、下記のようなメニューが表示されます。

図4 ファイルを選択した状態のメニュー 図4 ファイルを選択した状態のメニュー

 これをまとめると、ファイルマネージャではファイルに対して下記のような操作ができることが分かります(機能については一部抜粋をしています)。

  • ファイルを新規に作成する
  • ファイルをコピーする
  • ファイルを切り取る
  • ファイルを削除する
  • ファイルの名前を変更する
  • ファイルを貼り付け
  • ファイルのプロパティを表示する
  • ファイルの一覧を表示する

 そして、これらの機能のうちのいくつかについては、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ビット単位のデータ)がストリームとなって次々と流れてきます。

図5 バイトストリーム 図5 バイトストリーム

 java.ioパッケージでは、バイトストリームのすべてのクラスのスーパークラスとしてjava.io.InputStreamjava.io.OutputStreamの2つが提供されています。入力側がInputStreamで、出力側がOutputStreamです。

図6 バイト入力ストリームとバイト出力ストリーム 図6 バイト入力ストリームとバイト出力ストリーム

 このように、入力や出力をストリームとして抽象化して同じスーパークラスを持つことにより、処理対象がファイルであろうとネットワークであろうと、同じように扱えるようになるのが、ストリームプログラミングの特徴の1つです。

2:「文字ストリーム」(java.io.Readerとjava.io.Writer)

 文字char)のストリームが文字ストリームです。文字(16ビット単位のデータ)がストリームとなって次々と流れてきます。

図7 文字ストリーム 図7 文字ストリーム

 java.ioパッケージでは 文字ストリームのすべてのクラスのスーパークラスとして、java.io.Readerjava.io.Writerの2つが提供されています。入力側がReaderで、出力側がWriterです。

図8 文字入力ストリームと文字出力ストリーム 図8 文字入力ストリームと文字出力ストリーム

 それでは、次ページよりこれらストリームを実際に使ったプログラミングを見ていきます。

       1|2|3|4 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。