Clojure:
การอ่านไฟล์ข้อความ
วิธีการ:
;; อ่านไฟล์ทั้งหมดเป็นสตริง
(slurp "example.txt")
;; ผลลัพธ์: "สวัสดี, นี่คือเนื้อหาไฟล์ของคุณ!"
;; อ่านไฟล์เป็นบรรทัดๆ
(with-open [reader (clojure.java.io/reader "example.txt")]
(doseq [line (line-seq reader)]
(println line)))
;; ผลลัพธ์:
;; สวัสดี,
;; นี่คือ
;; เนื้อหาไฟล์ของคุณ!
ลงลึก
โดยทั่วไป, การอ่านไฟล์ในภาษาโปรแกรมมิ่งถือว่าเป็นงานที่ต้องเขียนมากมีขั้นตอนมากมายในการจัดการข้อผิดพลาดและทรัพยากร ใน Clojure, คุณได้รับประโยชน์จากฟังก์ชัน slurp
, บรรทัดเดียวที่สวยงามเพื่อคว้าเนื้อหาไฟล์ทั้งหมด สำหรับการอ่านแบบบรรทัดต่อบรรทัด, line-seq
ร่วมกับ with-open
ช่วยให้มั่นใจได้ว่าการจัดการไฟล์เป็นไปอย่างมีประสิทธิภาพและปลอดภัย เป็นที่ควรกล่าวถึงด้วยว่าแม้ slurp
จะสะดวก แต่ไม่เหมาะกับไฟล์ขนาดใหญ่เนื่องจากข้อจำกัดด้านหน่วยความจำ นั่นคือเมื่อ line-seq
โดดเด่น, เนื่องจากมันอ่านไฟล์อย่างเฉื่อยชา, บรรทัดต่อบรรทัด
ทางเลือกอื่นๆ ในการอ่านไฟล์ใน Clojure รวมถึงการใช้ clojure.java.io/file
กับฟังก์ชันเช่น reader
และโครงสร้างเช่น with-open
เพื่อจัดการจับไฟล์ด้วยตัวเอง การตัดสินใจที่นี่คือระหว่างการใช้งานง่าย (slurp
) กับการควบคุมอย่างละเอียดประกอบด้วยความปลอดภัยทรัพยากร (with-open
และ reader
)
ในทางของการนำไปใช้งาน, วิธีการของ Clojure มีพื้นฐานมาจากคลาส IO ของ Java, ดังนั้นเมื่อคุณกำลังจัดการกับไฟล์ใน Clojure, คุณกำลังจัดการกับคลังสมบัติที่ถูกทดสอบอย่างดีของ Java, ที่ถูกห่อหุ้มในรูปแบบการทำงานแบบฟังก์ชัน ควรเฝ้าระวังทรัพยากรเสมอ: ไฟล์ที่เปิดใช้งานใช้จับมือและหน่วยความจำ, ดังนั้นการจัดการไฟล์อย่างเหมาะสมเป็นนิสัยที่ดี
ดูเพิ่มเติม
- ClojureDocs สำหรับ
slurp
: https://clojuredocs.org/clojure.core/slurp - ClojureDocs สำหรับ
line-seq
: https://clojuredocs.org/clojure.core/line-seq - การทำงานร่วมกันของ Java ใน Clojure: https://clojure.org/reference/java_interop
- การทำงานกับไฟล์ใน Clojure (Practical.li): https://practical.li/clojure/working-with-files.html