こんにちは!ISAMU(@burlesca_isa)です!
今回の対象読者は
- ファイル操作について知りたい方
javaのファイル操作について解説します(前編)
ファイルの操作は下記の項目について説明します。
- ディレクトリ作成
- ファイル作成
- ファイルコピー
- ファイル移動
- ファイル名変更
- ファイル削除
前編はファイル操作に必要な知識とディレクトリ作成までを解説します。
ファイル作成で使用するクラス
Javaのファイル作成で使用するクラスは
- Pathインターフェース
- Pathsクラス
- Filesクラス
を使用します。
Pathインターフェース、及びPathsクラスでファイルパスを指定し、
Filesクラスでファイルを操作します。
ファイル操作で必要な知識
ファイルを操作するには
- 絶対パス
- 相対パス
の知識が必要です。
絶対パス
絶対パスとは起点がCドライブ(Linuxはルートディレクトリ)から記述するパスのことです。
windowsのエクスプローラの枠内に記載されているのが絶対パスです。
C:¥pleiades¥workspace
windowsはディスク名から始まり¥マークで階層を区切ります。
Linuxはルートディレクトリ(/)から始まり、スラッシュで区切ります。
OSによって階層を表す記号が異なりますが、
Javaで記述する際はスラッシュで統一すると便利です。
なぜなら、Javaで記述する際はスラッシュにすることで
Windowsであれば¥マーク、Linuxであればスラッシュに自動で変換してくれるため、OSの違いを気にする必要がなくなります。
絶対パスで記述する場合、問題となるのがOSごとにパスの始まり方が違うことです。
Windowsは[C:]Linuxは[/]から始まるので、
プログラムでは絶対パスではなく、相対パスで記述します。
相対パス
一つのディレクトリを起点として対象のファイルの位置までのファイルパスを相対パスといいます。
図を見てください。
起点となるディレクトリをカレントディレクトリと呼びます。
testディレクトリがカレントディレクトリとすると、test.txtまでの相対パスは
lib/test.txt
となります。
カレントディレクトリはあくまでも起点なので、ファイルパスには記述しません。
Ecripseで実行する場合はプロジェクトのディレクトリがカレントディレクトリとなります。
パスの操作
ファイルを操作する前には必ずPathインターフェースとPathsクラスを使用して、
操作したいファイルパスを指定します。
構文
Path 変数名 = Paths.get("ファイルパス");
Pathインターフェースで変数を宣言して、Pathsクラスのgetメソッドの引数にファイルパスを記述します。
作成したインスタンスからPathインターフェースのメソッドを利用してファイルパスの情報を取得します。
Ecripseで実行する前提でサンプルプログラムを記述します。
※実行した後、Ecripseのプロジェクトをリフレッシュしてください。[プロジェクトを右クリック→リフレッシュ]
Pathインターフェースのメソッドは
- toAbsolutePath()・・・絶対パスを返す
- getParent()・・・親ディレクトリ(1つ上のディレクトリ)を返す
- getFileName()・・・ファイル名部分を返す
- getRoot()・・・絶対パスの起点のパスを返す
今回のサンプルプログラムは、相対パスでファイルパスを指定しています。
getParent,getFileName,getRootメソッドは絶対パスで使用する時に便利なメソッドなので、
toAbsolutePathで一度絶対パスを取得してpath変数に格納しました。
ディレクトリの作成
ディレクトリの作成はFilesクラスを使用します。
使用するメソッドは
- createDirectory()・・・単数ディレクトリ
- createDirectories()・・・複数のディレクトリ
です。
引数にはPathのインスタンスを渡します。
2つのメソッドの例外発生条件の違い
2つのメソッドには例外の発生に違いがあります。
- createDirectory・・・同じ名前のディレクトリが存在した場合
- createDirectories・・・同じ名前のファイル名が存在した場合
createDirectoriesは同じ名前のディレクトリが存在した場合に例外になりませんが、
同じファイル名が存在した場合に例外が発生します。