Я хочу написать простую программу для воспроизведения аудиоклипов. Я хочу развернуть его на Windows, Linux и MacOSX. То, что все еще озадачивает меня, - это расположение файла конфигурации и папки со звуковыми клипами в разных операционных системах. Я Clojure noob. Я знаю, что Common Lisp имеет специальную библиотеку переносимости файловой системы CL-FAD. Как это делается в закрытии? Как написать переносимую программу Clojure с различными соглашениями с файловой системой в разных системах?Переносимость файловой системы Clojure
ответ
Вы можете использовать clojure.java.io/file
для создания путей в (нейтральной) платформе, как и с os.path.join
в Python или File.join
в Ruby.
(require '[clojure.java.io :as io])
;; On Linux
(def home "/home/jbm")
(io/file home "media" "music") ;=> #<File /home/jbm/media/music>
;; On Windows
(def home "c:\\home\\jbm")
(io/file home "media" "music") ;=> #<File c:\home\jbm\media\music>
clojure.java.io/file
возвращает java.io.File
. Если вам нужно, чтобы вернуться в строку, вы всегда можете использовать .getPath
:
(-> home
(io/file "media" "music")
(.getPath))
;=> /home/jbm/media/music"
ли что-то, что вы имели в виду?
В дополнение к clojure.java.io
(и, конечно же, методы на java.io.File
), raynes.fs
- популярная файловая система.
Чтобы вернуть строку, вы также можете просто использовать '(str path)' –
Обратите внимание, что Windows отлично поддерживает прямую косую черту как разделитель путей (что является удивительным, потому что таким образом вам не нужно постоянно сбрасывать обратную косую черту).
Единственная существенная сложность, с которой вы столкнетесь, заключается в том, что «стандартные» местоположения (домашняя папка и т. Д.) Различаются в системах Windows и UNIX. Поэтому вам нужно получить их из свойств системы (см. Метод getProperty
в http://docs.oracle.com/javase/7/docs/api/java/lang/System.html).
Для подхода, не зависящего от платформы, вы можете найти канонический путь от пути к проекту и затем присоединиться к нему с именем файла.
(:require [clojure.java.io :as io :refer [file]]))
(defn file-dir
"Returns canonical path of a given path"
[path]
(.getCanonicalPath (io/file path)))
(-> "./resources" ;; relative
(file-dir)
(io/file "filename.txt")) ;;=> /path/to/project/resources/filename.txt
- 1. Тестирование кода файловой системы
- 2. StlSoft - как использовать функциональность своей файловой системы?
- 3. Объяснение boost :: формат файловой системы файловой системы в C++
- 4. получить тип файловой системы с использованием файловой системы boost
- 5. Основы реализации файловой системы
- 6. создать дескриптор файловой системы?
- 7. экспериментальная ошибка файловой системы
- 8. Эффективный поиск файловой системы
- 9. Размер блока файловой системы
- 10. Ошибка файловой системы (12)
- 11. Инструменты тестирования файловой системы
- 12. UFT Проверка файловой системы
- 13. Параметры масштабируемости файловой системы
- 14. анализ файловой системы
- 15. Время файловой системы NTFS
- 16. Чтение файловой системы FAT16
- 17. Обход файловой системы fat32
- 18. Задача файловой системы SSIS
- 19. дизайн виртуальной файловой системы
- 20. Объяснение файловой системы hadoop
- 21. Архитектура файловой системы Linux
- 22. Индексирование файловой системы
- 23. Маршрутизация файловой системы Joomla
- 24. Разрешения файловой системы Sharepoint
- 25. Идентификация файловой системы? C#
- 26. Запрос файловой системы
- 27. Docker.IO Конфигурация файловой системы
- 28. Реализация базовой файловой системы
- 29. Оптимизация файловой системы (ext3)
- 30. Интервью - дизайн файловой системы
Посмотрите http://richhickey.github.io/clojure/clojure.java.io-api.html – Chiron
@Chiron: http://clojure.github.io/clojure/clojure.java .io-api.html - лучший URL. clojure.github.io - это место, где размещаются текущие документы, а версия в аккаунте Rich Hickey - от версии 1.1. – Chuck