Clojure - Arquivo I / O
Clojure fornece vários métodos auxiliares ao trabalhar com E / S. Ele oferece classes mais fáceis para fornecer as seguintes funcionalidades para arquivos.
- Lendo arquivos
- Gravando em arquivos
- Ver se um arquivo é um arquivo ou diretório
Vamos explorar algumas das operações de arquivo que Clojure tem a oferecer.
Lendo o conteúdo de um arquivo como uma string inteira
Se você deseja obter todo o conteúdo do arquivo como uma string, você pode usar o clojure.core.slurpmétodo. O comando slurp abre um leitor em um arquivo e lê todo o seu conteúdo, retornando uma string.
A seguir está um exemplo de como isso pode ser feito.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(def string1 (slurp "Example.txt"))
(println string1))
(Example)
Se o arquivo contiver as seguintes linhas, elas serão impressas como -
line : Example1
line : Example2
Ler o conteúdo de um arquivo uma linha de cada vez
Se você deseja obter todo o conteúdo do arquivo como uma string, uma linha de cada vez, você pode usar o clojure.java.io/readermétodo. A classe clojure.java.io/reader cria um buffer de leitor, que é usado para ler cada linha do arquivo.
A seguir está um exemplo que mostra como isso pode ser feito.
(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 o arquivo contiver as seguintes linhas, elas serão impressas como -
line : Example1
line : Example2
A saída será mostrada como -
["line : Example1" "line : Example2"]
Gravando 'em' arquivos
Se você deseja gravar 'em' arquivos, pode usar o clojure.core.spitcomando para vomitar strings inteiras em arquivos. O comando spit é o oposto do método slurp. Este método abre um arquivo como escritor, grava o conteúdo e fecha o arquivo.
A seguir está um exemplo.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(spit "Example.txt"
"This is a string"))
No exemplo acima, se você ver o conteúdo do arquivo Example.txt, verá o conteúdo de “This is a string”.
Gravando 'em' arquivos uma linha de cada vez
Se você quiser escrever 'em' arquivos uma linha de cada vez, você pode usar o clojure.java.io.writerclasse. A classe clojure.java.io.writer é usada para criar um fluxo de gravador em que bytes de dados são alimentados no fluxo e, subsequentemente, no arquivo.
A seguir está um exemplo que mostra como o comando spit pode ser usado.
(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 o código acima for executado, a linha “hello world” estará presente no arquivo Example.txt. A opção append: true é acrescentar dados ao arquivo. Se esta opção não for especificada, o arquivo será sobrescrito sempre que os dados forem gravados no arquivo.
Verificando se um arquivo existe
Para verificar se existe um arquivo, o clojure.java.io.fileclasse pode ser usada para verificar a existência de um arquivo. A seguir está um exemplo que mostra como isso pode ser feito.
(ns clojure.examples.hello
(:gen-class))
;; This program displays Hello World
(defn Example []
(println (.exists (clojure.java.io/file "Example.txt"))))
(Example)
Se o arquivo Example.txt existir, a saída será verdadeira.
Leitura do console
Para ler os dados do console, o read-linedeclaração pode ser usada. A seguir está um exemplo que mostra como isso pode ser usado.
Se você inserir o comando (linha de leitura) na janela REPL, terá a chance de inserir alguma entrada na janela do console.
user->(read-line)
Hello World
O código acima produzirá a seguinte saída.
“Hello World”