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) { }