モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

Scala ファイル関連の処理

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2016/01/31
最終更新最終更新
2018/06/25
記事区分記事区分
一般公開

ファイル操作 (作成、移動、削除、探索)

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

Feedbacks コンセプト画像

    ログインするとコメントを投稿できます。

    関連記事

    • Scala 文字列の処理
      書式指定 object Main { def main(args: Array[String]): Unit = { println("%d + %d = %d".format(1, 1, 2)) //=> 1 + 1 = 2 } } 文字列の比較 ヒアドキュメント 他の言語でいう「ヒアドキュメント」のようなものは """ で囲うことで実現できます。 object Main ...
      したくんしたくん6/18/2018に更新
      いいねアイコン画像0
    • 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...
      したくんしたくん6/5/2018に更新
      いいねアイコン画像0
    • 酢豚の基本的な使い方 (sbt)
      sbt は Scala および Java を主な対象としたビルドツールです。Scala Build Tool の略ではありませんが、Simple Build Tool という明示的な記述も公式ドキュメントなどには見当りません。以下 sbt の基本的な使用例をまとめます。使用した sbt のバージョンは 0.13 です。 公式ドキュメント [sbt 0.13](http://www.scala-sb...
      ねこねこ6/30/2018に更新
      いいねアイコン画像0
    • Scala 関数のサンプルコード
      「デフォルト引数」および「Unit 型を返す関数」 object HelloWorld { def main(args: Array[String]): Unit = { def myPrint(myArg: String = "default_value") = println(myArg + "!") val result = myPrint() //=> defau...
      したくんしたくん6/26/2018に更新
      いいねアイコン画像0
    • Scala 組み込みの制御構造
      if-else 条件分岐で知られる if-else は三項演算子のようにも使用されます。 object HelloWorld { def main(args: Array[String]): Unit = { val myVal = if (!args.isEmpty) args(0) else "default" println(myVal) } ...
      したくんしたくん10/7/2021に更新
      いいねアイコン画像0