首页 > 其他 > 详细

Clojure专题:文件处理

时间:2014-02-23 02:45:28      阅读:414      评论:0      收藏:0      [点我收藏+]

本文翻译自Working with Files and Directories in Clojure

本文介绍使用Clojure的clojure.java.io命名空间下的函数以及JDK相关方法来

操作文件和目录.

版权:This work is licensed under a Creative Commons Attribution 3.0 Unported License (including images & stylesheets). The source is available on Github.


准备

请注意,在下面的例子中,”io”是clojure.java.io命名空间的简写引用.请确保你

的ns宏包含如下代码:


(:require [clojure.java.io :as io])

或者在REPL中加载了:


(require ‘[clojure.java.io :as io])

方法

将文件读到字符串中


(def a-long-string (slurp "foo.txt"))

注意,你可一给slurp函数传递url.请看slurp文档


一行一行的读取文件

假设你想针对文件的每行内容调用my-func函数,并返回结果序列:


(with-open [rdr (io/reader "foo.txt")]
  (doall (map my-func (line-seq rdr))))

doall函数是必须的,因为map函数返回的是个lazy序列.line-seq返回的每行内容

没有是去除了末尾的回车标记的,且空行将返回空字符串.


将字符串写到文件中


(spit "foo.txt"
      "A long
multi-line string.
Bye.")

如果foo.txt文件不存在则会创建,如果存在,将会覆盖其内容.如果想追加内容,

而不是覆盖:


(spit "foo.txt" "file content" :append true)

每次向文件中写一行

假设你想将vector里的内容写到文件中,每个元素一行:


(with-open [wrtr (io/writer "foo.txt")]
  (doseq [i my-vec]
    (.write wrtr (str i "\n"))))

检查文件是否存在


(.exists (io/file "filename.txt"))

判断是否是目录:


(.isDirectory (io/file "path/to/something"))

io/file是java.io.File对象(文件或目录).你能直接调用该对象上的方法,包括:


exists        文件是否存在?
isDirectory   文件还是目录?
getName       获取文件名字
getParent     过去文件所在目录名称
getPath       获取文件全路径
mkdir         创建目录

更多内容前查看java.io.File


获取给定目录下的文件列表和目录列表

对于File对象:


(.listFiles (io/file "path/to/some-dir"))

上面的方法返回File对象序列,如果想返回字符串序列:


(.list (io/file "path/to/some-dir"))

所有的结果都是列表形式的,可使用Clojure中的seq相关函数对其操作.


Clojure专题:文件处理

原文:http://blog.csdn.net/ivan_pig/article/details/19680435

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!