2016年10月26日水曜日

複数のアトリビュートの取得

みなさん。 こんばんは。

今日はファイルの複数アトリビュートの取得について見ていきましょう。

FilesクラスのgetAttributeメソッドではアトリビュートを1つずつ取得しなくてはなりません。

ファイルの作成日時と最終更新日時などの関連するアトリビュートでも、

まとめて取得することができません。

この問題はアトリビュートの取得だけでなく、設定する場合にもあてはまります。

そこで今回は複数のアトリビュートをまとめて取得する方法について見てみましょう。

取得するアトリビュートはOSごとに異なるため、3種類のインターフェースが提供されています。

BasicFileAttributesインターフェースはOSによらない、

共通のアトリビュートを取得するために使用します。

OSに依存するアトリビュートは、BasicFileAttributesインターフェースのサブインターフェースとして

定義されています。

Windows用に使用するのがDosFileAttributesインターフェース、LinuxやMac OS Xのような

POSIX準拠のOS用に使用するのがPosixFileAttributesインターフェースです。

では、これらのインターフェースを使用してアトリビュートを取得してみましょう。

取得するのはFilesクラスのreadAttributesメソッドを使用します。

readAttributesメソッドの第1引数はPathインターフェース、第2引数はClassクラスです。

第2引数でどのインターフェースを取得するかを指定します。

取得できないインターフェースを指定した場合、nullが返ります。

たとえば、WindowsでPosixFileAttributesオブジェクトを取得しようとしても、nullが返ります。

第3引数は可変長引数で、引数の型はLinkOption列挙型です。

リンクを追わないようにする場合、第3引数にNOFOLLOW_LINKSを指定します。

まず、Windowsのアトリビュートを取得してみます。

// 対象となるバス
Path path = Paths.get("var.txt");
// Windows用のDosFileAttributesオブジェクトの取得
DosFileAttributes attributes = Files.readAttributes(path, DosFileAttributeView.class);
// BasicFileAttributesインターフェースで定義されたメソッド
System.out.println("Creation Time: " + attributes.creationTime());
System.out.println("Last Modified Time: " + attributes.lastModifiedTime());
System.out.println("Last Access Time: " + attributes.lastAccessTime());
System.out.println("File: " + attributes.isRegularFile());
System.out.println("Directory; " + attributes.isDirectory()):
System.out.println("Symbolic Link: " + attributes.isSymbolicLink());
// DosFileAttributesインターフェースで定義されたメソッド
System.out.println("System File: " + attributes.isSystem());

readAttributesの第2引数にDosFileAttribute.classを指定することで、

DosFileAttributesオブジェクトを取得できます。

DosFileAttributesインターフェースでは、スーパーインターフェースのBasicFileAttributes

インターフェースで定義されたOSに共通のアトリビュートを取得するメソッドと、

Windowsだけで取得可能なアトリビュートを取得できるメソッドを使用することができます。

ファイルの作成時を取得するcreationTimeメソッドなどはBasicFileAttributesインターフェース

で定義されたメソッドです。

これに対し、isSystemメソッドがDosFileAttributesインターフェースで定義されたメソッドになります。

同様にLinuxやMac OS X のようなPOSIX準拠OSでもアトリビュートをまとめて取得してみましょう。

// 対象となるパス
Path path = Paths.get("var.txt");
// POSIX準拠OS用のPosixFileAttributesオブジェクトの取得
PosixFileAttributes attributes = Files.readAttributes(path, PosixFileAttributeView.class);
// BasicFileAttributesインターフェースで定義されたメソッド
System.out.println("Creation Time: " + attributes.creationTime());
System.out.println("Last Modified Time: " + attributes.lasoModifiedTime());
System.out.println("Last Access TIme: " + attributes.lastAccessTime());
System.out.println("File: " + attributes.isRegularFile());
System.out.println("Directory: " + attributes.isDirectory());
System.out.println("Symbolic Link: " + attributes.isSymbolicLink());
// PosixFileAttributesインターフェースで定義されたメソッド
System.out.println("Owner: " + attributes.owner());
System.out.println("Permission: " + PosixFilePermissions.toString(attributes.permissions()));

DosFileAttributesインターフェースの代わりにPosixFileAttributesインターフェースを使用

していること以外はほぼ同じです。

ファイルの属性をまとめて取得できることでプログラミングでできる幅が広がりましたね!

では今日はこの辺で!

