Clojure의 디렉토리에 파일 나열
Clojure의 특정 디렉토리에있는 모든 파일 목록을 어떻게 만들 수 있습니까? Java 호출에 의존해야합니까 아니면 Clojure가이를 기본적으로 처리 할 수 있습니까?
file-seq
기능을 사용하십시오 .
사용 예 :
(def directory (clojure.java.io/file "/path/to/directory"))
(def files (file-seq directory))
(take 10 files)
Clojure는 Java 플랫폼을 수용하도록 설계되었으며 이는 Clojure가 자체 API를 제공하지 않는 영역 중 하나입니다. 즉, Java로 뛰어 들어야하지만 작업해야하는 클래스는 Clojure에서 직접 완벽하게 사용할 수 있습니다.
javadocs에서 읽어야 할 클래스 java.io.File
는 파일 경로 를 나타내는 .
http://docs.oracle.com/javase/6/docs/api/java/io/File.html
.listFiles
인스턴스 메소드는의 (당신이 서열로 사용할 수 있습니다) 배열 반환 File
에 의해 식별되는 디렉토리의 각 항목에 대한 한 - 객체 File
인스턴스를. 이 File
존재 하는지 , 디렉토리 인지 등을 결정하는 다른 유용한 방법 이 있습니다.
예
(ns my-file-utils
(:import java.io.File))
(defn my-ls [d]
(println "Files in " (.getName d))
(doseq [f (.listFiles d)]
(if (.isDirectory f)
(print "d ")
(print "- "))
(println (.getName f))))
;; Usage: (my-ls (File. "."))
파일 객체 생성
의 생성자 File
는 때때로 사용하기에 약간 불편할 수 있으며 (특히 한 번에 많은 경로 세그먼트를 병합 할 때)이 경우 Clojure가 유용한 도우미 함수를 제공합니다 clojure.java.io/file
. 인수로 경로 세그먼트를 문자열 또는 파일로 허용합니다. 세그먼트는 플랫폼의 올바른 경로 구분자로 결합됩니다.
http://clojuredocs.org/clojure_core/clojure.java.io/file
참고 : Clojure는 file-seq
주어진 파일에서 시작하는 파일 계층 구조를 통해 (시퀀스로) preorder walk를 반환하는 함수 도 제공 합니다.
또한 fs 라이브러리를 확인하십시오 .
디렉토리에있는 파일 목록 만 필요하면 추가 종속성을 가져올 가치가 없지만 다음과 같은 유용한 유틸리티 함수가 많이 있습니다.
- 디렉토리 구조 만들기
- 복사, 삭제, 이동
- 권한 확인 및 변경
- 경로 분할 및 정규화
- 임시 파일 및 디렉토리 생성
- 글 로빙
- zip 및 tar 파일 작업
(use 'clojure.java.io)
(-> "/tmp" file .listFiles)
후자의 표현식은 "/ tmp"경로에서 생성 된 파일 객체에서 호출되는 listFiles 메소드에서 반환 된 파일 객체의 배열입니다. 이것은 멋진 글을 쓰는 방법입니다.
(.listFiles (file "/tmp"))
Usually, when we say that we want to list directory, we mean that we want to get file names or paths, so ->
Simplest way to list directory:
(seq (.list (clojure.java.io/file ".")))
If you want to list it recursive, then:
(map #(.getPath %)
(file-seq (clojure.java.io/file ".")))
To make the modified code match the functionality of original sample code you should add the call to get the file names, like this.
(def directory (clojure.java.io/file "/path/to/directory"))
(def files
(for [file (file-seq directory)] (.getName file)))
(take 10 files)
참고URL : https://stackoverflow.com/questions/8566531/listing-files-in-a-directory-in-clojure
'programing tip' 카테고리의 다른 글
자바 스크립트 : 같은 창에서 새 페이지 열기 (0) | 2020.12.14 |
---|---|
요소가 div인지 확인 (0) | 2020.12.14 |
사용하지 않는 함수 인수를 어떻게 표시 할 수 있습니까? (0) | 2020.12.14 |
Jenkins-SCM의 변경 사항을 폴링하도록 Jenkins 구성 (0) | 2020.12.14 |
프록시 뒤의 npm이 상태 403으로 실패합니다. (0) | 2020.12.14 |