Java 使用clojure的slurping/proc/cpuinfo

Java 使用clojure的slurping/proc/cpuinfo,java,linux,clojure,slurp,Java,Linux,Clojure,Slurp,(Clojure新手) 在我的linux机器上,slurping/proc/cpuinfo会引发错误: user=> (slurp "/proc/cpuinfo") java.io.IOException: Invalid argument (NO_SOURCE_FILE:0) 有人知道为什么吗?(在Java中,/proc文件系统是某种二等公民吗?) 编辑:以下代码改编自nakkaya.com,工作完美: (with-open [rdr (java.io.BufferedReader.

(Clojure新手)

在我的linux机器上,slurping
/proc/cpuinfo
会引发错误:

user=> (slurp "/proc/cpuinfo")
java.io.IOException: Invalid argument (NO_SOURCE_FILE:0)
有人知道为什么吗?(在Java中,/proc文件系统是某种二等公民吗?)

编辑:以下代码改编自nakkaya.com,工作完美:

(with-open [rdr (java.io.BufferedReader. 
             (java.io.FileReader. "/proc/cpuinfo"))]
   (let [seq (line-seq rdr)]
   (apply print seq)))

我想知道为什么会有这种差异?

问题是java无法在/proc上打开DataInputStream,因此slurp函数在这里无法帮助您,抱歉:(

/proc/cpuinfo有点奇怪,因为它的文件大小为零,读取时会产生字节。这会打乱更智能的java文件处理类

ls -l /proc/cpuinfo
-r--r--r-- 1 root root 0 2012-01-20 00:10 /proc/cpuinfo
查看此线程了解更多信息


您必须使用文件阅读器打开它。我将在稍后添加一个示例。

我在/proc中遇到了类似的文件问题。解决方案很简单:

(slurp (java.io.FileReader. "/proc/cpuinfo"))

就java而言,/proc应该像其他任何目录一样,是一个包含文件和子目录的目录。还有,为什么
slurp
只需要输出一个字符串,而不需要以任何方式解析它时就要使用
DataInputStream
在源代码处,您将看到它最终在引擎盖下调用InputStreamReader,这对我来说似乎是合理的。请看@AdrianMouat,请不要链接到richhickey/clojure repo,它已经过时了。请改用clojure/clojure。