2015-04-17 123 views
6

我想用Coldfusion和JavaLibrary解析CSV文件。我找到了一些例子,但似乎ColdFusion找不到Jar-File。ColdFusion/Java類未找到異常

這是我的代碼:

<cfset t01= getTickCount()> 
    <cfscript> 
     fileReader = createobject("java","java.io.FileReader"); 
     fileReader.init("C:\Dev\files.csv"); 
     csvReader = createObject("java","au.com.bytecode.opencsv.CSVReader"); 
     csvReader.init(fileReader, ","); 
    </cfscript> 

<cfset t02= getTickCount()> 
<cfset ArrayData = csvReader.readAll()> 
<cfset t03= getTickCount()> 

<cfoutput> 
    Process Data: #t02 - t01# ms 
    Display Dump: #t03 - t02# ms 
    <cfdump var="ArrayData"><cfabort /> 
</cfoutput> 

,這是的ErrorMessage:

java.lang.ClassNotFoundException: au.com.bytecode.opencsv.CSVReader 
    at coldfusion.bootstrap.BootstrapClassLoader.loadClass(BootstrapClassLoader.java:235) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248).....more Stack blabla...... 

我使用opencsv Library。 的jar文件是在以下文件夾:

wwwroot文件/ WEB-INF/lib目錄

我也服務器多次重新啓動。

感謝您的幫助!

回答

2

我下載了opencsv jar文件,看起來你可能會錯誤地引用它。

取而代之的是:

csvReader = createObject("java","au.com.bytecode.opencsv.CSVReader"); 

試試這個:

csvReader = createObject("java","com.opencsv.CSVReader"); 

我一直在尋找的最新版本,3.3,但我認爲沒有改變。

從評論(我的假設是不正確的)

由於利在評論中指出,舊版本的opencsv庫比使用最新版本做了不同的軟件包名稱。舊版本使用au.com.bytecode.opencsv,但新版本使用com.opencsv

+3

@noah - 我懷疑Miguel-F擊中了頭部。看看源代碼,舊版本(例如2.2)使用了不同的包名稱,即'au.com.bytecode.opencsv'。在[新版本](http://sourceforge.net/p/opencsv/source/ci/release-3.2/tree/examples/AddressExample.java#l1)中,軟件包名稱已切換爲「com.opencsv」。您可能正在使用新的jar包之一,但使用舊的包名稱。因此爲什麼沒有找到。以上應該解決問題。 – Leigh

+0

如何在「ram:///」中運行相同的代碼片段?我被困住了。似乎fileReader無法處理內存中的路徑。 – 84RR1573R