[英]How can I extract right-to-left text from .doc and .docx files using Apache POI in java?
[英]java code to search all .doc and .docx files from local system
我正在使用java的Windows版桌面应用程序。 在我的应用程序中,需要从本地系统中搜索MyDocuments / Documents(根据操作系统)中的所有.doc和.docx文件,并显示其名称和文件大小。
我没有得到帮助我列出所有* .doc,* .docx,*。xls,* .xlsx,* .csv,* .txt,* .pdf,* .ppt,* .pptx的方式Documents / MyDocuments中存在的文件。
请给我你宝贵的建议或建议我任何链接,这将有助于我编写代码,以便更快地搜索和列出其名称,大小和类型。
您可以使用Apache Commons IO,特别是FileUtils类。 这将给出类似的东西:
import java.io.File;
import java.util.Collection;
import org.apache.commons.io.*;
import org.apache.commons.io.filefilter.*;
public class SearchDocFiles {
public static String[] EXTENSIONS = { "doc", "docx" };
public Collection<File> searchFilesWithExtensions(final File directory, final String[] extensions) {
return FileUtils.listFiles(directory,
extensions,
true);
}
public Collection<File> searchFilesWithCaseInsensitiveExtensions(final File directory, final String[] extensions) {
IOFileFilter fileFilter = new SuffixFileFilter(extensions, IOCase.INSENSITIVE);
return FileUtils.listFiles(directory,
fileFilter,
DirectoryFileFilter.INSTANCE);
}
public static void main(String... args) {
// Case sensitive
Collection<File> documents = new SearchDocFiles().searchFilesWithExtensions(
new File("/tmp"),
SearchDocFiles.EXTENSIONS);
for (File document: documents) {
System.out.println(document.getName() + " - " + document.length());
}
// Case insensitive
Collection<File> caseInsensitiveDocs = new SearchDocFiles().searchFilesWithCaseInsensitiveExtensions(
new File("/tmp"),
SearchDocFiles.EXTENSIONS);
for (File document: caseInsensitiveDocs) {
System.out.println(document.getName() + " - " + document.length());
}
}
}
检查此方法。
public void getFiles(String path) { File dir = new File(path); String[] children = dir.list(); if (children != null) { for (int i = 0; i < children.length; i++) { // Get filename of file or directory String filename = children[i]; File file = new File(path + File.separator + filename); if (!file.isDirectory()) { if (file.getName().endsWith(".doc") || file.getName().endsWith(".docx")) { System.out.println("File Name " + filename + "(" + file.length()+" bytes)"); } } else { getFiles(path + File.separator + filename); } } } }
我没有足够的声誉来发表评论,因此必须将其作为“答案”提交:
@khachik您可以根据需要忽略案例或大写/小写。 - Martijn Verburg 2010年11月10日12:02
这让我想一想,最后找到了如何忽略这个解决方案的情况:
加
public static final IOFileFilter filter = new SuffixFileFilter(EXTENSIONS, IOCase.INSENSITIVE);
然后修改searchFilesWithExtensions
方法以return FileUtils.listFiles( directory, filter, DirectoryFileFilter.DIRECTORY );
searchFilesWithExtensions
return FileUtils.listFiles( directory, filter, DirectoryFileFilter.DIRECTORY );
如果要查找具有.doc(x)扩展名的所有文件,可以使用java.io.File.list(FileFilter)方法,例如:
public java.util.List mswordFiles(java.io.File dir) { java.util.List res = new java.util.ArrayList(); _mswordFiles(dir, res); return res; } protected void _mswordFiles(java.io.File dir, java.util.List res) { java.io.File [] files = dir.listFiles(new java.io.FileFilter() { public boolean accept(java.io.File f) { String name = f.getName().toLowerCase(); return !f.isDirectory() && (name.endsWith(".doc") || name.endsWith(".docx")); } }); for(java.io.File f:files) {res.add(f);} java.io.File [] dirs = dir.listFiles(new java.io.FileFilter() { public boolean accept(java.io.File f) { return f.isDirectory(); } }); for(java.io.File d:dirs) {_mswordFiles(d, res);} }
您可能希望研究使用
Apache POI提取MSWord文本并通过
Lucene对其进行索引(为了准确性,灵活性和搜索速度)。
Nutch和Solr都有Lucene的辅助库,你可以用它来加速(也就是说,如果Lucene核心不够用)。
[更新]我误解了原始问题(更新前)。 你只需要使用Java搜索文件系统? Java API可以做到这一点。 Apache还有一个库(Commons IO) ,它包含一个文件实用程序,用于列出目录下的所有文件,包括给定过滤器的子目录。 我之前使用过它,例如FileUtils.listFiles(dir,filefilter,dirfilter)或FileUtils.listFiles(dir,extensions [],递归)。 然后从该列表中执行搜索功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.