Java ファイルの存在/移動/コピー/削除(Filesクラス)

サンプル ファイルの存在確認(exists/notExists)
  ファイルをコピーする(copy)
  ファイルを移動する(move)
  ファイル名を変更する(move)
  空ファイルを作成する(createFile)
  ファイルを削除する(deleteIfExists)
  ファイルのサイズを取得する(size)
  作成日時と更新日時を取得(readAttributes)
  一時ファイルを作成する(createTempFile)
FilesクラスとPath.getとは

(確認環境:Java8)

ファイルの存在確認(exists/notExists)

public static boolean exists(Path path,LinkOption... options)
public static boolean notExists(Path path,LinkOption... options)

Files.existsとFiles.notExistsで、ファイルの存在確認を行うサンプルです。

package test1;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Test1 {
	public static void main(String[] args) {
		
        Path path1 = Paths.get("D:\\Test3","test1.txt");
        
        if (Files.exists(path1)) {
            System.out.println("存在します");
        }
        if (Files.notExists(path1)) {
            System.out.println("存在しません");
        }
 	}
}

11行目のexistsメソッドは、ファイルが存在している場合、trueを返します。
存在していない場合、falseを返します。
14行目のnotExistsメソッドは、ファイルが存在していない場合、trueを返します。
存在している場合、falseを返します。

ファイルをコピーする(copy)

public static Path copy(Path source,Path target,CopyOption... options) throws IOException

Files.copyで、ファイルのコピーを行うサンプルです。

package test1;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Test1 {
	public static void main(String[] args) {
        
        Path from1 = Paths.get("D:\\Test3","test1.txt");
        Path to1 = Paths.get("D:\\Test4","test1.txt");
		
        try {
			Files.copy(from1, to1);
		} catch (IOException e) {
			e.printStackTrace();
		}
 	}
}

14行目は、copyメソッドでtest3フォルダのtest1.txtをtest4フォルダにコピーしています。
コピー前に、D:\Test4\test1.txtが存在しているとエラーになります。
java.nio.file.FileAlreadyExistsException

ファイルを移動する(move)

public static Path move(Path source,Path target,CopyOption... options)throws IOException

Files.moveで、ファイルの移動を行うサンプルです。

package test1;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Test1 {
	public static void main(String[] args) {

        Path from1 = Paths.get("D:\\Test3","test1.txt");
        Path to1 = Paths.get("D:\\Test4","test1.txt");
		
        try {
			Files.move(from1, to1);
		} catch (IOException e) {
			e.printStackTrace();
		}
 	}
}

14行目は、moveメソッドでTest3フォルダのtest1.txtをTest4フォルダ配下へ移動させています。
移動前に、D:\Test4\test1.txtが存在しているとエラーになります。
java.nio.file.FileAlreadyExistsException

ファイル名を変更する(move)

public static Path move(Path source,Path target,CopyOption... options)throws IOException

Files.moveで、ファイル名を変更するサンプルです。

package test1;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Test1 {
	public static void main(String[] args) {

        Path from1 = Paths.get("D:\\Test3","test1.txt");
        Path to1 = Paths.get("D:\\Test3","test100.txt");
		
        try {
			Files.move(from1, to1);
		} catch (IOException e) {
			e.printStackTrace();
		}
 	}
}

14行目は、Test3フォルダ配下のTest1.txtをTest100.txtというファイル名に変更しています。

空ファイルを作成する(createFile)

public static Path createFile(Path path,FileAttribute<?>... attrs) throws IOException

Files.createFileで、空ファイルを作成するサンプルです。

package test1;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class Test1 {
    public static void main(String[] args) {
    	
    	Path path1 = Paths.get("D:\\Test3","test1.txt");
    	
        try {
            if (!Files.exists(path1)) {
                Files.createFile(path1);
            }
		} catch (IOException e) {
			e.printStackTrace();
		}
    }
}

13行目は、existsメソッドと否定(!)で指定のファイルが存在していないことを確認しています。
14行目は、createFileメソッドで空ファイルを作成しています。
空ファイル作成時に、ファイルがすでに存在する場合は失敗します。

ファイルを削除する(deleteIfExists)

public static boolean deleteIfExists(Path path) throws IOException

Files.deleteIfExistsで、ファイルを削除するサンプルです。

package test1;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class Test1 {
    public static void main(String[] args) {
    	
    	Path path1 = Paths.get("D:\\Test3","test1.txt");
    	
        try {
            Files.deleteIfExists(path1);
		} catch (IOException e) {
			e.printStackTrace();
		}
    }
}

