是否有内置的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