Kotlin ファイルの存在/移動/コピー/削除

Kotlinのファイルを操作するサンプルです。

目次

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

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

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

existsメソッドとnotExistsメソッドで、ファイルの存在確認を行うサンプルです。

import java.nio.file.Files
import java.nio.file.Paths

fun main() {
    val path1 = Paths.get("D:\\Test3", "test1.txt")

    if (Files.exists(path1)) {
        println("存在します")
    }
    if (Files.notExists(path1)) {
        println("存在しません")
    }
}

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

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

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

copyメソッドで、ファイルのコピーを行うサンプルです。

import java.nio.file.Files
import java.nio.file.Paths
import java.io.IOException

fun main() {
    val from1 = Paths.get("D:\\Test3", "test1.txt")
    val to1 = Paths.get("D:\\Test4", "test1.txt")

    try {
        Files.copy(from1, to1)
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

10行目は、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

moveメソッドで、ファイルの移動を行うサンプルです。

import java.nio.file.Files
import java.nio.file.Paths
import java.io.IOException

fun main() {
    val from1 = Paths.get("D:\\Test3", "test1.txt")
    val to1 = Paths.get("D:\\Test4", "test1.txt")

    try {
        Files.move(from1, to1)
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

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

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

moveメソッドで、ファイル名を変更するサンプルです。

import java.nio.file.Files
import java.nio.file.Paths
import java.io.IOException

fun main() {
    val from1 = Paths.get("D:\\Test3", "test1.txt")
    val to1 = Paths.get("D:\\Test3", "test9.txt")

    try {
        Files.move(from1, to1)
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

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

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

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

createFileメソッドで、空ファイルを作成するサンプルです。

import java.nio.file.Files
import java.nio.file.Paths
import java.io.IOException

fun main() {
    val path1 = Paths.get("D:\\Test3", "test1.txt")

    try {
        if (!Files.exists(path1)) {
            Files.createFile(path1)
        }
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

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

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

public static boolean deleteIfExists(Path path) throws IOException

deleteIfExistsメソッドで、ファイルを削除するサンプルです。

import java.nio.file.Files
import java.nio.file.Paths
import java.io.IOException

fun main() {
    val path1 = Paths.get("D:\\Test3", "test1.txt")

    try {
        Files.deleteIfExists(path1)
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

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

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

public static long size(Path path) throws IOException

sizeメソッドで、ファイルのサイズを取得するサンプルです。

import java.nio.file.Files
import java.nio.file.Paths
import java.io.IOException

fun main() {
    val path1 = Paths.get("D:\\Test1", "test1.txt")
    var size1: Long = 0

    try {
        size1 = Files.size(path1)
        println(size1)
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

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

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

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

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

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

fun main() {
    val path1 = Paths.get("D:\\Test3", "test1.txt")

    val ba1: BasicFileAttributes
    try {
        ba1 = Files.readAttributes(path1, BasicFileAttributes::class.java)
        println(ba1.creationTime())     //2021-03-09T16:06:37.944444Z
        println(ba1.lastModifiedTime()) //2021-03-09T16:10:13.405828Z
        getFormat1(ba1)
    } catch (e: IOException) {
        e.printStackTrace()
    }
}
private fun getFormat1(ba1: BasicFileAttributes) {
    val time1 = ba1.creationTime()
    val time2 = ba1.lastModifiedTime()
    val pattern1 = "yyyy-MM-dd HH:mm:ss"
    val format1 = SimpleDateFormat(pattern1)
    val f1 = format1.format(Date(time1.toMillis()))
    val f2 = format1.format(Date(time2.toMillis()))
    println("作成日時 $f1") //作成日時 2021-03-10 01:06:37
    println("更新日時 $f2") //更新日時 2021-03-10 01:10:13
}

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

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

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

createTempFileメソッドで、一時ファイルを作成するサンプルです。

import java.nio.file.Files
import java.nio.file.Paths
import java.io.IOException

fun main() {
    val path1 = Paths.get("D:\\Test3")

    try {
        val test1 = Files.createTempFile(path1, "abc", "zzz")
        println(test1.toString())
    } catch (e: IOException) {
        e.printStackTrace()
    }
}

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

関連の記事

Kotlin テキストファイルの読み書き

△上に戻る