2012-07-10 84 views
3

我想讓用戶上傳表單中的文件並提交後,打開文件並讀取每一行,以便從中獲取信息以存儲在數據庫中。到目前爲止,我只能創建一個對象並從中提取字節。Grails如何解析文本文件?

def uploadedFile = request.getFile('name_of_file') 

這讓我一個commonsMultipartFile,但我不知道如果我需要將文件流到緩衝區,或將文件保存到一個臨時文件夾,然後嘗試打開它的方式。

uploadedFile.getbytes()將給我一個數組[71,101,110,101,114,97,108,13,10,45,45,45,45,45,45,13,10,83,116 ....]這不是我可以做任何事情的形式。

我需要能夠打開文件並逐行讀取它。我可以用commonsMultipartFile來做到這一點 - 它的選擇似乎有限。

回答

5

CommonsMultipartFile具有的getInputStream()方法,它會返回一個InputStream上,你可以調用任何Groovy的增強功能,例如:

request.getFile('name_of_file').inputStream.eachLine { line -> 
    /* Parsing logic */ 
} 
+0

要正確處理編碼,您應該使用''CommonsMultipartFile''來獲取字符集' getContentType'並將其傳遞給'InputStream.eachLine'。 v未found'任何方法(; Ljava /郎/對象Ljava /郎/對象):'類 java.lang.NoSuchMethodError 消息 grails.RunController $ _closure1_closure3: – ataylor 2012-07-10 14:14:55

+0

@ schmolly159我使用你的代碼得到這個錯誤建議?謝謝。 – Universitas 2012-07-10 14:39:15

+0

@Universitas不知道什麼是不工作。我嘗試了現有項目中的代碼,它對我有用。你總是可以嘗試'grails clean'並重新啓動應用程序。 – schmolly159 2012-07-10 15:35:37

0

將其保存爲第一個目錄。然後解析並做你需要做的事情。

+0

你如何設置?我嘗試了'new File(「C:\ Documents and Settings \\ My Documents \\ NetBeansProjects \\ Grails \\ resource \\ test.txt」),但它不是工作 – Universitas 2012-07-10 14:00:03

+0

我相信該文件將在臨時目錄中,直到您將其明確保存到永久位置。然後你可以閱讀它。 – vector 2012-07-10 14:05:37

+0

我沒有看到一個臨時目錄。我相信你必須使用'transferTo'明確地將文件放在一個目錄中。我創建了一個名爲resources的目錄,並在其中放置了一個測試文件。我無法打開該文件並從中讀取數據。有關如何做到這一點的任何建議?我需要知道你是如何「閱讀」的。謝謝。 – Universitas 2012-07-10 14:09:49