人気ブログランキングへ

2016年10月24日月曜日

FileAttributeを使用したパーミッションの設定

みなさん。 こんばんは。

今日はパーミッションを指定してファイルを作成する方法を見ていきましょう。

FIlesクラスでファイルやリンクを作成するメソッドは、パーミッションを指定できます。

パーミッションを指定できるメソッドは以下の8種類です。


  • createFileメソッド
  • createTempFileメソッド
  • createDirectoryメソッド
  • createTempDirectoryメソッド
  • createDirectoriesメソッド
  • createLinkメソッド
  • createSymbolicLinkメソッド
  • newByteChannelメソッド

createTempFileメソッドとcreateTempDirectoryメソッドは、

一時ファイルを作成するためのメソッドです。

これらのメソッドでパーミッションを指定するために使用されるのが、

java.nio.file.attribute.FileAttributeインターフェースです。

FileAttributeインターフェースはnameメソッドとvalueメソッドを定義しており、

それぞれアトリビュート名と値を返します。

FIleAttributeインターフェースの実装クラスは提供されていませんが、

PosixFilePermissionsクラスにFIleAttributeオブジェクトを生成するasFileAttributeメソッドが

定義されています。

それでは、createFileメソッドでリードオンリーのファイルを作成してみましょう。

// 対象となるパス
Path path = Paths.get("var.txt");
// リードオンリーのパーミッションを生成
Set<PosixFilePermission> permissions = PosixFilePermissions.fromString("r--r--r--");
// パーミッションをFileAttributeオブジェクトに変換
FileAttribute<Set<PosixFilePermission>> attr = PosixFilePermissions.asFileAttribute(permissions);
// パーミッションを指定して、ファイルを生成
Files.createFile(path, attr);

ァイルのアトリビュートの設定が簡単に出来ましたね!

それでは今日はこの辺で!

人気ブログランキングへ

2016年10月19日水曜日

名前を指定したファイルアトリビュートの取得、設定

みなさん。 こんばんは。

今日は名前を指定したファイルアトリビュートの取得、設定方法について見ていきましょう。

アトリビュート名を指定してアトリビュートを取得するにはFilesクラスのgetAttributeメソッド

を使用します。

まず、アトリビュートの取得について見てみましょう。

// アトリビュート名を指定してアトリビュートを取得
// 対象になるパス
Path path = Paths.get("foo.txt");

// 最終変更日時を取得
FileTime lastModify = (FileTime)Files.getAttribute(path, "lastModifiedTime");

