15

私のclojureプロジェクト内に2つのファイルがあります。1つはcljで、もう1つはtxtです。cljファイルからtxtファイルのパス(文字列として)を知る方法はありますか?

がある:

(System/getProperty "user.dir") 

また

(-> (java.io.File. ".") .getAbsolutePath)

しかし、これは現在のディレクトリの場所を示します。cljファイルを含むもの、コードが書かれているもの。しかし、txtファイルのパスを知る方法は?目的は、cljファイルからこのtxtファイルに書き込むことです。

ありがとうございました。

4

4 に答える 4

8

Java、したがってClojureでは、CLASSPATHでファイルを見つけることができます。たとえば、Javaでは、log4j.propertiesなどをCLASSPATHの先頭(たとえば、classesディレクトリ)に配置するのが一般的です。その後、Clojure(またはJava)コードで次のコマンドを使用してファイルを参照できます。

(java.io.File. "log4j.properties")

Leiningenでアプリを使用して実行していますか?もしそうなら、あなたはトップレベルでディレクトリを作成し、そこにファイルを置くことができます。たとえば、構成ファイルがある場合は、プロパティファイルを含む「conf」ディレクトリを作成できます。

my-lein-proj$ ls
conf  doc  project.clj  README.md  src  target  test

myproj.confファイルをconfディレクトリーに置き、それからClojureコードで読み取りたいとします。次に、次のことを実行できます。

(slurp "conf/myproj.conf")
于 2013-02-24T14:13:31.373 に答える
3

Clojureライブラリのlocal-fileを使用すると、現在のプロジェクトのディレクトリをで取得できますlocal-file/project-dir。アクセスしたいファイルがプロジェクトのどこにあるかを知っている限り、この方法でそれを見つけることができるはずです。

于 2013-02-24T20:51:16.730 に答える
1

これにより、現在のcljファイル、つまりこのコードが記述されている場所がわかります。

いいえ、そうではありません。現在のディレクトリを示します。

現在のディレクトリにないclojureスクリプトを実行できることを考慮しましたか?

于 2013-02-24T10:06:21.070 に答える
0

ファイル構造が次のようなものである場合:

構成| src | ターゲット| テスト

configディレクトリ内にconfigがあります。この場合、そのjava.configを想定し、srcディレクトリのcore.clj内でこのファイルを読み取ろうとしている場合は、clojure.java.io/readerメソッドも使用できます

例えば:

(clojure.java.io/reader "config/java.config")

replで以下のコマンドを実行して、ファイルの内容を確認できます。

(slurp (clojure.java.io/reader "config/java.config")

ファイルの内容を1行ずつ読み取ることに興味がある場合は、上記の関数をwith-openメソッドと組み合わせて、1行ずつ読み取ります。

(with-open [word (clojure.java.io/reader "config/java.config")]
  (loop [c (.read word)]
    (if (not= c -1)
      (do
        (print (char c))
        (recur (.read word))))))
于 2021-04-30T12:54:20.480 に答える