2015-05-29 65 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 

}}}