Есть ли встроенный Java-код, который будет анализировать данную папку и искать ее для файлов .txt
?Java: Найти .txt файлы в указанной папке
ответ
Вы можете использовать listFiles()
метод предоставленных java.io.File
класса.
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
Try:
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
Вот моя платформа специальный код (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
Одна из причин использования родной версии - избежать чтения огромного списка файлов в длинном каталоге. В Java 6 класс 'java.io.File' не включает методы, которые читают файлы в каталоге как поток или используют итератор. Реализации Java 6 «File.listFiles (FileFilter)» и «Файл».listFiles (FilenameFilter) 'оба сначала считывают все файлы из каталога, а затем применяют фильтр. Когда вы сталкиваетесь с каталогом, содержащим миллионы файлов, например, «File.listFiles» может читать так много файлов, что он может потреблять всю кучу памяти в JVM. –
См. Http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/21487ef30163/src/share/classes/java/io/File.java для реализации 'File.listFiles (FileFilter)'. –
Это действительно полезно, я использовал его с небольшим изменением:
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);
Код выше работает для меня
Я сделал мое решение на основе сообщений, которые я нашел здесь с Google. И я подумал, что не стоит наносить ущерб и моим, даже если это старая нить.
Единственный плюс, который дает этот код, заключается в том, что он может выполнять итерацию через подкаталоги.
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;
Список htmFileList = новый ArrayList();
для (Файл: (список) FileUtils.listFiles (новый файл (SRCDIR), новый String [] { "текстовый", "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. Найти файлы в папке с помощью Java
- 2. Объединить файлы txt в папке
- 3. Поиска файлов с расширением .java в указанной папке
- 4. Список папок в указанной папке
- 5. Найти файлы в папке и вложенной папке
- 6. Python найти похожие файлы в данной папке
- 7. Найти файлы в папке с помощью android
- 8. как запустить команду windows (cmd) в папке, указанной из java
- 9. gitignore файлы в указанной папке, но папки должны быть отслежены
- 10. Может ли IWebBrowser2 хранить файлы cookie в указанной папке?
- 11. переименовывать файлы в папке с указанной специальными символами Linux
- 12. Поиск php в указанной папке
- 13. Сохранение файлов в указанной папке
- 14. Загрузить изображение в указанной папке
- 15. Сохранить файл в указанной папке
- 16. Сохранить изображение в указанной папке
- 17. Удаление файлов и папок в указанной папке
- 18. Как найти файлы на основе именования в папке
- 19. Найти все .php файлы в папке рекурсивно
- 20. C++ найти все файлы типа в папке?
- 21. Показать все .txt файлы в папке в действии
- 22. Процитировать .txt файлы в папке и найти определенные символы в файле в MATLAB
- 23. Найти и перечислить все найденные файлы в папке
- 24. Сохранение фотографий в указанной папке в Android
- 25. Создайте txt-файлы, если не существует php, в другой папке
- 26. Как выполнить задачу ant в файлах в указанной папке?
- 27. Python - укажите размер подпапок в указанной папке
- 28. Как найти формат файла с помощью Java (предположим, файлы .txt, .java-файлы, .class файлы, .zip-файлы находятся в моем каталоге)?
- 29. Как создать или отредактировать txt-файл в папке на Java?
- 30. Закройте все файлы в папке
Может быть ответом будет конкретной платформы? – Milhous
См. Также http://stackoverflow.com/questions/794381/how-to-find-files-that-match-a-wildcard-string-in-java – Vadzim
Это настоящий вопрос. Если бы это было так трудно понять, как нужно было бы закрыться, тогда не было бы ответа, который бы не только полностью отвечал на вопрос, но также имел 89 верхних позиций. – SpaceCore186