// ファイルサイズを取得
Long size = (Long)Files.getAttribute(path, "size#);

getAttributeメソッドの第1引数はPathオブジェクト、第2引数にアトリビュート名を指定します。

返り値の型がObjectクラスのため、必要に応じてキャストを行います。

また、第3引数の可変長引数になっており、列挙型のLinkOptionでリンクを追うかどうかを

指定することができます。

ここでは、OSによらず取得できるアトリビュートとして、最終更新日のLastModifiedTime、

ファイルサイズのsizeを使用しました。

OSに特有のアトリビュートを取得するには、アトリビュート名にOSを表す接頭語を付加する

必要があります。

Windowsでは"dos"、POSIX準拠のOSでは"posix"を付加します。

例えば、POSIXでオーナを取得したいのであれば、getAttributeメソッドの引数を"posix:owner"

とします。

続いてアトリビュートの設定について見てみましょう。

アトリビュートの設定はsetAttributeメソッドを使用します。

setAttributeメソッドの第1引数はPathオブジェクト、第2引数にアトリビュート名、

第3引数にその値を指定します。

getAttributeメソッドと同様に、第4引数は可変長引数で列挙型のLinkOptionを指定することが

できます。

getAttributeメソッドの返り値がObjectクラスだったのと同様に、

第3引数のアトリビュートの値を示す型もObjectクラスになります。

それではファイルアトリビュートの最終更新日を現在の時間に設定してみましょう。

// アトリビュート名を指定してアトリビュートを設定
// 対象となるパス
Path path = Paths.get("var.txt");

// 最終変更日時を現在時刻に設定
FileTime lastModify = FileTime.fromMillis(System.currentTimeMillis());
Files.setAttribute(path, "LastModifiedTime", lastModify);

FileTimeクラスはファイルのタイムスタンプ属性の値を表します。

ファイルアトリビュートの設定が簡単に出来ましたね!

それでは今日はこのへんで!

人気ブログランキングへ

2016年10月18日火曜日

ファイルアトリビュートの設定

みなさん。 こんばんは。

昨日はファイルのアトリビュートの取得について書きましたが、

今日はファイルのアトリビュート設定について見ていきましょう。

早速ファイルの最終更新日時とパーミッションを変更してみます。

最終更新日時を変更するには java.nio.file.attribute.FileTime クラスを使用します。

FileTimeクラスは、作成日時や最終更新日時などのファイルに関するタイムスタンプを

保持するクラスです。

FileTimeクラスのオブジェクトの生成には、ファクトリメソッドのfromメソッドもしくは、

fromMillisメソッドを使用します。

さっそく見てみましょう。

// Filesクラスのアトリビュート設定メソッドの使用例

// 対象となるパスPath path = Paths.get("foo.txt");
// 最終変更日時を変更FileTime time = FileTime.fromMillis(System.currentTimeMillis()):Files.setLastModifiedTime(path, time);

最終更新日時には、System.currentTimeMillisメソッドを使用して現在時刻を設定しています。

次にパーミッションの設定について見ていきましょう。

// パーミッションを変更(Windowsは不可)if(!System.getProperty("os.name").contains("Windows")) {       Set<PosixFilePermisshon> permisshons = PosixFilePermissions.fromString("rw-rw-rw-");       Files.setPosixFilePermissions(path, permissions);}

パーミッションはPosixFilePermission列挙型で表します。

ここでも、ユーティリティークラスのPosixFilePermissionsクラスが提供しているファクトリメソッドの

fromStringメソッドを使用します。

fromStringメソッドでは、UNIXでのパーミッションを表す文字列を引数に指定します。

返り値はパーミッションを表すSet<PosixFilePermissions>オブジェクトになります。

上記パーミッションロジックは、誰でも読み込み、書き込み可能な設定にしています。

今日はこの辺にしておきましょう。

それではまた!

人気ブログランキングへ

2016年10月17日月曜日

ファイルのアトリビュート取得

皆さん。 こんばんは。

今日はあいにくの雨でしたね。

最近涼しくなってきて、気温も調度よく過ごしやすくなってきました。

今日はファイルのアトリビュートについて見ていきましょう。

今までのFileクラスでは、様々なOSに共通しているアトリビュートしか扱うことが出来ませんでした。

JavaSE7/8からは、OSごとに扱えるアトリビュートを定義し、Javaが動作するOSによって

切り替えられるようにしています。

また、共通しているアトリビュートは簡単に取得できるようになっています。

それでは具体的に見ていきましょう。

// Filesクラスのアトリビュート取得メソッドの使用例
// 対象となるパス
Path path = Paths.get("var.txt");
// 最終変更日時を取得
FileTime time = FIles.getLastModifiedTime(path);
System.out.println("Last Modify: " + time);
if(!System.getProperty("os.name").contains("Windows")) {
            // パーミッションを取得(Windowsは不可)
            Set<PosixFilePermission> permissions = Files.getPosixFilePermissions(path);
            // パーミッションをUnixの文字列表記に変換する
            System.out.println("Permissions: " + PosixFilePermissions.toString(permissions));
} else {
            // ファイルが実行可能か?
            System.out.println("Executable: " + Files.isExecutable(path));
            // ファイルが読み取り可能か?
            System.out.println("Readable: " + Files.isReadable(path));
            // ファイルが書き込み可能か?
            System.out.println("Writable: " + Files.isWritable(path));
}

PosixFilePermissionsクラスを使うことで、UNIXでおなじみの rwxrw-r-- のような

パーミッション表示への変換などを行うことができます。

取得した属性情報をもとに処理を制御するような使われ方をするでしょう。

今日はここまでにしたいと思います。

それではまた!

人気ブログランキングへ

2016年10月13日木曜日

Pathiに対する操作(簡易的な読み書きの方法)

みなさん。 こんばんは。

前回はファイルの入出力やリーダ、ライタについて述べてきましたが、

これらに加えて、Filesクラスには簡易的な読み込みメソッド及び書き込みメソッドが

提供されています。

それでは具体的に見ていきましょう。

// ファイルの内容をバイト配列で読み込む
Path path = Paths.get("test.txt");
byte[] bytes = Files.readAllBytes(path);

たった2行でバイト配列読み込みを記述出来ましたね!次にファイルの内容を文字列で読み込み

// ファイルの内容を文字列で読み込む
Path path = Paths.get("test.txt");
// ファイルの内容を1行ごとの List として読み込み
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
// 読み込んだファイルの内容をコンソールに出力
for(String line: lines) {
    System.out.println(line);
}

Files.readAllLines()メソッドの第2引数では文字コードをjava.nio.charset.Charsetで指定できますが

第2引数を省略した場合はUTF-8で読み込まれます。

次に書き込みを行うメソッドを見てみましょう。

書き込みは Files.write() メソッドで、Pathが示すファイルにバイト配列または文字列を

書き出すことができます。

ファイルが存在しない場合は作成され、すでに存在する場合は上書きされます。

// バイト配列または文字列をファイルに書き出す
Path path = Paths.get("test.txt");
// バイト配列をファイルに書き出す
byte[] bytes = ・・・
Files.write(path, bytes);
// 文字列をファイルに書き出す
List<String> lines = ・・・
Files.write(path, lines, Charset.forName("UTF-8"));

なお、Files.write()メソッドの引数には java.nio.files.OpenOption を指定でき、

ファイルの書き込みモードを指定できます。

たとえば以下のようにすると、ファイルを上書きするのではなく、追記で書き込みが行われます。

Files.write(path, lines, Charset.forName("UTF-8"), StandardOpenOption.APPEND);

今日はこのへんにしておきましょう。

それでは、また!

人気ブログランキングへ

2016年10月12日水曜日

Pathの機能(ファイルリーダ、ライタ)

みなさん。 こんばんは。

昨日はファイルの入出力について書きましたが、今日はファイルのリーダ、

ライタについて書いていきます。

まずJavaSE6までのリーダ、ライタについて見ていき、次に最新の手法について見ていきましょう。

// ファイルの内容を文字列で読み込む
try(BufferedReader reader = new BufferedReader(
     new InputStreamReader(new FileInputStream("sample.txt"), "UTF-8"))) {
 
     String line = null;
     // ファイルの内容を1行ずつ読み込んでコンソールに出力する
     while((line = reader.readLine()) != null) {
          System.out.prinltn(line);
     }
}

// ファイルに文字列を書き出す
try(BufferedWriter writer = new BufferedWriter(
     new OutputStreamWriter(new FileOutputStream("test.txt"), "UTF-8"))) {
      // ファイルに文字列を書き出す
     writer.write("ファイルに文字列を出力");
      // ファウルに改行を出力
     writer.newLine();
}

次にJavaSE7/8でのリーダについて見ていきましょう。

JavaSE7/8でのリーダの取得はFiles.newBufferedReader()メソッドを使います。

// 読み込むファイル
Path path = Paths.get(filename);
// newBufferedReaderメソッドを使用して、BufferedReaderオブジェクトを取得
try(BufferedReader reader = Files.newBufferedReader(path)) {
     List<String> list = new ArrayList<>();
    for(;;) {
           String line = reader.readLine();
           if(line != null) {
              list.add(line);
           } else {
              break;
           }
    }
} catch (IOException ex) {
     // 例外処理
}

感想としてファイルの読み込み書き込みとも、JavaSE 7/8 で記述量が若干減ったかなという

印象です。

まだJavaSE7/8でのライブラリ対応がされていない場合は従来のJavaSE6でのリーダ、ライタ

を使うと良いでしょう。

それではまた!

人気ブログランキングへ

2016年10月11日火曜日

Pathの機能(ファイルの入出力)

みなさん。 こんばんは。

今日はJava SE 7/8 でのファイルの入出力について見ていきます。

Java SE 7/8 では Files.newInputStream()メソッド、Files.newOutputStream()メソッド、

Files.newByteChannel()メソッドで、それぞれPathが示すファイルに対するInputStream、

OutputStream、ByteChannelが取得できます。

では具体的に見ていきましょう。

// Pathから入出力ストリームを取得する
Path path = Paths.get("C:/Users/test.txt");
// InputStreamを取得
InputStream in = Files.newInputStream(path);
// OutputStreamを取得
OutputStream out = Files.newOutputStream(path);
// ByteChannelを取得
ByteChannel channel = Files.newByteChannel(path);

ストリームを取得した後は読み込みや書き込みの処理に移ります。

メソッド名が具体的で分かりやすいですね!

これらのメソッドには第2引数以降に java.nio.file.OpenOption を渡すことで、

オープンモードを指定できます。OpenOptionは、java.nio.file.StandardOpenOptionという

enumで指定します。

// オープンモードを指定する
import static java.nio.file.StandardOpenOption.*;
// (APPENDオプション)すでに存在するファイルを追記モードでオープンする
OutputStream out1 = Files.newOutputStream(path, APPEND);
// (CREATEオプション) 存在しない場合は新規作成
OutputStream out2 = Files.newOutputStream(path, CREATE, APPEND);
// (CREATE_NEWオプション)ファイルを作成し書き込みモードでオープン。すでにファイルが存在する場合は例外をスローする
OutputStream out3 = Files.newOutputStream(path, CREATE_NEW);

OpenOptionとして指定可能は値はほかにもあります。

今日はファイルの入出力について書いていきました。


人気ブログランキングへ

2016年10月6日木曜日

Pathの機能(リンクの作成)

みなさん。 こんばんは。

今日はリンクの作成について見ていきましょう。

リンクの作成はJavaSE 6までは出来ませんでした。

JavaSE 7/8 からリンクの作成が出来るようになりました。

これからは、ハードリンクやシンボリックリンクを作成する際に困ることも無いですね。

File.coreateLink()メソッドでハードリンクを、File.createSymbolicLink()メソッドで

シンボリックリンクを作成出来ます。

プラットフォームがこれらの機能をサポートしていない場合は UnsupportedOperationExceptionを、

すでにファイル等が存在するためリンクを作成できない場合は FileAlreadyExstsExceptionを

スローします。

それでは具体的なソースを見てみましょう。

// ハードリンクを作成する
Path path = Paths.get("doc", "readme.txt");
Path link = Paths.get("link.txt");
// doc/readme.txtのハードリンクをlink.txtとして作成
Files.createLink(link, path);

File.createSymbolicLink()メソッドには、第3引数以降に作成するシンボリックリンクの属性を

FIleAttributeで指定できます。

// シンボリックリンクを作成する
Path path = Paths.get("doc", "readme.txt");
Path link = Paths.get("link.txt");
// doc/readme.txtのシンボリックリンクをlink.txtとして作成
Files.createSymbolicLink(link, path);

Windows環境でFiles.createSymbolicLink()メソッドを呼び出すと、例外が発生します。

この場合は、Java VM を管理者モードで実行する必要があるそうです。

今日はここまでにしておきましょう。

それではまた!

人気ブログランキングへ

2016年10月5日水曜日

Pathの機能(ファイル/ディレクトリの作成)

みなさん。 こんばんは。

今日はファイルやディレクトリの作成方法について見ていきましょう。

従来のJavaSE6までのファイルやディレクトリの作成はFileクラスで生成していました。

// ディレクトリの作成
File dir = new File("dir");
dir.mkdir();
// ファイルの作成
File file = new File(dir, "test.txt");

JavaSE 7/8 からはFilesクラスのcreateFileメソッドを使用します。

// ディレクトリの作成
Path dir = Paths.get("dir");
Files.createDirectory(dir);
// ファイルを作成
Path file = dir.resolve("test.txt");
Files.createFile(file);

ファイルは作成しただけなので、ファイルの中身は何もなく、サイズは0バイトです。

もし、作成するファイルやディレクトリと同名のファイルもしくはディレクトリが存在している場合は、

FileAlreadyExistsException例外がスローされます。

また、何らかのエラーが発生した場合は IOException例外がスローされます。

書き込み権限がない場合は SecurityException例外がスローされます。

もし、複数のディレクトリを作成する場合は、 createDirectoriesメソッドを使用します。

// 複数のディレクトリを作成
Path path = Paths.get("foo/bar/baz");
Files.createDirectories(path);

createDirectoryメソッドとは異なり、createDirectoriesメソッドは同名のディレクトリが、

存在していても FileAlreadyException 例外はスローされません。

ただし、同名のファイルが存在していた場合はFileAlreadyExistsException例外がスローされます。

それでは今日はこの辺にしておきましょう!

人気ブログランキングへ

2016年10月4日火曜日

Pathの機能(ファイルの削除)

みなさん。 こんばんは。

今日はJava SE 7/8 でのファイルの削除について見ていきましょう。

Java SE 6 までのファイル削除はFileクラスのdeleteメソッドを使っていました。

Java SE 7/8 からは削除対象ファイルのパスを生成しFilesクラスのdeleteメソッドを使用します。

詳しく見てみましょう。

// 削除対象ファイル
Path path = Paths.get("C:/Users/var.txt");
// 削除
Files.delete(path);

尚、削除対象が存在しない場合は、java.nio.file.NoSuchFileExceptionがスローされ、

書き込み権限が無い場合は、SecurityExceptionがスローされます。

その他の例外はIOExceptionがスローされます。

また、削除対象が存在するかどうかチェックを行い、存在する場合のみ削除を行う

deleteIfExistsメソッドがあります。

ディレクトリの削除は、ディレクトリが空の場合のみ削除可能で、もし、ファイルが存在する場合は

java.nio.file.DirectoryNoEmptyExceptionがスローされます。

空では無いディレクトリを削除するには、ファイルのツリーをたどり、最も階層の深いファイルから

順々に削除してファイルの削除が終わってからディレクトリを削除します。

ディレクトリを再帰的に削除していく方法はまた今度見ていきましょう。

それではまた!
人気ブログランキングへ

2016年10月3日月曜日

Pathの機能(ファイルやディレクトリの移動)

みなさん。 こんばんは。

今日はファイルやディレクトリの移動について見ていきましょう。

ファイルやディレクトリの移動はJavaSE6のFileクラスでは出来ませんでした。

JavaSE7以降からはFilesクラスのmoveメソッドを使用してファイルやディレクトリの移動をします。

例を見てみましょう。

// 移動元のファイル名
Path form = Paths.get("C:/Users/hoge.txt");
// 移動先のファイル
Path to = Paths.get("C:/Users/tmp/hoge.txt");
// hoge.txtをtmp/hoge.txtに移動
Files.move(from, to);

はい。簡単ですね!

また、移動先のファイルやディレクトリがすでに存在する場合、

FileAlreadyExistsExceptionがスローされるようです。

それを回避するために、以下のように第3引数にCopyOption#REPLACE_EXISTINGオプションを

指定することにより上書きできます。

// 移動先のファイルを上書きする
Files.move(from, to, CopyOption.REPLACE_EXISTING);

またファイルやディレクトリの名前の変更も、Files.moveメソッドを使います。

// 元のファイル名
Path src = Paths.get("foo.txt");
// 変更後のファイル名
Path dest = Paths.get("bar.txt");
// ファイル名を変更
Files.move(src, dest);

JavaSE 7/8 ではファイルやディレクトリの移動が出来るようになって便利になりましたね。

それではまた!

人気ブログランキングへ

2016年10月1日土曜日

Pathの機能(ファイルのコピー) 

みなさん。 こんにちは。

今日はJavaSE 7/8 のファイルコピーについて書いていきます。

今までのファイルのコピーは、コピー元のファイルを読み込んで、コピー先のファイルに書き込む

という入出力の処理を記述する必要がありました。

Java6までのファイルコピー例

     //Fileオブジェクトを生成する
            FileInputStream fis = new FileInputStream("c:\\image001.jpg");
            FileOutputStream fos = new FileOutputStream("c:\\image002.jpg");

            //入力ファイルをそのまま出力ファイルに書き出す
            byte buf[] = new byte[256];
            int len;
            while ((len = fis.read(buf)) != -1) {
                fos.write(buf, 0, len);
            }

JavaSE7/8のファイルコピー例

     // 先ずはPathオブジェクトの生成
     Path from = Paths.get("C:/Users/hoge.txt");
     Path to = Paths.get("C:/Users/fuga.txt");

     // Filesクラスのコピーメソッドでhoge.txtをfuga.txtにコピー
     Files.copy(from, to);


移動先のファイルやディレクトリが既に存在する場合、FileAlreadyExistsExceptionが

スローされます。

その場合、coypメソッドの第3引数にCopyOption.REPLACE_EXISTING オプションを
指定することでファイルを上書きコピーすることができます。

     // 移動先のファイルを上書きする
     Files.copy(from, to, CopyOption.REPLACE_EXISTING);

他に第3引数に指定可能なオプションは以下のものがあります。

COPY_ATTRIBUTES : ファイル、ディレクトリの属性をコピー先に引き継ぐ
NOFOLLOW_LINK : シンボリックリンクをたどらずに、シンボリックリンクそのものをコピーする

感想としてファイルのコピー記述が簡単になったのと、Linuxなどのシンボリックリンクのコピーに

対応していたり、機能が強化された印象です。


人気ブログランキングへ