Clojure - ไฟล์ I / O

Clojure มีวิธีการช่วยเหลือหลายอย่างเมื่อทำงานกับ I / O มีคลาสที่ง่ายกว่าในการจัดเตรียมฟังก์ชันต่อไปนี้สำหรับไฟล์

  • การอ่านไฟล์
  • การเขียนไฟล์
  • ดูว่าไฟล์เป็นไฟล์หรือไดเร็กทอรี

ลองสำรวจการทำงานของไฟล์ที่ Clojure มีให้

การอ่านเนื้อหาของไฟล์เป็นสตริงทั้งหมด

หากคุณต้องการรับเนื้อหาทั้งหมดของไฟล์เป็นสตริงคุณสามารถใช้ไฟล์ clojure.core.slurpวิธี. คำสั่ง slurp เปิดโปรแกรมอ่านบนไฟล์และอ่านเนื้อหาทั้งหมดโดยส่งคืนสตริง

ต่อไปนี้เป็นตัวอย่างของวิธีการนี้

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

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

หากไฟล์มีบรรทัดต่อไปนี้จะถูกพิมพ์เป็น -

line : Example1
line : Example2

การอ่านเนื้อหาของไฟล์ทีละบรรทัด

หากคุณต้องการรับเนื้อหาทั้งหมดของไฟล์เป็นสตริงทีละบรรทัดคุณสามารถใช้ไฟล์ clojure.java.io/readerวิธี. คลาส clojure.java.io/reader สร้างบัฟเฟอร์ผู้อ่านซึ่งใช้ในการอ่านแต่ละบรรทัดของไฟล์

ต่อไปนี้เป็นตัวอย่างที่แสดงให้เห็นว่าสามารถทำได้อย่างไร

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

หากไฟล์มีบรรทัดต่อไปนี้จะถูกพิมพ์เป็น -

line : Example1
line : Example2

ผลลัพธ์จะแสดงเป็น -

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

การเขียนไฟล์ 'to'

หากคุณต้องการเขียนไฟล์ 'to' คุณสามารถใช้ไฟล์ clojure.core.spitคำสั่งเพื่อพ่นสตริงทั้งหมดลงในไฟล์ คำสั่ง spit ตรงข้ามกับวิธี slurp วิธีนี้เปิดไฟล์ในฐานะนักเขียนเขียนเนื้อหาจากนั้นปิดไฟล์

ต่อไปนี้เป็นตัวอย่าง

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

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

ในตัวอย่างข้างต้นหากคุณเห็นเนื้อหาของไฟล์ Example.txt คุณจะเห็นเนื้อหาของ“ นี่คือสตริง”

การเขียน 'ถึง' ไฟล์ทีละบรรทัด

หากคุณต้องการเขียนไฟล์ 'ถึง' ทีละบรรทัดคุณสามารถใช้ไฟล์ clojure.java.io.writerชั้นเรียน คลาส clojure.java.io.writer ถูกใช้เพื่อสร้างสตรีมนักเขียนโดยไบต์ของข้อมูลจะถูกป้อนเข้าไปในสตรีมและเข้าไปในไฟล์ในภายหลัง

ต่อไปนี้เป็นตัวอย่างที่แสดงวิธีใช้คำสั่ง 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)

เมื่อโค้ดด้านบนถูกเรียกใช้บรรทัด "hello world" จะปรากฏในไฟล์ Example.txt ตัวเลือก append: true คือการผนวกข้อมูลเข้ากับไฟล์ หากไม่ได้ระบุตัวเลือกนี้ไฟล์จะถูกเขียนทับทุกครั้งที่มีการเขียนข้อมูลลงในไฟล์

ตรวจสอบเพื่อดูว่ามีไฟล์อยู่หรือไม่

ในการตรวจสอบว่ามีไฟล์อยู่หรือไม่ไฟล์ clojure.java.io.fileสามารถใช้คลาสเพื่อตรวจสอบการมีอยู่ของไฟล์ ต่อไปนี้เป็นตัวอย่างที่แสดงให้เห็นว่าสามารถทำได้อย่างไร

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

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

หากไฟล์ Example.txt มีอยู่ผลลัพธ์จะเป็นจริง

อ่านจากคอนโซล

ในการอ่านข้อมูลจากคอนโซลไฟล์ read-lineสามารถใช้คำสั่งได้ ต่อไปนี้เป็นตัวอย่างที่แสดงให้เห็นว่าสามารถใช้ได้อย่างไร

หากคุณป้อนคำสั่ง (อ่านบรรทัด) ในหน้าต่าง REPL คุณจะมีโอกาสป้อนข้อมูลบางอย่างในหน้าต่างคอนโซล

user->(read-line)
Hello World

โค้ดด้านบนจะสร้างผลลัพธ์ต่อไปนี้

“Hello World”