Clojure - E / S de fichier
Clojure fournit un certain nombre de méthodes d'assistance lors de l'utilisation d'E / S. Il propose des classes plus faciles pour fournir les fonctionnalités suivantes pour les fichiers.
- Lecture de fichiers
- Écriture dans des fichiers
- Voir si un fichier est un fichier ou un répertoire
Explorons certaines des opérations de fichiers que Clojure a à offrir.
Lecture du contenu d'un fichier sous forme de chaîne entière
Si vous souhaitez obtenir l'intégralité du contenu du fichier sous forme de chaîne, vous pouvez utiliser le clojure.core.slurpméthode. La commande slurp ouvre un lecteur sur un fichier et lit tout son contenu, renvoyant une chaîne.
Voici un exemple de la façon dont cela peut être fait.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(def string1 (slurp "Example.txt"))
(println string1))
(Example)
Si le fichier contient les lignes suivantes, elles seront imprimées sous la forme -
line : Example1
line : Example2
Lecture du contenu d'un fichier une ligne à la fois
Si vous souhaitez obtenir l'intégralité du contenu du fichier sous forme de chaîne une ligne à la fois, vous pouvez utiliser le clojure.java.io/readerméthode. La classe clojure.java.io/reader crée un tampon de lecture, qui est utilisé pour lire chaque ligne du fichier.
Voici un exemple qui montre comment cela peut être fait.
(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)
Si le fichier contient les lignes suivantes, elles seront imprimées sous la forme -
line : Example1
line : Example2
La sortie sera affichée comme -
["line : Example1" "line : Example2"]
Ecrire des fichiers 'dans'
Si vous souhaitez écrire des fichiers 'dans', vous pouvez utiliser le clojure.core.spitcommande pour cracher des chaînes entières dans des fichiers. La commande spit est l'opposé de la méthode slurp. Cette méthode ouvre un fichier en tant qu'écrivain, écrit le contenu, puis ferme le fichier.
Voici un exemple.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(spit "Example.txt"
"This is a string"))
Dans l'exemple ci-dessus, si vous voyez le contenu du fichier Example.txt, vous verrez le contenu de «Ceci est une chaîne».
Écriture «dans» des fichiers une ligne à la fois
Si vous souhaitez écrire des fichiers «dans» une ligne à la fois, vous pouvez utiliser le clojure.java.io.writerclasse. La classe clojure.java.io.writer est utilisée pour créer un flux d'écriture dans lequel des octets de données sont introduits dans le flux et ensuite dans le fichier.
Voici un exemple qui montre comment la commande spit peut être utilisée.
(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)
Lorsque le code ci-dessus est exécuté, la ligne «hello world» sera présente dans le fichier Example.txt. L'option append: true consiste à ajouter des données au fichier. Si cette option n'est pas spécifiée, le fichier sera écrasé chaque fois que des données sont écrites dans le fichier.
Vérification pour voir si un fichier existe
Pour vérifier si un fichier existe, le clojure.java.io.fileLa classe peut être utilisée pour vérifier l'existence d'un fichier. Voici un exemple qui montre comment cela peut être accompli.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(println (.exists (clojure.java.io/file "Example.txt"))))
(Example)
Si le fichier Example.txt existe, la sortie sera vraie.
Lecture depuis la console
Pour lire les données de la console, le read-lineinstruction peut être utilisée. Voici un exemple qui montre comment cela peut être utilisé.
Si vous entrez la commande (read-line) dans la fenêtre REPL, vous aurez la possibilité de saisir une entrée dans la fenêtre de la console.
user->(read-line)
Hello World
Le code ci-dessus produira la sortie suivante.
“Hello World”