filenamefilter ejemplo chooser java filefilter

ejemplo - filenamefilter java



¿Cómo hacer FileFilter en Java? (8)

como en el título cómo hacer filtro a los archivos .txt?

Escribí algo como esto pero tiene un error :(

private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { JFileChooser chooser = new JFileChooser(); int retval = chooser.showOpenDialog(null); String yourpath = "E://Programy Java//Projekt_SR1//src//project_sr1"; File directory = new File(yourpath); String[] myFiles; FilenameFilter filter = new FilenameFilter() { public boolean accept(File directory, String fileName) { return fileName.endsWith(".txt"); } }; myFiles = directory.list(filter); if(retval == JFileChooser.APPROVE_OPTION) { File myFile = chooser.getSelectedFile(); }


Aquí hay una pequeña clase de utilidad que creé:

import java.io.File; import java.io.FilenameFilter; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** * Convenience utility to create a FilenameFilter, based on a list of extensions */ public class FileExtensionFilter implements FilenameFilter { private Set<String> exts = new HashSet<String>(); /** * @param extensions * a list of allowed extensions, without the dot, e.g. * <code>"xml","html","rss"</code> */ public FileExtensionFilter(String... extensions) { for (String ext : extensions) { exts.add("." + ext.toLowerCase().trim()); } } public boolean accept(File dir, String name) { final Iterator<String> extList = exts.iterator(); while (extList.hasNext()) { if (name.toLowerCase().endsWith(extList.next())) { return true; } } return false; } }

Uso:

String[] files = new File("myfile").list(new FileExtensionFilter("pdf", "zip"));


Desde JDK8 en palabras, es tan simple como

final String extension = ".java"; final File currentDir = new File(YOUR_DIRECTORY_PATH); File[] files = currentDir.listFiles((File pathname) -> pathname.getName().endsWith(extension));


Desde Java7 puedes simplemente usar FileNameExtensionFilter(String description, String... extensions)

Un simple análogo de JFileChooser al ejemplo sería:

JFileChooser fileChooser = new JFileChooser(); fileChooser.setFileFilter(new FileNameExtensionFilter("Text files", "txt"));

Sé que la pregunta fue respondida hace mucho tiempo, pero esta es en realidad la solución más simple.


Otro ejemplo simple:

public static void listFilesInDirectory(String pathString) { // A local class (a class defined inside a block, here a method). class MyFilter implements FileFilter { @Override public boolean accept(File file) { return !file.isHidden() && file.getName().endsWith(".txt"); } } File directory = new File(pathString); File[] files = directory.listFiles(new MyFilter()); for (File fileLoop : files) { System.out.println(fileLoop.getName()); } } // Call it listFilesInDirectory("C://Users//John//Documents//zTemp"); // Output Cool.txt RedditKinsey.txt ...


Prueba algo como esto ...

String yourPath = "insert here your path.."; File directory = new File(yourPath); String[] myFiles = directory.list(new FilenameFilter() { public boolean accept(File directory, String fileName) { return fileName.endsWith(".txt"); } });


Te estás equivocando aquí:

int retval = chooser.showOpenDialog(null); public boolean accept(File directory, String fileName) {` return fileName.endsWith(".txt");` }

¡Primero muestra el cuadro de diálogo del selector de archivos y luego aplica el filtro! Esto no funcionará Primero aplique el filtro y luego muestre el diálogo:

public boolean accept(File directory, String fileName) { return fileName.endsWith(".txt"); } int retval = chooser.showOpenDialog(null);


Here encontrarás algunos ejemplos de trabajo. This también es un buen ejemplo de FileFilter utilizado en JFileChooser.

Lo básico es que debes anular la clase FileFilter y escribir tu código personalizado en su método accpet. El método de aceptación en el ejemplo anterior está haciendo la filtración en función de los tipos de archivos:

public boolean accept(File file) { if (file.isDirectory()) { return true; } else { String path = file.getAbsolutePath().toLowerCase(); for (int i = 0, n = extensions.length; i < n; i++) { String extension = extensions[i]; if ((path.endsWith(extension) && (path.charAt(path.length() - extension.length() - 1)) == ''.'')) { return true; } } } return false; }

O más simple de usar es FileNameFilter que tiene el método accept con filename como argumento, por lo que no es necesario obtenerlo manualmente.


File f = null; File[] paths; try { f = new File(dir); // filefilter FilenameFilter fileNameFilter = new FilenameFilter() { public boolean accept(File dir, String name) { if (name.lastIndexOf(''.'') > 0) { int lastIndex = name.lastIndexOf(''.''); String str = name.substring(lastIndex); if (str.equals("." + selectlogtype)) { return true; } } return false; } }; paths = f.listFiles(fileNameFilter); for (int i = 0; i < paths.length; i++) { try { FileWriter fileWriter = new FileWriter("C:/Users/maya02/workspace/ftp_log/filefilterlogtxt"); PrintWriter bWriter = new PrintWriter(fileWriter); for (File writerpath1 : paths) { bWriter.println(writerpath1); } bWriter.close(); } catch (IOException e) { System.out.println("HATA!!"); } } System.out.println("path dosyaya aktarıldı!."); } catch (Exception e) { }