Clojure - Tệp I / O

Clojure cung cấp một số phương thức trợ giúp khi làm việc với I / O. Nó cung cấp các lớp dễ dàng hơn để cung cấp các chức năng sau cho tệp.

  • Đọc tệp
  • Ghi vào tệp
  • Xem tệp là tệp hay thư mục

Hãy cùng khám phá một số thao tác tệp mà Clojure cung cấp.

Đọc nội dung của tệp dưới dạng toàn bộ chuỗi

Nếu bạn muốn nhận toàn bộ nội dung của tệp dưới dạng chuỗi, bạn có thể sử dụng clojure.core.slurpphương pháp. Lệnh slurp mở một trình đọc trên một tệp và đọc tất cả nội dung của nó, trả về một chuỗi.

Sau đây là một ví dụ về cách điều này có thể được thực hiện.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (def string1 (slurp "Example.txt"))
   (println string1))
(Example)

Nếu tệp chứa các dòng sau, chúng sẽ được in dưới dạng:

line : Example1
line : Example2

Đọc nội dung của tệp một dòng tại một thời điểm

Nếu bạn muốn nhận toàn bộ nội dung của tệp dưới dạng chuỗi một dòng tại một thời điểm, bạn có thể sử dụng clojure.java.io/readerphương pháp. Lớp clojure.java.io/reader tạo bộ đệm trình đọc, được sử dụng để đọc từng dòng của tệp.

Sau đây là một ví dụ cho thấy cách này có thể được thực hiện.

(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)

Nếu tệp chứa các dòng sau, chúng sẽ được in dưới dạng:

line : Example1
line : Example2

Đầu ra sẽ được hiển thị là -

["line : Example1" "line : Example2"]

Ghi 'vào' Tệp

Nếu bạn muốn ghi tệp 'vào', bạn có thể sử dụng clojure.core.spitlệnh để phun toàn bộ chuỗi vào tệp. Lệnh nhổ là ngược lại với phương pháp slurp. Phương pháp này mở một tệp với tư cách người viết, ghi nội dung, sau đó đóng tệp.

Sau đây là một ví dụ.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (spit "Example.txt"
      "This is a string"))

Trong ví dụ trên, nếu bạn thấy nội dung của tệp example.txt, bạn sẽ thấy nội dung của “Đây là một chuỗi”.

Viết 'thành' tệp một dòng tại một thời điểm

Nếu bạn muốn ghi các tệp 'vào' từng dòng một, bạn có thể sử dụng clojure.java.io.writerlớp học. Lớp clojure.java.io.writer được sử dụng để tạo luồng người viết, trong đó các byte dữ liệu được đưa vào luồng và sau đó vào tệp.

Sau đây là một ví dụ cho thấy cách sử dụng lệnh nhổ.

(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)

Khi đoạn mã trên được thực thi, dòng “hello world” sẽ xuất hiện trong tệp Example.txt. Tùy chọn append: true là để nối dữ liệu vào tệp. Nếu tùy chọn này không được chỉ định, thì tệp sẽ bị ghi đè bất cứ khi nào dữ liệu được ghi vào tệp.

Kiểm tra để xem nếu tệp tồn tại

Để kiểm tra xem tệp có tồn tại hay không, clojure.java.io.filelớp có thể được sử dụng để kiểm tra sự tồn tại của một tệp. Sau đây là một ví dụ cho thấy điều này có thể được thực hiện như thế nào.

(ns clojure.examples.hello
   (:gen-class))

;; This program displays Hello World
(defn Example []
   (println (.exists (clojure.java.io/file "Example.txt"))))
(Example)

Nếu tệp Example.txt tồn tại, kết quả đầu ra sẽ là true.

Đọc từ Bảng điều khiển

Để đọc dữ liệu từ bảng điều khiển, read-linecâu lệnh có thể được sử dụng. Sau đây là một ví dụ cho thấy cách này có thể được sử dụng.

Nếu bạn nhập lệnh (read-line) trong cửa sổ REPL, bạn sẽ có cơ hội nhập một số đầu vào trong cửa sổ bảng điều khiển.

user->(read-line)
Hello World

Đoạn mã trên sẽ tạo ra kết quả sau.

“Hello World”