我刚刚开始使用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)
感谢您的任何建议。
答案 0 :(得分:3)
我很确定这个(设计糟糕的)API适用于旧版本的软件,它不允许你想做什么。 (即你不能创建一个内容在内存中的File
。这不是该类的用途。)
latest version似乎有一个构造函数,您可以传递java.io.File
或String
。后者应该是你所追求的。
编辑:我认为为你清理一些东西可能会很好,因为你似乎是来自Python背景(假设你反复使用术语“类似文件”)。 java.io.File
是一个误导性的名称。它实际上更像是一条路。例如,如果要检查文件是否存在,则执行(.exists (java.io.File. "my/path"))
。 File
也可以是目录。我知道这是愚蠢的,但是嘿,这是java。 (如果您想了解更多信息,请查看here)。这个Parser类应该提供的是能够传递java.io.Reader
,这就像是对一系列字符的抽象视图。在内部,他们将String
选项和File
选项都转换为Reader
,因此它的设计非常糟糕,他们不仅接受读者而且切断了中间人。