13行目は、deleteIfExistsメソッドで指定のファイルが存在しているか確認し、存在する場合削除します。

ファイルのサイズを取得する(size)

public static long size(Path path) throws IOException

Files.sizeで、ファイルのサイズを取得するサンプルです。

package test1;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class Test1 {
    public static void main(String[] args) {
    	
    	Path path1 = Paths.get("D:\\Test1","test1.txt");
    	long size1 = 0;
    	
        try {
        	size1 = Files.size(path1);
        	System.out.println(size1);
		} catch (IOException e) {
			e.printStackTrace();
		}
    }
}

sizeメソッドは、バイト単位でサイズを取得します。

作成日時と更新日時を取得(readAttributes)

public static <A extends BasicFileAttributes> A readAttributes(Path path,Class<A> type,LinkOption... options)throws IOException

Files.readAttributesで、ファイルの作成日時と更新日時を取得するサンプルです。

package test1;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.attribute.BasicFileAttributes;
import java.nio.file.attribute.FileTime;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test1 {
	public static void main(String[] args) {
			Path path1 = Paths.get("D:\\Test3","test1.txt");
			
			BasicFileAttributes ba1;
			try {
				ba1 = Files.readAttributes(path1, BasicFileAttributes.class);
	            System.out.println(ba1.creationTime()); //2019-11-16T09:05:46.417019Z
	            System.out.println(ba1.lastModifiedTime());//2019-11-16T09:12:56.74086Z
	            getFormat1(ba1);
			} catch (IOException e) {
				e.printStackTrace();
			}
 	}
	private static void getFormat1(BasicFileAttributes ba1) {
		FileTime time1 = ba1.creationTime();
		FileTime time2 = ba1.lastModifiedTime(); 
		String pattern1 = "yyyy-MM-dd HH:mm:ss";
		
		SimpleDateFormat format1 = new SimpleDateFormat(pattern1);
		String f1 = format1.format(new Date(time1.toMillis()));
		String f2 = format1.format(new Date(time2.toMillis()));
		System.out.println("作成日時 " + f1); //作成日時 2019-11-16 18:05:46
		System.out.println("更新日時 " + f2); //更新日時 2019-11-16 18:12:56
	}
}

13行目は、対象のファイルです。
17行目は、FilesクラスのreadAttributesメソッドでファイルの属性を読み取ります。
18行目は、作成日時ですがフォーマットされていない状態です。
19行目も、更新日時ですがフォーマットされていない状態です。
25~34行目は、SimpleDateFormatクラスを使用してyyyy-MM-dd HH:mm:ssで表示されるようにしています。

一時ファイルを作成する(createTempFile)

public static Path createTempFile(Path dir,String prefix,String suffix,FileAttribute<?>... attrs)throws IOException

Files.createTempFileで、一時ファイルを作成するサンプルです。

package test1;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
 
public class Test1 {
    public static void main(String[] args) {
    	
		Path path1 = Paths.get("D:\\Test3");

        try {
        	Path test1 = Files.createTempFile(path1,"abc","zzz");
            System.out.println(test1 .toString());
		} catch (IOException e) {
			e.printStackTrace();
		}
    }
}

13行目は、createTempFileメソッドで一時ファイルを作成しています。2つめの引数がプレフィックス(ファイルの先頭につく文字)で3つめの引数がサフィックス(ファイルの最後につく文字)です。
このファイルは自動で削除されません。

以下は、上記コードを5回実行した状態です。5つのファイルが作成されています。

 

FilesクラスとPath.getとは

Filesクラスとは

Filesクラスは、Java7で導入されました。

java.nio.file.FilesクラスでNIO.2とも呼ばれます(Oracleが呼んでいます)。

似た名前でFileクラス(java.io.File)がありますがそれとは別です。

https://docs.oracle.com/javase/tutorial/essential/io/fileio.html

 

Path.getとは

1 public static Path get(URI uri)
2 public static Path get(String first,String... more)

Path.getの引数は、ファイルのある場所(パス)とファイル名を指定します。

1の引数は、フォルダとファイルの1つになっています。
2の引数は、フォルダとファイルで分かれています。

1と2のどちらでも可です。

Path.getの戻り値は、Filesクラスのメソッドの引数になります。

関連の記事

Java テキストファイルの読み書き(Filesクラス)
Java フォルダの存在/移動/コピー/削除(Filesクラス)

△上に戻る