Clojure - Datei-E / A.

Clojure bietet eine Reihe von Hilfsmethoden für die Arbeit mit E / A. Es bietet einfachere Klassen, um die folgenden Funktionen für Dateien bereitzustellen.

  • Dateien lesen
  • Schreiben in Dateien
  • Überprüfen, ob eine Datei eine Datei oder ein Verzeichnis ist

Lassen Sie uns einige der Dateivorgänge untersuchen, die Clojure zu bieten hat.

Lesen des Inhalts einer Datei als ganze Zeichenfolge

Wenn Sie den gesamten Inhalt der Datei als Zeichenfolge abrufen möchten, können Sie die verwenden clojure.core.slurpMethode. Der Befehl slurp öffnet einen Reader für eine Datei, liest den gesamten Inhalt und gibt eine Zeichenfolge zurück.

Das Folgende ist ein Beispiel dafür, wie dies getan werden kann.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (def string1 (slurp "Example.txt"))
   (println string1))
(Example)

Wenn die Datei die folgenden Zeilen enthält, werden sie wie folgt gedruckt:

line : Example1
line : Example2

Den Inhalt einer Datei zeilenweise lesen

Wenn Sie den gesamten Inhalt der Datei zeilenweise als Zeichenfolge abrufen möchten, können Sie die verwenden clojure.java.io/readerMethode. Die Klasse clojure.java.io/reader erstellt einen Lesepuffer, mit dem jede Zeile der Datei gelesen wird.

Das folgende Beispiel zeigt, wie dies getan werden kann.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (with-open [rdr (clojure.java.io/reader "Example.txt")]
   (reduce conj [] (line-seq rdr))))
(Example)

Wenn die Datei die folgenden Zeilen enthält, werden sie wie folgt gedruckt:

line : Example1
line : Example2

Die Ausgabe wird angezeigt als -

["line : Example1" "line : Example2"]

Schreiben in Dateien

Wenn Sie in Dateien schreiben möchten, können Sie die verwenden clojure.core.spitBefehl zum Spucken ganzer Zeichenfolgen in Dateien. Der Befehl spit ist das Gegenteil der Slurp-Methode. Diese Methode öffnet eine Datei als Writer, schreibt Inhalte und schließt die Datei.

Es folgt ein Beispiel.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (spit "Example.txt"
      "This is a string"))

Wenn Sie im obigen Beispiel den Inhalt der Datei Example.txt sehen, sehen Sie den Inhalt von "Dies ist eine Zeichenfolge".

Schreiben von 'in' Dateien zeilenweise

Wenn Sie zeilenweise in Dateien schreiben möchten, können Sie die verwenden clojure.java.io.writerKlasse. Die Klasse clojure.java.io.writer wird verwendet, um einen Writer-Stream zu erstellen, bei dem Datenbytes in den Stream und anschließend in die Datei eingespeist werden.

Das folgende Beispiel zeigt, wie der Befehl spit verwendet werden kann.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (with-open [w (clojure.java.io/writer "Example.txt" :append true)]
      (.write w (str "hello" "world"))))
(Example)

Wenn der obige Code ausgeführt wird, ist die Zeile "Hallo Welt" in der Datei Example.txt vorhanden. Die Option append: true besteht darin, Daten an die Datei anzuhängen. Wenn diese Option nicht angegeben ist, wird die Datei überschrieben, wenn Daten in die Datei geschrieben werden.

Überprüfen, ob eine Datei vorhanden ist

Um zu überprüfen, ob eine Datei vorhanden ist, klicken Sie auf clojure.java.io.fileKlasse kann verwendet werden, um das Vorhandensein einer Datei zu überprüfen. Das folgende Beispiel zeigt, wie dies erreicht werden kann.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (println (.exists (clojure.java.io/file "Example.txt"))))
(Example)

Wenn die Datei Example.txt vorhanden ist, ist die Ausgabe wahr.

Lesen von der Konsole

Um Daten von der Konsole zu lesen, müssen Sie die read-lineAnweisung kann verwendet werden. Das folgende Beispiel zeigt, wie dies verwendet werden kann.

Wenn Sie den Befehl (Zeile lesen) im REPL-Fenster eingeben, haben Sie die Möglichkeit, Eingaben in das Konsolenfenster einzugeben.

user->(read-line)
Hello World

Der obige Code erzeugt die folgende Ausgabe.

“Hello World”