第16章 ファイル操作の基本

この章ではファイルを管理するに関する基本的な考え方について説明します。

HOMEPAGE

ファイル操作の基本


Fileクラスは、ファイルやディレクトリを作成したり、ファイルのチェック処理、読み込み・書き込み処理など、ファイルに関するさまざまな操作を行います。

コンストラクタの引数にパスやディレクトリ・ファイル名を指定することで、オブジェクトを生成できます

File オブジェクト名 = new File(ファイル名);
対象とするファイル名をディレクトリの位置+ファイル名の形で指定します。例えば下記のようになります。
File file = new File("C:\\Test\\test.txt");


パッケージ宣言は、他のパッケージ内のクラスやインターフェイスを参照するために利用する。

import パッケージ名.クラス名;
import java.util.Calendar;
import java.util.*
※パッケージ宣言はファイル先頭で宣言するようにしてください。
※同じようなパッケージクラス名は重複させない。

例:[JSample16_1.java]
package JSample;
import java.io.File;
public class JSample16_1 {
    public static void main(String args[]) {
        File cdirectory = new File("C:\\");
        String filelist[] = cdirectory.list();
        for (int i = 0; i < filelist.length; i++) {
            System.out.println(filelist[i]);
        }
    }
}
実行結果(ローカルの環境によって、結果が違います。)
Intel
Program Files
Program Files (x86)
ProgramData
Users
Windows


ファイルのディレクトリは次の例のようにの判別することができます。

例:[JSample16_2.java]

    package JSample;
    import java.io.File;
    public class JSample16_2 {
        public static void main(String args[]) {
            File cdirectory = new File("C:\\");
            File filelist[] = cdirectory.listFiles();
            for (int i = 0; i < filelist.length; i++) {
                if (filelist[i].isFile()) {
                    System.out.println("[F]" + filelist[i].getName());
                } else if (filelist[i].isDirectory()) {
                    System.out.println("[D]" + filelist[i].getName());
                } else {
                    System.out.println("[?]" + filelist[i].getName());
                }
            }
        }
    }

実行結果(ローカルの環境によって、結果が違います。)
[D]Drivers
[D]inetpub
[C]Intel
[C]Program Files
[C]Program Files (x86)
[C]ProgramData
[C]Users
[C]Windows


Fileクラスで用意されている"getAbsolutePath"メソッドは絶対パスによるファイルの位置と名前を取得できます。

public String getAbsolutePath()
例:[JSample16_3.java]
package JSample;
import java.io.File;
public class JSample16_3{
    public static void main(String args[]){
        File file = new File("test.txt");
        String path = file.getAbsolutePath();
    System.out.println("File:" + path);
    }
}
実行結果(ローカルの環境によって、結果が違います。)
File:C:\Users\MyUserName\documents\test.txt


FileクラスのcreateNewFileメソッドを使用することでファイルを作成することができます。

public boolean createNewFile() throws IOException
例:[JSample16_4.java]
package JSample;
import java.io.File;
import java.io.IOException;
public class JSample16_4 {
    public static void main(String args[]) throws IOException {
        File newfile = new File("C:\\test.txt");
        
            if (newfile.exists()) {
                System.out.println("ファイルの作成に失敗しました");
            } else {
                newfile.createNewFile();
                System.out.println("ファイルの作成に成功しました");
            }
        
    }
}
実行結果(ファイルが存在しない場合)
ファイルの作成に成功しました

実行結果(ファイルが存在した場合)
ファイルの作成に失敗しました


Fileクラスのmkdirメソッドを使用することでディレクトリを作成することができます。

File newdir = new File("c:\\test");
newdir.mkdir();
※mkdirメソッドは、boolean型(true/false)の値を返します。

例:[JSample16_5.java]
package JSample;
import java.io.File;
public class JSample16_5 {
    public static void main(String args[]) {
        File newfile = new File("C:\\Test");
        if (newfile.mkdir()) {
            System.out.println("ディレクトリの作成に成功しました");
        } else {
            System.out.println("ディレクトリの作成に失敗しました");
        }
    }
}
実行結果(ディレクトリが存在しない場合)
ディレクトリの作成に成功しました

実行結果(ディレクトリが存在した場合)
ディレクトリの作成に失敗しました


Fileクラスのfile.existsメソッドを使用することでファイルの存在を確認することができます。
Fileクラスのfile.deleteメソッドを使用することでファイルを削除することができます。

例:[JSample16_6.java]

package JSample;
import java.io.File;
public class JSample16_6 {
    public static void main(String args[]) {
        File file = new File("C:\\test.txt");
        if (file.exists()) {
            if (file.delete()) {
                System.out.println("ファイルを削除しました");
            } else {
                System.out.println("ファイルの削除に失敗しました");
            }
        } else {
            System.out.println("ファイルが見つかりません");
        }
    }
}
実行結果(ファイルが存在した場合)
ファイルを削除しました

実行結果(ファイルが存在して、削除できなかった場合)
ファイルの削除に失敗しました

実行結果(ファイルが存在しない場合)
ファイルが見つかりません


canReadメソッド: 該当のファイルが読み取れるかどうかの確認

public boolean canRead()
canWriteメソッド: 該当のファイルに書き込みが出来るかどうかの確認
public boolean canWrite()
setReadOnlyメソッド: 該当のファイルに書き込み不可(読み取り専用)の制限を与える
public boolean setReadOnly()

例:[JSample16_7.java]
package JSample;
import java.io.File;
import java.io.IOException;
public class JSample16_4 {
    public static void main(String args[]) {
        File file = new File("C:\\test.txt");
        // test.txtファイルの読み込みと書き込みの可・否を確認
        canReadWrite(file);
        if (file.setReadOnly()) {
            System.out.println("ファイルを読み取り専用にしました");
        } else {
            System.out.println("読み取り専用に変更が失敗しました");
        }
    }
    private static void canReadWrite(File file) {
        if (file.canRead()) {
            System.out.println("ファイルは読み込み可能です");
        }
        if (file.canWrite()) {
            System.out.println("ファイルは書き込み可能です");
        }
    }
}
実行結果(ファイルが存在した場合)
ファイルは読み込み可能です
ファイルは書き込み可能です
ファイルを読み取り専用にしました


練習

問題[JEx16_1]
ディレクトリとファイルの存在を確認して、存在しない場合、作成を実行する。 存在する場合ファイルを削除するプログラムを完成してください。



戻る