• このエントリーをはてなブックマークに追加

スポンサードリンク

はじめに

会社では Java で SMB プロトコルをごにょごにょしているというお仕事なので, Java でファイル操作をするような I/F を調べました.

具体的には, フォルダをコピーしたい.

Java7 で Files というライブラリが新たらしく追加された. これが利用できそうなので, 試してみた.

基本

java.nio.file を import.

import java.nio.file.*;

FileSystems.getDefault ();で ファイルシステムオブジェクトを取得.

// filesystem の取得
FileSystem fileSystem = FileSystems.getDefault ();

ファイル or ディレクトリを表すオブジェクトは Path オブジェクトで示す. 以下のいずれかで取得.

  • fileSystem.getPath ()
  • Paths.get ()
Path fooFile = fileSystem.getPath ("foo.txt");
Path barFile = Paths.get ("bar.txt");

コピーしてみる

Files オブジェクトの copy メソッドを利用する.

public static Path copy (Path source, Path target, CopyOption... options) throws IOException
  • source … コピー元

  • target … コピー先

  • options

    • REPLACE_EXISTING … target が存在すれば上書き
    • COPY_ATTRIBUTES … Attribute もコピー.
    • NOFOLLOW_LINKS … シンポリックリンクはコピーしない.
Files.copy (fooFile, barFile);

属性の取得

以下でできる.

  • getFileAttributeView ()
  • getFileAttribute ()
  • readFileAttirbute ()

getFileAttributeView (), readFileAttirbute () だと, 指定した FileAttributeView オブジェクトが取得できる.

BasicFileAttributes attrs = Files.getFileAttributeView (barFile, BasicFileAttributeView.class);
BasicFileAttributes attrs = Files.readAttributes (barFile, BasicFileAttributes.class);

getFileAttribute で FileAttirbuteView の個々の属性を指定して情報を取得することができる.

Sample Code

import java.nio.file.*;
import java.nio.file.attribute.*;

public class FilesSample {
	public static void main (String args[]) {
		try {
		
			// file system
			FileSystem fileSystem = FileSystems.getDefault ();

			// ファイルを表す Path オブジェクトを生成
			Path fooFile = fileSystem.getPath ("foo.txt");
			System.out.println (fooFile);
			Path barFile = Paths.get ("bar.txt");
			System.out.println (barFile);

			// ファイルが存在する場合は削除します
			Files.deleteIfExists (barFile);

			// copy
			Files.copy (fooFile, barFile);

			// 存在チェック
			if (!Files.exists (barFile)) 
				System.out.println ("file not exist");
		
			// 容量チェック
			if (Files.size (barFile) != Files.size (barFile) ) 
				System.out.println ("file size is not equal");

			BasicFileAttributes attrs = Files.getFileAttributeView (barFile, BasicFileAttributeView.class);
			BasicFileAttributes attrs = Files.readAttributes (barFile, BasicFileAttributes.class);

		} catch (Exception ex) {
			System.out.println (ex);
		}
	}
}