簡體   English   中英

java代碼從本地系統搜索所有.doc和.docx文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM