2015-05-29 70 views
0

我正在寫一個java應用程序(實際上是一個Struts2 web應用程序),我需要存儲和檢索圖像。我發現將圖像存儲在數據庫(Can I store images in MySQL)並不是一個好主意,並且最好將它們寫在磁盤上的目錄中。存儲在磁盤上的圖像 - 按名稱搜索

在某些時候,我需要訪問其名稱包含特定子字符串的所有圖像。如果我使用數據庫,我會寫這樣的查詢:select .. where name like %my_substring%。我如何使用java文件系統實現相同的功能?當然,我不想加載所有圖像,然後迭代它們以找到具有正確名稱的圖像。

+0

你能解釋一下多一點你怎麼從* .java文件系統需要*? –

+0

我只需要找到所有名稱中包含特定子字符串 –

回答

1

如問題的答案顯着您鏈接狀態:

不要儲存的圖像數據庫。將圖像存儲在目錄和 中存儲對數據庫中圖像的引用

因此,您的查詢將成爲select path where name like %my_substring%(其中path是存儲在圖像參考列的名稱)。

一旦執行查詢,應用程序將根據查詢結果訪問圖像。

+0

聰明的做法,確實如此 –

1

只需使用索引文件處理它。每次將圖像存儲在光盤上時,其名稱也會寫入索引文件中。當你搜索一個子只是搜索索引並加載與名稱的文件中的指標

+0

的文件,您可以更具體地瞭解我應該使用什麼樣的索引文件?到目前爲止,我在覈心java api中找不到任何IndexFile類,但是我在apache lucene庫中找到了一個。這是你指的IndexFile嗎? –

+0

只需在光盤上創建一個.txt文件並在其中寫入imgs的名稱即可。如果您在img標題中搜索子字符串,只需搜索索引文件 – mormod

+0

我不認爲有任何圖書館可以處理索引文件 – mormod

0

我終於選擇了沒有數據庫的解決方案(雖然@ npinti提供的解決方案非常聰明)。所以我做了類似的東西

File[] listOfFiles = folder.listFiles(); 
for (int i = 0; i < listOfFiles.length; i++) { 
    if (listOfFiles[i].isFile()) { 
    if(listOfFiles[i].getName().contains(my_substring)){ 
    //add the file to a list of files to be displayed 

}}}