3

我刚刚开始使用 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 )

谢谢你的任何建议。

4

1 回答 1

3

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

最新版本似乎有一个构造函数,您可以将 ajava.io.File或 a传递给该构造函数String。后者应该是你所追求的。

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

于 2013-04-14T22:12:45.160 回答