ファイル操作 (作成、移動、削除、探索)
java.nio.file._ と java.io.File を利用しています。
import java.nio.file.{Paths, Files}
import java.nio.file.StandardCopyOption.REPLACE_EXISTING
import java.io.{File => JFile} // リネームして区別しやすくする
object Main {
def main(args: Array[String]): Unit = {
// 新規ファイル作成
val file = Paths.get("sample.txt")
if(Files.notExists(file)) Files.createFile(file)
// 新規ディレクトリ作成
val dir = Paths.get("mydir")
val dirp = Paths.get("mydir", "mysubdir")
if(Files.notExists(dir)) Files.createDirectory(dir) // mkdir
if(Files.notExists(dirp)) Files.createDirectories(dirp) // mkdir -p
// ファイルサイズ
println(Files.size(file)) //=> 0
// ファイル移動
Files.move(file, file, REPLACE_EXISTING) // 存在していれば上書き
Files.move(file, dirp.resolve(file.getFileName), REPLACE_EXISTING) // ディレクトリ間の移動
// ファイルコピー
Files.copy(dirp.resolve(file.getFileName), file, REPLACE_EXISTING) // 存在していれば上書き
// ディレクトリであるかの判別
println(Files.isDirectory(dirp)) //=> true
// 存在すれば削除
Files.deleteIfExists(dirp.resolve(file.getFileName))
Files.deleteIfExists(dirp) // 中身が空でないとエラー
Files.deleteIfExists(dir) // 中身が空でないとエラー
Files.deleteIfExists(file)
// ディレクトリ内のファイルを探索
def getListOfFiles(dir: String): List[JFile] = {
val d = new JFile(dir)
if (d.exists) {
var files = d.listFiles.filter(_.isFile).toList
d.listFiles.filter(_.isDirectory).foreach{ dir =>
files = files ::: getListOfFiles(dir.getAbsolutePath)
}
files
}
else {
List[JFile]()
}
}
println(getListOfFiles("src")) //=> List(/path/to/src/main/scala/Main.scala, /path/to/src/test/scala/.keep)
}
}
ファイルの読み込みと書き込み
書き込みの例を含めて改めて記載します。scala.io はファイル書き込み機能を提供していないため java.io を利用しています。
import scala.io.Source
import java.io.PrintWriter
object Main {
def main(args: Array[String]): Unit = {
// ファイルから読み込み
val source = Source.fromFile("sample.txt", "UTF-8") // Shift_JIS, EUC-JP なども可
source.getLines.foreach{ line =>
println(line)
}
source.close()
// URL 指定でインターネットから読み込み
val source2 = Source.fromURL("http://www.example.com", "UTF-8")
source2.getLines.foreach{ line =>
println(line)
}
source2.close()
// 書き込み
val pw = new PrintWriter("output.txt")
pw.write("Hello, world")
pw.close
}
}
0
Scalaはいいぞ
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。

