ファイル操作 (作成、移動、削除、探索)
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
記事の執筆者にステッカーを贈る
有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。
さらに詳しく →Feedbacks
ログインするとコメントを投稿できます。
関連記事
- Scala 文字列の処理書式指定 object Main { def main(args: Array[String]): Unit = { println("%d + %d = %d".format(1, 1, 2)) //=> 1 + 1 = 2 } } 文字列の比較 ヒアドキュメント 他の言語でいう「ヒアドキュメント」のようなものは """ で囲うことで実現できます。 object Main ...
- Scala 日付に関する処理Date クラスを文字列にフォーマット import java.util.Date object Main { def main(args: Array[String]): Unit = { // format は Date に限らない文字列用の機能です。 println("%d-%d-%d" format (1, 1, 1)) //=> 1-1-1 printl...
- 酢豚の基本的な使い方 (sbt)sbt は Scala および Java を主な対象としたビルドツールです。Scala Build Tool の略ではありませんが、Simple Build Tool という明示的な記述も公式ドキュメントなどには見当りません。以下 sbt の基本的な使用例をまとめます。使用した sbt のバージョンは 0.13 です。 公式ドキュメント [sbt 0.13](http://www.scala-sb...
- Scala 関数のサンプルコード「デフォルト引数」および「Unit 型を返す関数」 object HelloWorld { def main(args: Array[String]): Unit = { def myPrint(myArg: String = "default_value") = println(myArg + "!") val result = myPrint() //=> defau...
- Scala 組み込みの制御構造if-else 条件分岐で知られる if-else は三項演算子のようにも使用されます。 object HelloWorld { def main(args: Array[String]): Unit = { val myVal = if (!args.isEmpty) args(0) else "default" println(myVal) } ...