是否有內置的Java代碼將解析給定的文件夾並在.txt
文件中搜索它?Java:在指定文件夾中查找.txt文件
回答
您可以使用由java.io.File
類提供的listFiles()
方法。
import java.io.File;
import java.io.FilenameFilter;
public class Filter {
public File[] finder(String dirName){
File dir = new File(dirName);
return dir.listFiles(new FilenameFilter() {
public boolean accept(File dir, String filename)
{ return filename.endsWith(".txt"); }
});
}
}
@Funsuk,這對我來說工作得很好,至少對於我試過的簡單測試用例。 36人似乎同意。它不適合你的方式? – djna 2013-03-17 22:25:45
嘗試:
List<String> textFiles(String directory) {
List<String> textFiles = new ArrayList<String>();
File dir = new File(directory);
for (File file : dir.listFiles()) {
if (file.getName().endsWith((".txt"))) {
textFiles.add(file.getName());
}
}
return textFiles;
}
你想要做一個不區分大小寫在這種情況下:
if (file.getName().toLowerCase().endsWith((".txt"))) {
如果你想通過文本文件的目錄樹遞歸搜索,你應該能夠將上述內容作爲遞歸函數或使用堆棧的迭代函數來適應。
看起來不錯。讓我試試這個.. – Sri 2009-09-06 06:03:07
這裏是我的平臺相關的代碼(UNIX)
public static List<File> findFiles(String dir, String... names)
{
LinkedList<String> command = new LinkedList<String>();
command.add("/usr/bin/find");
command.add(dir);
List<File> result = new LinkedList<File>();
if (names.length > 1)
{
List<String> newNames = new LinkedList<String>(Arrays.asList(names));
String first = newNames.remove(0);
command.add("-name");
command.add(first);
for (String newName : newNames)
{
command.add("-or");
command.add("-name");
command.add(newName);
}
}
else if (names.length > 0)
{
command.add("-name");
command.add(names[0]);
}
try
{
ProcessBuilder pb = new ProcessBuilder(command);
Process p = pb.start();
p.waitFor();
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null)
{
// System.err.println(line);
result.add(new File(line));
}
p.destroy();
}
catch (Exception e)
{
e.printStackTrace();
}
return result;
}
爲什麼任何人都希望在有更簡單的跨平臺解決方案時使用它? – BlueSilver 2011-12-06 15:14:28
使用本地版本的一個原因是避免讀取長目錄中的大量文件列表。在Java 6中,類java.io.File不包含以流或迭代器的形式讀取目錄中的文件的方法。 File.listFiles(FileFilter)和File的Java 6實現。listFiles(FilenameFilter)'首先從目錄中讀取所有文件,然後應用過濾器。例如,在遇到包含數百萬個文件的目錄時,「File.listFiles」可能會讀取很多文件,以至於它可能會佔用JVM中的所有堆內存。 – 2013-02-26 12:28:52
請參閱http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/21487ef30163/src/share/classes/java/io/File.java以獲得'File.listFiles(FileFilter)'的實現。 – 2013-02-26 12:29:37
它真的有用,我有輕微的變化用它:
filename=directory.list(new FilenameFilter() {
public boolean accept(File dir, String filename) {
return filename.startsWith(ipro);
}
});
import org.apache.commons.io.filefilter.WildcardFileFilter;
.........
.........
File dir = new File(fileDir);
FileFilter fileFilter = new WildcardFileFilter("*.txt");
File[] files = dir.listFiles(fileFilter);
上面的代碼的偉大工程,爲我
我做了基於我發現帖子我的解決辦法在這裏與谷歌。而且我認爲即使它是舊線程也不會傷害我的郵件。
此代碼的唯一優點是它也可以遍歷子目錄。
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.apache.commons.io.filefilter.DirectoryFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
方法如下:
List <File> exploreThis(String dirPath){
File topDir = new File(dirPath);
List<File> directories = new ArrayList<>();
directories.add(topDir);
List<File> textFiles = new ArrayList<>();
List<String> filterWildcards = new ArrayList<>();
filterWildcards.add("*.txt");
filterWildcards.add("*.doc");
FileFilter typeFilter = new WildcardFileFilter(filterWildcards);
while (directories.isEmpty() == false)
{
List<File> subDirectories = new ArrayList();
for(File f : directories)
{
subDirectories.addAll(Arrays.asList(f.listFiles((FileFilter)DirectoryFileFilter.INSTANCE)));
textFiles.addAll(Arrays.asList(f.listFiles(typeFilter)));
}
directories.clear();
directories.addAll(subDirectories);
}
return textFiles;
}
進口org.apache.commons.io.FileUtils;
List htmFileList = new ArrayList();
爲(文件的文件:(列表)FileUtils.listFiles(新文件(SRCDIR),新的String [] { 「TXT」, 「TXT」}, 真)){ htmFileList.add(文件); }
這是從目錄
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
public class FileFinder extends SimpleFileVisitor<Path> {
private PathMatcher matcher;
public ArrayList<Path> foundPaths = new ArrayList<>();
public FileFinder(String pattern) {
matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Path name = file.getFileName();
if (matcher.matches(name)) {
foundPaths.add(file);
}
return FileVisitResult.CONTINUE;
}
}
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
Path fileDir = Paths.get("files");
FileFinder finder = new FileFinder("*.txt");
Files.walkFileTree(fileDir, finder);
ArrayList<Path> foundFiles = finder.foundPaths;
if (foundFiles.size() > 0) {
for (Path path : foundFiles) {
System.out.println(path.toRealPath(LinkOption.NOFOLLOW_LINKS));
}
} else {
System.out.println("No files were founds!");
}
}
}
- 1. 查找文件的文件夾中,並比較列表(TXT)
- 2. 批處理文件複製在.txt文件中指定的文件夾
- 3. 在文件夾和子文件夾中查找文件
- 4. 批文件查找特定文件夾下的文件夾數
- 5. 未找到Java .txt文件
- 6. Linux僅爲當前文件夾和指定文件夾找到'''
- 7. 在txt文件中查找名稱
- 8. 在.txt文件中查找字符串
- 9. Java:從資源文件夾內的文件夾中讀取txt文件
- 10. JavaScript查找.TXT文件
- 11. 查找文件夾
- 12. Bat文件在.txt文件中查找某些文本
- 13. 刪除指定文件夾中的文件和文件夾
- 14. Bash腳本在給定文件夾中查找文件類型
- 15. Google Drive API v3在特定文件夾中查找文件
- 16. Python,找到文件夾中的指定文件
- 17. 如何在java中的特定摺疊下查找文件夾?
- 18. 在Java中查找特定的文件夾
- 19. 在指定文件夾中創建文件夾在新文件夾中創建子文件夾
- 20. 從Photoshop中的指定文件夾獲取文件名Java Script
- 21. 在指定文件夾中列出文件夾
- 22. 解壓縮在txt文件中指定的文件列表
- 23. 在整個分區內查找指定的文件夾
- 24. 在.txt文件中使用.cmd文件查找並替換
- 25. 如何查看文件夾中的txt文件列表?
- 26. PHP - 所有文件和文件夾指定的文件夾
- 27. 查找txt文件中的字符串
- 28. 查找並刪除.txt文件在bash
- 29. 查找文件夾外的文件
- 30. C#查找文件foreach文件夾
添加的所有文本文件都可以回答是特定於平臺我最新的代碼? – Milhous 2009-09-06 05:51:59
另請參閱http://stackoverflow.com/questions/794381/how-to-find-files-that-match-a-wildcard-string-in-java – Vadzim 2015-07-28 19:04:22
這是一個真正的問題。如果它很難理解,因爲它需要被關閉,那麼就不會有一個答案,它不僅能夠完美地回答這個問題,而且還有89個贊同。 – SpaceCore186 2016-09-04 21:40:19