A filesystem & path toolset for Clojure
The purpose of this library:
- work with paths (creating and manipulating).
- work with the filesystem (files and directories crud and many predicates).
- IO (clojure.java.io implementation for paths and other utilities, and reexports all existing API for convencience).
See the API documentation for more detailed information.
funcool/datoteka
{:git/tag "4.0.0"
:git/sha "3372f3a"
:git/url "https://github.com/funcool/datoteka.git"}
The path and filesystem helper functions are all exposed under the
datoteka.fs
namespace, so let's import it:
(require '[datoteka.fs :as fs])
This library uses JVM NIO, so under the hood, the java.nio.file.Path
is used instead of classical java.io.File
. You have many ways to
create a path instance. The basic one is just using the path
function:
(fs/path "/tmp")
;; => #java.nio/path "/tmp"
As you can observe, the path properly prints with a data reader, so
once you have imported the library, you can use the #java.nio/path "/tmp"
syntax to create paths.
The paths also can be created from a various kind of objects (such as URI, URL, String and seq's):
(fs/path (java.net.URI. "file:///tmp"))
;; => #java.nio/path "/tmp"
(fs/path (java.net.URL. "file:///tmp"))
;; => #java.nio/path "/tmp"
(fs/path ["/tmp" "foo"])
;; => #java.nio/path "/tmp/foo"
The path
function is also variadic, so you can pass multiple
arguments to it:
(fs/path "/tmp" "foo")
;; => #java.nio/path "/tmp/foo"
(fs/path (java.net.URI. "file:///tmp") "foo")
;; => #java.nio/path "/tmp/foo"
And for convenience, you can use the clojure.java.io
api with paths
in the same way as you have done it with java.io.File
:
(require '[clojure.java.io :as io])
(io/reader (fs/path "/etc/inputrc"))
;; => #object[java.io.BufferedReader 0x203dc326 "java.io.BufferedReader@203dc326"]
(subs (slurp (fs/path "/etc/inputrc")) 0 20)
;; => "# do not bell on tab"