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”