Czy istnieje wbudowany kod Java, który przeanalizuje dany folder i przeszuka go pod kątem plików .txt
?Java: Znajdź pliki .txt w określonym folderze
Odpowiedz
Można użyć metody listFiles()
przewidzianej przez klasę 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, to działa dla mnie dobrze, przynajmniej dla prostych przypadków testowych, których próbowałem. 36 osób wydaje się zgadzać. W jaki sposób to nie działa? – djna
Spróbuj:
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;
}
Chcesz zrobić szafkowy niewrażliwe wyszukiwania w takim przypadku:
if (file.getName().toLowerCase().endsWith((".txt"))) {
Jeśli chcesz rekursywnie szukać poprzez drzewa katalogów dla plików tekstowych, powinno być w stanie dostosować powyższe jako funkcję rekurencyjną lub funkcję iteracyjną za pomocą stosu.
Wygląda dobrze. Pozwól mi wypróbować to ... – Sri
Oto mój kod konkretnej platformy (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;
}
Dlaczego ktoś chciałby użyć tego, gdy jest dostępne znacznie łatwiejsze, wieloplatformowe rozwiązanie? – BlueSilver
Jednym z powodów używania natywnej wersji jest unikanie czytania ogromnej listy plików w długim katalogu. W Javie 6 klasa 'java.io.File' nie zawiera metod, które odczytują pliki w katalogu jako strumień lub za pomocą iteratora. Implementacje Java 6 'File.listFiles (FileFilter)' i 'Plik.listFiles (FilenameFilter) 'najpierw odczytuje wszystkie pliki z katalogu, a następnie stosuje filtr. Po znalezieniu katalogu zawierającego miliony plików, na przykład 'File.listFiles' może odczytać tak wiele plików, że może zużywać całą pamięć sterty w JVM. –
Zobacz http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/21487ef30163/src/share/classes/java/io/File.java dla implementacji 'File.listFiles (FileFilter)'. –
Jest to bardzo przydatne, użyłem go z niewielką zmianą:
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);
Powyższy kod działa dla mnie świetnie
Zrobiłem rozwiązanie oparte na słupkach znalazłem tutaj z Google. I pomyślałem, że nie ma nic złego w publikowaniu, nawet jeśli jest to stara nitka.
Jedynym plusem tego kodu jest możliwość iteracji poprzez podkatalogi.
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;
sposób jest następujący:
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 celne;
Lista htmFileList = new ArrayList();
dla (Plik: (lista) FileUtils.listFiles (nowy plik (SRCDIR), new String [] { "txt", "TXT"}, true)) { htmFileList.add (plik); }
To jest mój ostatni kod, aby dodać wszystkie pliki tekstowe z katalogu
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. Znajdź plik z określonym rozszerzeniem w folderze
- 2. Znajdź wszystkie pliki w folderze
- 3. Znajdź wszystkie pliki .php w folderze rekursywnie
- 4. HTMLmin - Jak dynamicznie kompresować wszystkie pliki w określonym folderze
- 5. Jak usunąć wszystkie pliki z określonym rozszerzeniem w folderze?
- 6. emacs: otwórz wszystkie pliki .txt w określonym katalogu w określonym trybie głównym.
- 7. Przywróć wszystkie pliki w folderze
- 8. Uniemożliwianie dostępu do plików w określonym folderze
- 9. Dodawanie widoku perspektywy w określonym folderze
- 10. Phonegap: Utwórz plik w określonym folderze
- 11. Zachowaj pliki git w innym folderze
- 12. makro - otworzyć wszystkie pliki w folderze
- 13. Otwórz wszystkie pliki w folderze
- 14. Jak otworzyć okno Eksploratora Windows z określonym folderem wybranym
- 15. Zapisz plik (.txt) w folderze zasobów w systemie Android?
- 16. Znajdź rodziców elementu w określonym div
- 17. Unieważnij wszystkie pliki w folderze w konsoli w chmurze
- 18. Dołącz wszystkie pliki w określonym katalogu do pakietu msi
- 19. sprawiają .o pliki w osobnym folderze w Linux kompilacji jądra
- 20. kopiować tylko pliki w folderze w Gulp
- 21. zlicza pliki w określonym folderze i wyświetla numer na 1 cel
- 22. Znajdź konkretny tekst w wielu plikach TXT w PHP
- 23. znajdź pliki spoza listy
- 24. znajdź ciąg wewnątrz spakowanego pliku gzip w folderze
- 25. Jak zachować wszystkie aplikacje django w określonym folderze
- 26. Lista obiektów w określonym folderze na Amazon S3
- 27. Znajdź ciąg w pliku Txt, Usuń całą linię
- 28. Jak utworzyć plik wsadowy do wyszukiwania plików z określonym rozszerzeniem w folderze?
- 29. Znajdź wszystkie klasy z określonym Attribut
- 30. Znajdź element przed i po określonym elemencie
Mogłoby być odpowiedź platforma konkretnego? – Milhous
Zobacz także http://stackoverflow.com/questions/794381/how-to-find-files-that-match-a-wildcard-string-in-java – Vadzim
To jest prawdziwe pytanie. Gdyby tak trudno było zrozumieć, jak musiałoby być zamknięte, to nie byłoby odpowiedzi, która nie tylko doskonale odpowie na to pytanie, ale także ma 89 przegranych. – SpaceCore186