Gibt es einen eingebauten Java-Code, der einen bestimmten Ordner analysiert und nach .txt
Dateien sucht?Java: Finden Sie TXT-Dateien im angegebenen Ordner
Antwort
können Sie die listFiles()
Methode der java.io.File
-Klasse verwenden.
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, das funktioniert für mich ganz gut, zumindest für die einfachen Testfälle, die ich ausprobiert habe. 36 Leute scheinen mir zuzustimmen. Inwiefern funktioniert es nicht für dich? – djna
Versuchen:
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;
}
Sie wollen in diesem Fall ein Groß- und Kleinschreibung Suche tun:
if (file.getName().toLowerCase().endsWith((".txt"))) {
Wenn Sie rekursiv nach durch einen Verzeichnisbaum für Textdateien suchen wollen, sollten Sie sein fähig, das Obige entweder als eine rekursive Funktion oder eine iterative Funktion unter Verwendung eines Stapels anzupassen.
Sieht gut aus. Lassen Sie mich das versuchen. – Sri
Hier ist meine Plattform-spezifischen Code (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;
}
Warum sollte jemand das verwenden wollen, wenn es eine viel einfachere, plattformübergreifende Lösung gibt? – BlueSilver
Ein Grund, eine native Version zu verwenden, besteht darin, das Lesen einer großen Liste von Dateien in einem langen Verzeichnis zu vermeiden. In Java 6 enthält die Klasse 'java.io.File' keine Methoden, die Dateien in einem Verzeichnis als Stream lesen oder einen Iterator verwenden. Die Java 6-Implementierungen von 'File.listFiles (FileFilter)' und 'File.listFiles (FilenameFilter) 'liest zuerst alle Dateien aus einem Verzeichnis und wendet dann den Filter an. Wenn beispielsweise ein Verzeichnis mit Millionen von Dateien gefunden wird, kann 'File.listFiles' so viele Dateien lesen, dass es möglicherweise den gesamten Heap-Speicher in der JVM verbraucht. –
Siehe http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/21487ef30163/src/share/classes/java/io/File.java für die Implementierung von 'File.listFiles (FileFilter)'. –
Es ist wirklich nützlich, habe ich es mit einer kleinen Änderung:
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);
Der Code funktioniert über großartig für mich
ich meine Lösung auf den Pfosten gemacht basierend gefunden hier mit Google. Und ich dachte, es schadet nichts, auch wenn es ein alter Thread ist.
Das einzige Plus dieses Codes ist, dass es auch durch Unterverzeichnisse iterieren kann.
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;
Verfahren ist wie folgt: Import org.apache.commons.io.FileUtils
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;
}
;
Liste htmFileList = new ArrayList();
für (Datei: (List) FileUtils.listFiles (neue Datei (srcdir), neuer String [] { "txt", "TXT"}, true)) { htmFileList.add (Datei); }
Dies ist mein letzter Code alle Textdateien aus einem Verzeichnis seine
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. Unterordner im übergeordneten Ordner finden
- 2. So finden Sie den Ordner "Eigene Dateien" in Java
- 3. Finden Sie den Ordner Vagrantfile
- 4. Sublime Text 2 finden Sie im Ordner mit der Dateierweiterung
- 5. Finden Sie eine Datei mit einer bestimmten Erweiterung im Ordner
- 6. Alle Benutzer im Active Directory in einem angegebenen Ordner abrufen
- 7. Alle .php-Dateien im Ordner rekursiv finden
- 8. Öffnen Sie einen Ordner im Explorer mit Java
- 9. So finden Sie Ordner in Google Drive
- 10. Wie Sie eine Tabelle in das CSV-Format exportieren und im angegebenen Ordner speichern
- 11. Löschen mehrerer angegebenen Ordner (+ Contents) in Python
- 12. Finden Sie alle Dateien in einem Ordner
- 13. Grenze jekyll Beiträge in den angegebenen Ordner
- 14. java.io.FileNotFoundException: (Das System kann den angegebenen Pfad nicht finden) für zipfile in java
- 15. ASP.Net Core 1 Listendateien im angegebenen Verzeichnis
- 16. Codename One - So finden Sie untergeordnete Komponenten des angegebenen Elternteils
- 17. Erstellen Sie nur eine zufällige Primzahl im angegebenen Bereich
- 18. Erstellen Sie einen Ordner im Ordner Dokumente in iOS-Apps
- 19. Kleine Änderungen im angegebenen Algorithmus
- 20. Wie alle Dateien im Ordner
- 21. node.js kann kein Modul im selben Ordner finden
- 22. Mehrere Ordner im Explorer
- 23. Git ignorieren nicht ignoriert die angegebenen Ordner/Dateien
- 24. Applescript: Öffnen Sie einen Ordner im Finder
- 25. Ersetzen Sie Ordner im Dateisystem mit Swift
- 26. Entfernen Sie Leerzeichen aus Dateinamen im Ordner
- 27. Bash - Filterdateien im Ordner
- 28. Java ZIP - wie entpacken Sie den Ordner?
- 29. Datei anzeigen, wenn sie im angegebenen Pfad vorhanden ist
- 30. entfernen Sie alle Dateien der Größe 0 im angegebenen Verzeichnis
Könnte Antwort hinzufügen Plattform spezifisch? – Milhous
Siehe auch http://stackoverflow.com/questions/794381/how-to-find-files-that-match-a-wildcard-string-in-java – Vadzim
Dies ist eine echte Frage. Wenn es so schwer zu verstehen wäre, wie es sein müsste, um geschlossen zu sein, dann würde es keine Antwort geben, die nicht nur die Frage perfekt beantwortet, sondern auch 89 Upvotes hat. – SpaceCore186