/  Scala /  Schnipsel /  Gemischtes

Textdatei auslesen

Das nachfolgende Beispiel zeigt, wie eine Textdatei Zeilenweise eingelesen werden kann.

object TextFileLines {
         
  def main(args: Array[String]) {
    scala.io.Source.fromFile("c:\\boot.ini").getLines().foreach {
      println(_)
    }
  }
}
itmapa.de - X2H V 0.24



Datenbankzugriff über JDBC

object ScalaJDBC {
  def main(args: Array[String]) {
    import java.sql._    
  
    classOf[org.postgresql.Driver]
    
    val connection = DriverManager.getConnection("jdbc:postgresql://localhost/database","user","password")
    val statement = connection.createStatement
    val sql = "SELECT * FROM table WHERE id > 0"
    val resultSet = statement.executeQuery(sql)  
   
    while (resultSet.next) println(resultSet.getInt("id")+" "+resultSet.getString("name"))
  }
}
itmapa.de - X2H V 0.24

Siehe: http://blogs.enterprisedb.com/2010/07/08/scala-postgresql-access/ Flagge Großbritanien

Textdatei in einem Frame ausgeben

Das nachfolgende Beispiel zeigt, wie man den Inhalt einer Textdatei in einem Frame ausgeben kann. Wird vom Hauptfenster aus der Button1 gewählt, wird der Inhalt der Datei in einer TextArea ausgegeben. Wählt man den Button 2 dann wird der Inhalt in einem Label ausgegeben.

import swing._
import scala.swing._
import scala.swing.event._
          
          
object MyFrame{
  def main(args : Array[String]) {
    val myFrame = new MyFrame()
    myFrame.visible = true
    myFrame.listenTo(myFrame.button1,myFrame.button2,myFrame)
    myFrame.reactions += {
      case ButtonClicked(myFrame.button1) => new TextAreaFrame("c:\\ablage\\Test.txt")
      case ButtonClicked(myFrame.button2) => new LabelFrame("c:\\ablage\\Test.txt")
      case WindowClosing(w) => exit(0)
    }
  }
}
         
class MyFrame extends Frame{
  title = "MyFrame"
  val button1 = new Button("Button 1")
  val button2 = new Button("Button 2")
  
  val panel = new FlowPanel
  panel.contents += button1
  panel.contents += button2
  
  contents = panel
}
          
class TextAreaFrame(fileName: String) extends Frame{
  val textArea = new TextArea(25,80)      
  for (s: String <- scala.io.Source.fromFile(fileName).getLines()) textArea append (s + "\n")    
  contents = textArea
  visible = true
}
          
class LabelFrame(fileName: String) extends Frame{
  val builder = new StringBuilder
  for (s: String <- scala.io.Source.fromFile(fileName).getLines()) builder append (s + "<br>")
  contents = new Label("<html>"+builder.toString()+"</html>")
  visible = true
}
itmapa.de - X2H V 0.24



Using (auto close)

Das nachfolgende Beispiel zeigt, wie wir mit Ressourcen umgehen können, die geschlossen werden müssen (sollten), ohne immer wieder eine try - finally Struktur ausprogrammieren zu müssen.

Getestet: Scala 2.9.3 (Eclipse Juno) - JRE6 (12.9.2012)
import java.io.FileReader
import java.io.File
          
class SomeClass {
  def using[T <: { def close() }](resource: T)(block: T => Unit) {
    try {
      block(resource)
    } finally {
      if (resource != null) resource.close()
    }
  } 
         
  def doWithFileReader(file: File): Unit = {    
    using (new FileReader(file)){ fileReader =>
      // Arbeit mit fileReader
    }    
  }
}
itmapa.de - X2H V 0.24

Siehe: Scala Hamburg - SCALA CODING - AUTOCLOSE

Aktuelle Scala Version auslesen

Das nachfolgende zeigt, wie wir die aktuelle Scala Version auslesen können.

object ListCount {
       
  def main(args: Array[String]){
    val scalaVersion = util.Properties.versionString
    println(scalaVersion)
  }
}
itmapa.de - X2H V 0.24



Verzeichnisbaum kopieren

Mit der nächsten Klasse kann ein Verzeichnisbaum inklusiver enthaltener Dateien kopiert werden.

  import java.io.File
  import java.io.FileInputStream
  import java.io.FileOutputStream
  
  object CopyTree {
    val fileSeparator = System.getProperty("file.separator")
   
    
    def copyFileOrDirectory(sourceFile: File, targetFile: File): Unit = {
      if (sourceFile.isDirectory()) copyDirectory(sourceFile,targetFile)
      else copyFile(sourceFile,new File(targetFile+fileSeparator+sourceFile.getName))
    }
    
    def copyDirectory(sourceFile: File, targetFile: File): Unit = {
      val newDir = new File(targetFile.toString()+fileSeparator+sourceFile.getName)
      if (!newDir.exists()) newDir.mkdir()      
      val files = sourceFile.list()
      
      for (f <- files) copyFileOrDirectory(new File(sourceFile+fileSeparator+f),newDir)    
    }
  
    def copyFile(sourceFile: File, targetFile: File): Unit = {
      val inS = new FileInputStream(sourceFile)
      val outS = new FileOutputStream(targetFile)
      
      var buffer = new Array[Byte](1024)
      var len: Int =  inS.read(buffer)
      while (len > 0) {
        outS.write(buffer,0,len)
        len = inS.read(buffer)
      }
      
      inS.close()
      outS.close()
    } 
  }
  
itmapa.de - X2H V 0.24