Clojure - E / S de archivos
Clojure proporciona una serie de métodos auxiliares cuando se trabaja con E / S. Ofrece clases más sencillas para proporcionar las siguientes funcionalidades para archivos.
- Leer archivos
- Escribir en archivos
- Ver si un archivo es un archivo o un directorio
Exploremos algunas de las operaciones de archivo que ofrece Clojure.
Leer el contenido de un archivo como una cadena completa
Si desea obtener todo el contenido del archivo como una cadena, puede usar la clojure.core.slurpmétodo. El comando slurp abre un lector en un archivo y lee todo su contenido, devolviendo una cadena.
A continuación se muestra un ejemplo de cómo se puede hacer esto.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(def string1 (slurp "Example.txt"))
(println string1))
(Example)
Si el archivo contiene las siguientes líneas, se imprimirán como:
line : Example1
line : Example2
Leer el contenido de un archivo una línea a la vez
Si desea obtener todo el contenido del archivo como una cadena, una línea a la vez, puede usar la clojure.java.io/readermétodo. La clase clojure.java.io/reader crea un búfer de lectura, que se utiliza para leer cada línea del archivo.
A continuación se muestra un ejemplo que muestra cómo se puede hacer esto.
(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 el archivo contiene las siguientes líneas, se imprimirán como:
line : Example1
line : Example2
La salida se mostrará como -
["line : Example1" "line : Example2"]
Escribir archivos 'en'
Si desea escribir archivos 'en', puede usar el clojure.core.spitcomando para arrojar cadenas enteras en archivos. El comando de escupir es lo opuesto al método de sorber. Este método abre un archivo como escritor, escribe contenido y luego cierra el archivo.
A continuación se muestra un ejemplo.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(spit "Example.txt"
"This is a string"))
En el ejemplo anterior, si ve el contenido del archivo Example.txt, verá el contenido de "Esto es una cadena".
Escribir archivos 'en' una línea a la vez
Si desea escribir archivos 'a' una línea a la vez, puede usar el clojure.java.io.writerclase. La clase clojure.java.io.writer se utiliza para crear un flujo de escritura en el que se introducen bytes de datos en el flujo y, posteriormente, en el archivo.
A continuación se muestra un ejemplo que muestra cómo se puede utilizar el 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)
Cuando se ejecuta el código anterior, la línea "hola mundo" estará presente en el archivo Example.txt. La opción append: true es agregar datos al archivo. Si no se especifica esta opción, el archivo se sobrescribirá siempre que se escriban datos en el archivo.
Comprobación para ver si existe un archivo
Para comprobar si existe un archivo, clojure.java.io.fileLa clase se puede usar para verificar la existencia de un archivo. A continuación se muestra un ejemplo que muestra cómo se puede lograr esto.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(println (.exists (clojure.java.io/file "Example.txt"))))
(Example)
Si existe el archivo Example.txt, la salida será verdadera.
Leyendo desde la consola
Para leer datos de la consola, el read-linese puede utilizar una declaración. A continuación se muestra un ejemplo que muestra cómo se puede utilizar.
Si ingresa el comando (línea de lectura) en la ventana REPL, tendrá la oportunidad de ingresar alguna entrada en la ventana de la consola.
user->(read-line)
Hello World
El código anterior producirá el siguiente resultado.
“Hello World”