18.5. Klasa Source

Przykładem iteratora ze standardowej biblioteki języka Scala jest abstrakcyjna klasa Source z pakietu scala.io. Ta klasa roszerza typ Iterator[Char] i służy do reprezentowania różnych źródeł danych. Obiekt towarzyszący tej klasy posiada metody pozwalające tworzyć instancje klasy Source. Na przykład metoda fromString tworzy instancję tej klasy na podstawie łańcucha znaków.

scala> val source = scala.io.Source.fromString("hello")
source: scala.io.Source = non-empty iterator

scala> source.forEach(println)
h
e
l
l
o

Metody o nazwie fromFile (których jest kilka) tworzą instancje klasy Source reprezentujące dane z plików. Na przykład oba poniższe polecenia tworzą instancje tej klasy z danymi pochodzącymi z pliku greetings.txt. Drugie z poleceń specyfikuje kodowanie znaków, jakie ma być użyte przy odczycie danych.

scala> val g1 = scala.io.Source.fromFile("greetings.txt")
g1: scala.io.BufferedSource = non-empty iterator

scala> val g2 = scala.io.Source.fromFile(new java.io.File("greetings.txt"), "UTF-8")
g2: scala.io.BufferedSource = non-empty iterator

Zawartość pliku greetings.txt jest następująca.

Plik greetings.txt:
Hello
Hi
Welcome

Poniższe polecenie tworzy łańcuch znaków z tych znaków z pliku, które są w zakresie od a do z.

scala> g1.filter(c => c >= 'a' && c <= 'z').mkString
res1: String = elloielcome

Kolejny przykład wyświetla poszczególne znaki pliku, rozdzielając je spacjami.

scala> g2.foreach(c => print(" " + c))
 H e l l o  
 H i  
 W e l c o m e  

W poniższym przykładzie użyta jest metoda getLines, która zwraca iterator poszczególnych wierszy danych. Użyta jest także inna wersja metody fromFile.

scala> val lines=scala.io.Source.fromFile(new java.io.File("greetings.txt")).getLines
lines: Iterator[String] = non-empty iterator

scala> lines.mkString(",")
res3: String = Hello,Hi,Welcome

Język programowania Scala Wydanie 2. Copyright © Grzegorz Balcerek 2016

Licencja Creative Commons

Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowe.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.