Skip to content

monkey-projects/clompress

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📁 clompress

Clojars Project

Clompress is easy to use library for working with archives, compression and decompression in Clojure. Currently acts like wrapper for library Apache Commons Compress

Features

Directories are readed recursively.

Supported archives

  • TAR "tar"
  • ZIP "zip"

Supported compressions

  • BZIP2
  • GZIP
  • DEFLATE
  • LZ4 (BLOCK, FRAMED)
  • LZMA
  • XZ

For available compressions:

clompress.compression/available-compressions

Installation

Lein/Boot

[com.monkeyprojects/clompress "0.1.1"]

Clojure CLI/deps.edn

com.monkeyprojects/clompress {:mvn/version "0.1.1"}

Examples

Creating archive without compression

(clompress/archive {
	:output-stream (clojure.java.io/output-stream "my-archive.tar")
	:archive-type "tar"} ; for zip set :archive-type "zip"
	"directory1/" "directory2/file1.txt" "file2.txt")

Creating archive with compression bzip2

(clompress/archive {
	:output-stream (clojure.java.io/output-stream "my-archive.tar.bz2")
	:compression "bzip2"
	:archive-type "tar"}
	"directory1/" "directory2/file1.txt" "file2.txt")

Compressing file

(clompress.compression/compress
	(clojure.java.io/input-stream "file-to-compress.txt")
	(clojure.java.io/output-stream "compressed-file.txt.gz")
	"gz")

Decompressing file

(clompress.compression/decompress
	(clojure.java.io/input-stream "compressed-file.txt.gz")
	(clojure.java.io/output-stream "decompressed-file.txt")
	"gz")

Compressing string

(with-open [input-stream (java.io.ByteArrayInputStream.
                           (.getBytes "test-data"))]
  (with-open [output-stream (java.io.ByteArrayOutputStream.)]
    (clompress.compression/compress input-stream output-stream "bzip2")))

Decompressing string

(with-open [input-stream (java.io.ByteArrayInputStream.
                           (.getBytes compressed-string))]
  (with-open [output-stream (java.io.ByteArrayOutputStream.)]
    (clompress.compression/decompress input-stream output-stream "bzip2")
		(.toString output-stream)))

Hooks

In the archiver options, you can pass to additional hook functions to influence the way files are added to the archives.

  • entry-name-resolver takes the input path and returns the path to use in the archive
  • before-add takes the ArchiveEntry object an allows you to do some modifications to it before it is put into the archive.

The before-add is especially useful to set file permissions on the archive entry, since this information is system dependent and not stored automatically.

License

Clompress is licensed under MIT license.

About

Clompress is easy to use library for working with archives, compression and decompression in Clojure.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Clojure 100.0%