¿Hay un código Java incorporado que analizará una carpeta determinada y lo buscará en los archivos .txt
?Java: encuentre archivos .txt en la carpeta especificada
Respuesta
Usted puede utilizar el método listFiles()
proporcionada por la clase 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, esto funciona bien para mí, al menos para los casos de prueba simples que he probado. 36 personas parecen estar de acuerdo. ¿De qué manera no funciona para ti? – djna
Probar:
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;
}
¿Quieres hacer una búsqueda que ignore en cuyo caso:
if (file.getName().toLowerCase().endsWith((".txt"))) {
Si desea buscar de forma recursiva a través de un árbol de directorios para archivos de texto, debe ser capaz de adaptar lo anterior como una función recursiva o una función iterativa utilizando una pila.
Se ve bien. Déjame probar esto ... – Sri
Aquí es mi plataforma de código específico (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;
}
¿Por qué alguien querría usar esto cuando hay disponible una solución multiplataforma mucho más fácil? – BlueSilver
Una razón para usar una versión nativa es evitar leer una gran lista de archivos en un directorio largo. En Java 6, la clase 'java.io.File' no incluye métodos que leen los archivos en un directorio como una secuencia o utilizando un iterador. Las implementaciones de Java 6 de 'File.listFiles (FileFilter)' y 'File.listFiles (FilenameFilter) 'ambos primero leen todos los archivos de un directorio y luego aplican el filtro. Cuando se encuentra con un directorio que contiene millones de archivos, por ejemplo, 'File.listFiles' puede leer tantos archivos que puede consumir toda la memoria del montón en la JVM. –
Consulte http://hg.openjdk.java.net/jdk6/jdk6/jdk/file/21487ef30163/src/share/classes/java/io/File.java para la implementación de 'File.listFiles (FileFilter)'. –
Es realmente útil, lo usé con un ligero cambio:
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);
El código anterior funciona muy bien para mí
hice mi solución basada en los mensajes que he encontrado aquí con Google. Y pensé que no había daño publicar el mío también, incluso si se trata de un hilo viejo.
La única ventaja que brinda este código es que también puede iterar a través de subdirectorios.
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;
método es como sigue:
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 importación;
Lista htmFileList = new ArrayList();
para (del archivo: (Lista) FileUtils.listFiles (nuevo archivo (SRCDIR), nuevo String [] { "txt", "TXT"}, true)) { htmFileList.add (archivo); }
Este es mi último código para añadir todos los archivos de texto desde un directorio
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. encontrar archivos en una carpeta usando Java
- 2. Cómo enviar la lista de archivos en una carpeta a un archivo txt en Linux
- 3. Buscar todos los archivos en una carpeta
- 4. WebDAV - Solicitar "Mostrar archivos en la carpeta"?
- 5. encontrar y eliminar archivos .txt en bash
- 6. Archivos recientes en la carpeta
- 7. Copiar archivos en la carpeta un directorio en python
- 8. IntelliJ Idea 10: cómo desactivar la autocompletación en archivos .txt
- 9. Obteniendo el número de archivos en una carpeta en java
- 10. ¿Buscar existencia de archivos en la carpeta androids assets?
- 11. Modificar un archivo .txt en Java
- 12. JavaScript: Leer archivos en la carpeta
- 13. consolidando archivos vim en la carpeta ~/.vim
- 14. Vim NERDTree: mostrar solo archivos .txt?
- 15. Java ZIP - ¿cómo descomprimir la carpeta?
- 16. Obtener archivos en una carpeta
- 17. Convierte archivos .odt .doc .ods a archivos .txt
- 18. ¿Cómo se lee en múltiples archivos .txt en R?
- 19. Buscar texto específico en múltiples archivos TXT en PHP
- 20. Java Jar Ant incluye la carpeta
- 21. eliminando carpeta de java
- 22. ¿Cómo obtener todos los archivos de texto de una carpeta usando Java?
- 23. Java - encuentre el host por la dirección MAC
- 24. Cambie el nombre de todos los archivos en la carpeta con números crecientes
- 25. ¿Cómo hacer que javac encuentre archivos JAR? (Eclipse puede verlos)
- 26. Java copiar una carpeta excluyendo algunos archivos interno
- 27. Comparando dos archivos .txt usando difflib en Python
- 28. ¿Cómo escribir archivos en la carpeta de activos o la carpeta sin formato en Android?
- 29. Descargar varios archivos FTP como d * .txt en ruby
- 30. extensión .txt en JFileChooser
Podría ser la respuesta será plataforma específica? – Milhous
Vea también http://stackoverflow.com/questions/794381/how-to-find-files-that-match-a-wildcard-string-in-java – Vadzim
Esta es una pregunta real. Si fuera tan difícil de entender como sería necesario para ser cerrado, entonces no habría una respuesta que no solo responda la pregunta a la perfección, sino que también tenga 89 votaciones ascendentes. – SpaceCore186