1. Top
  2. Java SE
  3. ファイル操作

ファイル操作

ファイル、ディレクトリ操作

java.ioパッケージの中で、ファイル操作に関するクラスが java.io.Fileクラスになります。Fileクラスには、ファイルやディレクトリが存在するか否かを確認したり、読み書きが可能かどうか、また種類やファイルサイズを確認するメソッドが提供されています。

Fileクラスの主なメソッド

ここでは使用頻度の高いと思われるメソッドについて、簡単な使用方法をご紹介します。
メソッド名 概要
boolean exists() ファイルやディレクトリが存在するか否かを確認する
boolean canRead() 指定されたファイルがアプリケーションから読み取り可能かを確認する
boolean canWrite() 指定されたファイルがアプリケーションから書き込み可能かを確認する
boolean isFile() この抽象パス名が示すファイルがファイルであるかどうかを判定する
boolean isDirectory() この抽象パス名が示すファイルがディレクトリであるかどうかを判定する
String getName() ファイルやディレクトリ名称を文字列として取得する
String getPath() 抽象パス名をパス名の文字列に変換する
boolean renameTo(File dest) ファイル名を変更する
boolean delete() ファイルやディレクトリを削除する
boolean createNewFile() throws IOException この抽象パス名が示す空のファイルを生成します
boolean mkdir() この抽象パス名が示すディレクトリを生成します


ファイルの存在確認をする

existsメソッドはファイルやディレクトリが存在すれば 真を、存在しなければを返します。下記サンプルではコマンドラインで渡されたファイルの存在確認を行いますが、引数を渡していなければ ArrayIndexOutOfBoundsExceptionがスローされます。

public static void main(String args[]){

    File objFile = new File(args[0]);

    if(objFile.exists() ){
        System.out.println("ファイルは存在します。");
    }

}

ファイルの読み書きが可能か調べる

canRead() メソッドはファイル又はディレクトリが読み取り可能であれば trueを、canWrite() メソッドは書き込み可能であれば trueを返します。サンプルではコマンドライン引数のファイルが読み書き可能であるか確認します。

public static void main(String args[]){
        
    File objFile = new File(args[0]);
        
    if(objFile.canRead()){
        System.out.println("ファイルは読み込み可能です。");
    }
        
    if(objFile.canWrite()){
        System.out.println("ファイルは書き込み可能です。");
    }

}

ファイルの種類を調べる

isFile() メソッド、isDirectory() メソッドを使ってファイルの種類を調べます。コマンドライン引数の抽象パスがファイルであれば「ファイルです。」を、ディレクトリであれば「ディレクトリです。」を出力します。

public static void main(String args[]){
        
    File objFile = new File(args[0]);
        
    if(objFile.isFile()){
        System.out.println("ファイルです。");
    }
        
    if(objFile.isDirectory()){
        System.out.println("ディレクトリです。");
    }

}
		

ファイル、ディレクトリ名を変更する

renameTo メソッドはファイル、ディレクトリ名を引数で与えられた名称へ変更します。名前の変更が成功した場合は true、そうでない場合は false を返します。引数で nullを指定した場合は NullPointerExceptionがスローされます。

public static void main(String args[]){
		
    File objFile = new File(args[0]);
		
    if(objFile.renameTo(new File(args[1]))){
        System.out.println("名称変更に成功しました。");
    }

}

ファイル、ディレクトリを削除する

この抽象パス名が示すファイルまたはディレクトリを削除します。ファイルまたはディレクトリが正常に削除された場合は trueを、それ以外の場合は falseを返します。 このパス名がディレクトリを示す場合、そのディレクトリが削除されるためには空である必要があります。

public static void main(String args[]){
		
    File objFile = new File(args[0]);
		
    if(objFile.delete()){
        System.out.println("削除に成功しました。");
    }

}

ファイルを作成する

この抽象パス名が示す空のファイルを作成します。指定されたファイルが存在しないで、正常にファイルを作成できた場合は trueを、それ以外の場合は falseを返します。 検査例外として IOExceptionが定義されているので例外処理が必要となります。

public static void main(String args[]){
		
    File objFile = new File(args[0]);

    try{
        if(objFile.createNewFile()){
            System.out.println("ファイルの作成に成功しました。");
        }
    } catch(Exception e){
        e.printStackTrace();
    }

}

ディレクトリを作成する

この抽象パス名が示すディレクトリを作成します。ディレクトリが正常に作成できた場合は trueを、それ以外の場合は falseを返します。

public static void main(String args[]){
		
    File objFile = new File(args[0]);
		
    if(objFile.mkDir()){
        System.out.println("ディレクトリの作成に成功しました。");
    }

}



ページの先頭へ

ファイルの入出力

ファイル入出力では、以下のクラスを使用します。

【文字ストリーム】
・FileReaderクラス
・FileWriterクラス

【バイトストリーム】
・FileInputStreamクラス
・FileOutputStreamクラス
・InputStreamReaderクラス
・OutputStreamWriterクラス

