我正在尝试使用clojure创建一个简单的android应用程序,它可以读取csv文件,并允许用户对数据进行类似正则表达式的搜索。问题是,当我尝试读取数据时,会出现以下异常。
IllegalArgumentException没有实现方法::使协议的读取器:#'clojure。JAVA为类找到io/IOFactory:nil clojure。core/-cache协议fn(core_deftype.clj:554)
我的研究表明,这通常意味着Clojure正在寻找某样东西,但找不到。但是我不知道它可能是什么或者为什么。
下面是引发异常的Clojure代码:
(ns org.stuff.events.data
(:require [clojure.java.io :as io]))
(def data-file (io/file (io/resource "kamus.csv")))
(defn read-data [_]
(slurp data-file))
据我所知,“kamus.csv”在正确的目录中,所以我不认为是这样。如果我在repl中计算data-file,我得到nil
。
有人有办法解决我的问题吗?
以下是其他项目文件,仅供参考:
主要的clj:
(ns org.stuff.events.main
(:require [neko.activity :refer [defactivity set-content-view!]]
[neko.debug :refer [*a]]
[neko.notify :refer [toast]]
[neko.ui :refer [config]]
[neko.resource :as res]
[neko.find-view :refer [find-view]]
[neko.threading :refer [on-ui]]
[org.stuff.events.data :as data]
[clojure.data.csv :as csv])
(:import android.widget.TextView))
;; We execute this function to import all subclasses of R class. This gives us
;; access to all application resources.
(res/import-all)
(def listing (atom ""))
(defn get-elem [activity id]
(str (.getText (find-view activity id))))
(defn set-elem [activity id s]
(on-ui (config (find-view activity id) :text s)))
(defn add-event [activity]
(swap! listing str (get-elem activity ::search-box) "\n")
(set-elem activity ::results @listing))
(defn main-layout [activity]
[:linear-layout {:orientation :vertical}
[:linear-layout {:orientation :horizontal
:layout-height :wrap}
[:edit-text {:id ::search-box
:hint "cari..."
:layout-width :fill}]
[:button {:text "Cari"
:on-click (fn [_] (add-event (*a)))}]]
[:text-view {:text @listing
:id ::results}]])
;; This is how an Activity is defined. We create one and specify its onCreate
;; method. Inside we create a user interface that consists of an edit and a
;; button. We also give set callback to the button.
(defactivity org.stuff.events.MainActivity
:key :main
(onCreate [this bundle]
(.superOnCreate this bundle)
(neko.debug/keep-screen-on this)
(on-ui
(set-content-view! (*a) (main-layout (*a))))))
project.csj:
(defproject events/events "0.1.0-SNAPSHOT"
:description "FIXME: Android project description"
:url "http://example.com/FIXME"
:license {:name "Eclipse Public License"
:url "http://www.eclipse.org/legal/epl-v10.html"}
:global-vars {*warn-on-reflection* true}
:source-paths ["src/clojure" "src"]
:res-path "src/main/resources"
:java-source-paths ["src/java"]
:javac-options ["-target" "1.6" "-source" "1.6" "-Xlint:-options"]
:plugins [[lein-droid "0.4.3"]]
:dependencies [[org.clojure-android/clojure "1.7.0-r2"]
[neko/neko "4.0.0-alpha5"]
[org.clojure/data.csv "0.1.3"] ]
:profiles {:default [:dev]
:dev
[:android-common :android-user
{:dependencies [[org.clojure/tools.nrepl "0.2.10"]]
:target-path "target/debug"
:android {:aot :all-with-unused
:rename-manifest-package "org.stuff.events.debug"
:manifest-options {:app-name "EventsListing (debug)"}}}]
:release
[:android-common
{:target-path "target/release"
:android
{;; :keystore-path "/home/user/.android/private.keystore"
;; :key-alias "mykeyalias"
;; :sigalg "MD5withRSA"
:ignore-log-priority [:debug :verbose]
:aot :all
:build-type :release}}]}
:android {;; Specify the path to the Android SDK directory.
:sdk-path "C:\\Users\\fhard\\AppData\\Local\\Android\\sdk"
;; Try increasing this value if dexer fails with
;; OutOfMemoryException. Set the value according to your
;; available RAM.
:dex-opts ["-JXmx4096M" "--incremental"]
:target-version "15"
:aot-exclude-ns ["clojure.parallel" "clojure.core.reducers"
"cider.nrepl" "cider-nrepl.plugin"
"cider.nrepl.middleware.util.java.parser"
#"cljs-tooling\..+"]})
从例外情况来看,根据这个答案,看起来您的路径是错误的。当我试图用io/resource打开一个文件时,即使文件确实在那里,我也会收到与您相同的错误。io/reader可能更易于使用,因为它将强制您的输入到reader对象中。另一方面,io/resource返回一个URL,其路径一旦在jar中发生变化,就会发生变化。看看这个。
问题内容: 我想读取.bak文件,这些文件是ms sql数据库的备份文件。现在,我正在研究如何使用Sql Mngmnt studio读取这些文件。请帮帮我。谢谢 问题答案: 您可以使用SQL Management Studio将.BAK文件还原到临时数据库并读取它们! 这里的一些指针
问题内容: 我一周前开始使用Java,现在我想在窗口中插入一个图像。无论我尝试什么,我都会在Eclipse中继续使用它: javax.imageio.IIOException:无法读取输入文件! } 我认为代码很容易解释。我试图解决这个问题 我想做的是一个桌面程序,我的源代码存储如下:training / src / graphics / Window training / src / src /
问题内容: 我在做一些真正愚蠢的事情时遇到了一个大问题。也就是说,打开流到我的META-INF文件夹中的资源文件。我正在使用jar工具并执行以下操作: 我只是一个空!该项目是使用maven构建的,xsd文件最终位于META-INF文件夹中,但仍然无法使用。 我不理解的是背后的理论?ClassLoader如何在文件系统中执行查找?如何获得文件? 问题答案: 尝试删除第一个斜杠: 如果要在对象上调用方
问题内容: package main &{0xc42000a240}无 0无 没有错误,也没有数据。 从系统头文件读取此路径。 系统:macOS el capiton,go版本go1.8 darwin / amd64 我的最终目标是将此文件读入结构体中。此文件包含系统用户信息。 我可以这样做吗? 我会继续尝试… 问题答案: 您可以为此使用函数: 原始代码中的问题是读到的 长度为0个字节。由于阅读器
问题内容: 我对Logstash有一个奇怪的问题。我正在提供一个日志文件作为logstash的输入。配置如下: 我已经在运行elasticsearch服务器并验证是否正在使用curl查询接收数据。问题是,当输入为时,没有数据被接收。但是,如果我将输入更改为以下内容,它将顺利发送所有输入数据: 我不明白我要去哪里错了。有人可以看看这个吗? 问题答案: 您应该在文件部分下设置start_positio
我正在尝试从com包中的CSV文件中读取值。实例但当我使用以下语法运行代码时: 上面写着: java.io.FileNotFoundException: Dataset.csv 我也尝试过使用: 仍然不工作。任何帮助都会很有帮助。谢谢