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

标签 clojure java-io

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

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)

感谢您的任何建议。

最佳答案

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

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

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

关于clojure - Clojure 中的内存文件类型对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16004828/

相关文章:

Clojure:基于条件重复值的惯用方法

syntax - 有没有什么程序可以添加Clojure的括号?

text - 在 clojure 中读取文件并忽略第一行?

java - 为什么我的代码只读取java中.txt文件中的第一列数字

java - 使用 ObjectInputStream 从文件中读取许多 ArrayList 对象?

java - 写入文件

functional-programming - defmulti vs defmethod 有什么区别?在 clojure 中

clojure - 为什么(套用或[真假])在Clojure中不起作用?

java - 如何理解java Path.toString()方法

java - 来自 FileOutputStream.close() 的设备的不适当 ioctl