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”