テキストファイルの読み書き
ファイルって何だろう
- macOSやWindowsを使っていると、ファイルは身近な存在
- しかし、「ファイルとは何か」と聞かれると困るのでは?
- ファイルはUNIX系OSの根幹を成す仮想的な概念
- 物理的にはいろいろな形や特性を持つデータメディアを、同じように扱いたい
ファイルとは何か
- ファイルじゃないデータ単位を持つコンピュータもたくさんある
- 例: IBM z/OS のデータ単位は、データセットとレコード
- レコードとは、データベースのテーブルみたいなものをイメージすればいい
- ファイルは、「連続したバイトの列」。以上。それ以上のことは決めない
ファイルの長所・短所
ファイルの短所
- 原始的
- バイトの列が何を意味しているのかは、アプリケーションプログラムで解析しなければならない
- 最初からしか読めない
- レコードなら「10番目のレコードの、3番目の属性の値」のように指定して読み込める
- ファイルの終わりまで読んでみないと、一体、どのぐらいの量を処理しなければならないかわからない
- 途中にデータを書き込めない
- 途中に入れたかったら消して作り直し
- 最後に追加するのはOK
ファイルの長所
- いろんなものを「ファイル」という同じ形式で扱える
- 例: 磁気テープもファイル
- 例: キーボードもファイル
- 例: プリンターもファイル
- 例: 乱数生成器もファイル
- 例: 他のコンピュータもファイル
テキストファイルとバイナリファイル
- ファイルはただのバイトの列
- 文字として読めるバイト(文字コードに依存する)だけからなるファイルがテキストファイル
- テキストファイルじゃないバイト列がバイナリファイル
Javaでファイルを読み書きする方法
- 徐々に改善されている。昔のも全部使える(互換性の維持)
- 第1世代: Java.io.*
- ファイル操作(先頭から順に何バイト読み書きする)が素直に実装されている。なので使いづらい。
- 第2世代: Java.nio.*
- Java1.4(2002年)で導入。nioはNew I/Oの略
- ファイルを呼んでいてもプログラムが止まらなくなったが、使いまま
- 第3世代: Java.nio.PathとJava.nio.Files
- Java1.7(2011年)で導入。俗にnio.2と呼ばれる
- 基本的に、nio.2しか知らなくて良い
- 何は知らなくて良いのか理解しないで1次資料を読むと迷子になる