Gemischtes
- Textdatei auslesen
- Datenbankzugriff über JDBC
- Textdatei in einem Frame ausgeben
- Using (auto close)
- Aktuelle Scala Version auslesen
- Using (auto close)
- Verzeichnisbaum kopieren
Stand: 16. August 2019
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(_) } } }
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"))
}
}
Siehe: http://blogs.enterprisedb.com/2010/07/08/scala-postgresql-access/
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 }
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.
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
}
}
}
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) } }
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() } }