Clojure - File I / O
Clojure fornisce una serie di metodi di supporto quando si lavora con I / O. Offre classi più semplici per fornire le seguenti funzionalità per i file.
- Lettura di file
- Scrittura su file
- Verificare se un file è un file o una directory
Esploriamo alcune delle operazioni sui file che Clojure ha da offrire.
Lettura del contenuto di un file come un'intera stringa
Se vuoi ottenere l'intero contenuto del file come una stringa, puoi usare l'estensione clojure.core.slurpmetodo. Il comando slurp apre un lettore su un file e ne legge tutto il contenuto, restituendo una stringa.
Di seguito è riportato un esempio di come questo può essere fatto.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(def string1 (slurp "Example.txt"))
(println string1))
(Example)
Se il file contiene le seguenti righe, verranno stampate come:
line : Example1
line : Example2
Leggere il contenuto di un file una riga alla volta
Se vuoi ottenere l'intero contenuto del file come una stringa una riga alla volta, puoi usare il clojure.java.io/readermetodo. La classe clojure.java.io/reader crea un buffer di lettura, che viene utilizzato per leggere ogni riga del file.
Di seguito è riportato un esempio che mostra come eseguire questa operazione.
(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)
Se il file contiene le seguenti righe, verranno stampate come:
line : Example1
line : Example2
L'output verrà mostrato come -
["line : Example1" "line : Example2"]
Scrittura "su" file
Se vuoi scrivere "su" file, puoi usare l'estensione clojure.core.spitcomando per vomitare intere stringhe in file. Il comando spit è l'opposto del metodo slurp. Questo metodo apre un file come scrittore, scrive il contenuto, quindi chiude il file.
Di seguito è riportato un esempio.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(spit "Example.txt"
"This is a string"))
Nell'esempio precedente, se vedi il contenuto del file Example.txt, vedrai il contenuto di "Questa è una stringa".
Scrivere "su" file una riga alla volta
Se vuoi scrivere "su" file una riga alla volta, puoi usare il clojure.java.io.writerclasse. La classe clojure.java.io.writer viene utilizzata per creare un flusso di scrittura in cui i byte di dati vengono inseriti nel flusso e successivamente nel file.
Di seguito è riportato un esempio che mostra come può essere utilizzato il comando spit.
(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)
Quando il codice precedente viene eseguito, la riga "hello world" sarà presente nel file Example.txt. L'opzione append: true consiste nell'aggiungere dati al file. Se questa opzione non è specificata, il file verrà sovrascritto ogni volta che i dati vengono scritti nel file.
Controllo per vedere se esiste un file
Per verificare se esiste un file, il clojure.java.io.fileclass può essere utilizzato per verificare l'esistenza di un file. Di seguito è riportato un esempio che mostra come questo può essere realizzato.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(println (.exists (clojure.java.io/file "Example.txt"))))
(Example)
Se il file Example.txt esiste, l'output sarà vero.
Lettura dalla console
Per leggere i dati dalla console, il read-linedichiarazione può essere utilizzata. Di seguito è riportato un esempio che mostra come questo può essere utilizzato.
Se inserisci il comando (read-line) nella finestra REPL, avrai la possibilità di inserire un input nella finestra della console.
user->(read-line)
Hello World
Il codice precedente produrrà il seguente output.
“Hello World”