ScalaでSwing ファイルを開く・保存する

import scala.swing._
import java.io.{ File, IOException }
import javax.swing.filechooser.FileNameExtensionFilter
import org.apache.commons.lang.SystemUtils
import org.apache.commons.io.FileUtils
def getFileChooser = {
  val dir = if (currentFile == null) SystemUtils.getUserDir else currentFile
  new FileChooser(dir) {
    fileFilter = new FileNameExtensionFilter("テキストファイル", "txt")
    fileFilter = new FileNameExtensionFilter("Scala / Ruby", "scala", "rb")
  }
}

ファイルを開く

val fc = getFileChooser
fc.title = "ファイルを開く"
fc.showOpenDialog(this) match {
  case FileChooser.Result.Approve =>
    try {
      if (fc.selectedFile.exists) {
        editScroll.editArea.text = FileUtils.readFileToString(fc.selectedFile)
        currentFile = fc.selectedFile
      } else {
        editScroll.editArea.text = ""
        currentFile = fc.selectedFile
      }
    } catch {
      case e: IOException =>
        Dialog.showMessage(this, "ファイルを開けませんでした。\n" + e.getMessage)
    }
  case FileChooser.Result.Cancel => ;
  case FileChooser.Result.Error => ;
}

ファイルを保存する

val fc = getFileChooser
fc.title = "名前を付けて保存"
fc.showSaveDialog(this) match {
  case FileChooser.Result.Approve =>
    val sf = fc.selectedFile
    val confResult = if (sf.exists) {
      Dialog.showConfirmation(this,
        sf.getName + " は既に存在します。\n上書きしますか?",
        "名前を付けて保存の確認", Dialog.Options.YesNo)
    } else {
      Dialog.Result.Yes
    }
    if (confResult == Dialog.Result.Yes) {
      try {
        FileUtils.writeStringToFile(sf, editScroll.editArea.text)
        currentFile = sf
      } catch {
        case e: IOException =>
          Dialog.showMessage(this, "ファイルを保存できませんでした。\n" + e.getMessage)
      }
    }
  case FileChooser.Result.Cancel => ;
  case FileChooser.Result.Error => ;
}

gist: 219238 - ScalaでSwing ファイルを開く・保存