Clojure中的内存中文件类型对象

时间:2013-04-14 21:55:06

标签: clojure java-io

我刚刚开始使用Clojure,并希望调用一个Java方法,该方法将读取的输入文件和要写入的输出文件作为参数。两者似乎都是java.io.File类型。我想要调用的方法是在这个类中“解析”:

http://htmltolatex.sourceforge.net/javadoc/cz/kebrt/html2latex/Parser.html

但是,因为我将重复调用该方法,所以我更喜欢使用内存中的对象而不是磁盘上的文件。

我已经成功加载了Parser类的实例:

(def my_parser (cz.kebrt.html2latex.Parser.))

我相信我已成功创建了一个类似内存文件的对象,可以使用此命令从中读取:

(def input-object (java.io.StringBufferInputStream. "this is a test"))

但是,我应该通过哪种类型的文件来捕获输出? (为了完整起见,我应该提一下,这个输出文件首先用于构造ParserHandler的一个实例,然后传递给上面创建的解析器。http://htmltolatex.sourceforge.net/javadoc/cz/kebrt/html2latex/ParserHandler.html

感谢您的任何建议。

1 个答案:

答案 0 :(得分:3)

我很确定这个(设计糟糕的)API适用于旧版本的软件,它不允许你想做什么。 (即你不能创建一个内容在内存中的File。这不是该类的用途。)

latest version似乎有一个构造函数,您可以传递java.io.FileString。后者应该是你所追求的。

编辑:我认为为你清理一些东西可能会很好,因为你似乎是来自Python背景(假设你反复使用术语“类似文件”)。 java.io.File是一个误导性的名称。它实际上更像是一条路。例如,如果要检查文件是否存在,则执行(.exists (java.io.File. "my/path"))File也可以是目录。我知道这是愚蠢的,但是嘿,这是java。 (如果您想了解更多信息,请查看here)。这个Parser类应该提供的是能够传递java.io.Reader,这就像是对一系列字符的抽象视图。在内部,他们将String选项和File选项都转换为Reader,因此它的设计非常糟糕,他们不仅接受读者而且切断了中间人。