FileReaderクラス、FileWriterクラスを使用して文字データの入出力を行う場合、実行しているシステムのデフォルトのエンコード方式が使用されます。エンコード方式を指定してファイル入出力処理を行いたい場合はInputStreamReaderクラスとFileInputStreamクラス、OutputStreamWriterクラスとFileOutputStreamクラスを組み合わせて行います。


FileReaderクラス

コンストラクタ
説明
FileReader(File)
引数に読み込むファイルのFileオブジェクトを指定します。
FileReader(FileDescriptor)
引数にFileDescriptorオブジェクトを指定します。
FileReader(String)
引数に読み込むファイルのパス名を指定します。

FileWriterクラス

コンストラクタ
説明
FileWriter(File)
引数に書き込むファイルのFileオブジェクトを指定します。
FileWriter(File, boolean)
引数に書き込むファイルのFileオブジェクトを指定します。第2引数がtrueの場合は、ファイルの最後からデータを書き込みます。
FileWriter(FileDescriptor)
引数にFileDescriptorオブジェクトを指定します。
FileWriter(String)
引数に書き込むファイルのパス名を指定します。
FileWriter(String, boolean)
引数に書き込むファイルのパス名を指定します。第2引数がtrueの場合は、ファイルの最後からデータを書き込みます。

FileInputStreamクラス

コンストラクタ
説明
FileInputStream(File)
引数に読み込むファイルのFileオブジェクトを指定します。
FileInputStream(FileDescriptor)
引数にFileDescriptorオブジェクトを指定します。
FileInputStream(String)
引数に読み込むファイルのパス名を指定します。

FileOutputStreamクラス

コンストラクタ
説明
FileOutputStream(File)
引数に書き込むファイルのFileオブジェクトを指定します。
FileOutputStream(File, boolean)
引数に書き込むファイルのFileオブジェクトを指定します。第2引数がtrueの場合は、ファイルの最後からデータを書き込みます。
FileOutputStream(FileDescriptor)
引数にFileDescriptorオブジェクトを指定します。
FileOutputStream(String)
引数に書き込むファイルのパス名を指定します
FileOutputStream(String, boolean)
引数に書き込むファイルのパス名を指定します。第2引数がtrueの場合は、ファイルの最後からデータを書き込みます

InputStreamReaderクラス

コンストラクタ
説明
InputStreamReader (InputStream)
第1引数に読み込むInputStreamクラスのオブジェクトを指定します。この場合はデフォルトのエンコード方式が使われます。
InputStreamReader (InputStream, String)
第1引数に読み込むInputStreamクラスのオブジェクトを、第2引数にエンコード方式を指定します。エンコード方式の指定はIANA Charset Registryに記載される文字列を使用します。

OutputStreamWriterクラス

コンストラクタ
説明
OutputStreamWriter (OutputStream)
第1引数に書き込むOutputStreamクラスのオブジェクトを指定します。この場合はデフォルトのエンコード方式が使われます
OutputStreamWriter (OutputStream , String)
第1引数に書き込むOutputStreamクラスのオブジェクトを、第2引数にエンコード方式を指定します。エンコード方式の指定はIANA Charset Registryに記載される文字列を使用します。


ページの先頭へ

ファイルの入出力サンプル

【例1】文字ストリーム
public static void main(String args[]){

    try{

        int chr;
        StringBuffer strBuf = new StringBuffer();

        FileReader fileRd = new FileReader(args[0]);

        // 一文字ずつの読み込み
        while((chr = fileRd.read()) != -1){
            strBuf.append((char)chr);
        }

        // 配列を指定した読み込み
        //char[] buff = new char[10];
        //fileRd.read(buff);

        FileWriter fileWr = new FileWriter(args[1]);
        fileWr.write(strBuf.toString());
        fileWr.close();

    } catch(Exception e){
        e.printStackTrace();
    }
}


【例2】バイトストリーム
public static void main(String[] args) {
    try {
        // FileInputStreamオブジェクトの生成
        FileInputStream abc = new FileInputStream("abc.txt");

        // FileOutputStreamオブジェクトの生成
        FileOutputStream xyz = new FileOutputStream("xyz.txt");

        // InputStreamReaderオブジェクトの生成
        InputStreamReader in = 
          new InputStreamReader(abc, "EUC-JP");

        // OutputStreamWriterオブジェクトの生成
        OutputStreamWriter out = 
            new OutputStreamWriter(xyz, "Shift_JIS");
    
        int contents; 
    
        // 読み込むデータがなくなるまで読み込み
        while ((contents = in.read()) != -1) {
            // 書き込むデータがなくなるまで書き込み
            out.write(contents);
        }

        in.close();   // 読み込みストリームを閉じる
        out.close();  // 書き込みストリームを閉じる

    } catch(Exception e) {
        e.printStackTrace();
    }
}




ページの先頭へ