Exclusión de archivos basada en una matriz de prefijos -- java camp codereview Relacionados El problema

File-exclusion based on an array of prefixes


2
vote

problema

Español

Estoy tratando de eliminar archivos basados ​​en una matriz de prefijos, desde archivos presentes en sourceDirectory . Estoy usando prefixFileFilter para obtener la lista de archivos con los prefijos. Después de eso, me estoy eliminando de la lista original.

¿Hay algún enfoque mejor?

  package sriram;  import java.io.File; import java.util.Arrays; import java.util.List;  import org.apache.commons.io.filefilter.PrefixFileFilter;  public class FileFilterExample { public static void main(String[] args) { excludeFiles(); }  private static List<String> excludeFiles() { String[] filesToBeExcluded = { "sri", "agnew" }; File sourceDirectory = new File(         "C:\Users\sriram\workspace1\sample\src"); String[] fileNames = sourceDirectory.list(new PrefixFileFilter(         filesToBeExcluded)); List<String> listOfFiles = Arrays.asList(fileNames); List<String> totalFiles = Arrays.asList(sourceDirectory.list()); totalFiles.removeAll(listOfFiles); return totalFiles; } }   
Original en ingles

I am trying to remove files based on an array of prefixes, from files present in sourceDirectory. I am using prefixFileFilter to get the list of files with the prefixes. After that I am removing these from the original list.

Is there any better approach?

package sriram;  import java.io.File; import java.util.Arrays; import java.util.List;  import org.apache.commons.io.filefilter.PrefixFileFilter;  public class FileFilterExample { public static void main(String[] args) { excludeFiles(); }  private static List<String> excludeFiles() { String[] filesToBeExcluded = { "sri", "agnew" }; File sourceDirectory = new File(         "C:\\Users\\sriram\\workspace1\\sample\\src"); String[] fileNames = sourceDirectory.list(new PrefixFileFilter(         filesToBeExcluded)); List<String> listOfFiles = Arrays.asList(fileNames); List<String> totalFiles = Arrays.asList(sourceDirectory.list()); totalFiles.removeAll(listOfFiles); return totalFiles; } } 
  

Lista de respuestas

5
 
vote
vote
La mejor respuesta
 

Puedes usar java.io.filenamefilter like:

  board.surroundingCells(cell) 8  
 

you can use java.io.FilenameFilter like:

    final List<String> excludedFiles = Arrays.asList(filesToBeExcluded);     File[] totalFiles = sourceDirectory.listFiles(new FilenameFilter() {         @Override         public boolean accept(File dir, String name) {             return !excludedFiles.contains(name);         }     }); 
 
 
1
 
vote

Java 7 ha tenido nuevas características en NIO2 : archivos etc .

Aquí se muestra de DirectoryStream.Filter

  board.surroundingCells(cell) 9  
 

Java 7 have had new features in nio2 : Files et Paths, it manage also Charset problems.

Here he sample of DirectoryStream.Filter

static void newDirectoryStreamFilter(final Path file1, final Object filter1) {         System.out.println(sepFin + "\nFiles.newDirectoryStreamFilter("             + file1.getFileName() + "), filtre: " + filter1 + sepDeb);         try {             final DirectoryStream.Filter<Path> filter = new DirectoryStream.Filter<Path>() {                 @Override                 public boolean accept(final Path file1) throws IOException {                     for (String s : filesToBeExcluded)                         if (file1.startsWith(s)) return false;                         return true;                 }             };             try {                 for (final Path path : Files.newDirectoryStream(file1, filter)) {                     System.out.format("%10d %s\n", Files.size(path),                         path.toAbsolutePath());                 }             } catch (final Exception e) {                 System.err.println(e.getMessage());             }         } catch (final Exception e) {             System.err.println(e.getMessage());         } 
 
 
0
 
vote

Como ya está utilizando Commons.io, puede usar el NOFILEFILTER .

y obtendrás:

  private static List<String> getFileNamesWithoutExcludedPrefixes(File directory, String[] filesToBeExcluded) {     return Arrays.asList(directory.list(new NotFileFilter(new PrefixFileFilter(filesToBeExcluded)))); }   

(se podría agregar la verificación de argumentos)

en su fuente:

  totalFiles.removeAll(listOfFiles);   

Esto no puede funcionar, porque 9988776655544332 crea una lista inmutable.

Podría cambiar la línea que crea la lista a:

  new ArrayList<String>(...);   

Si necesita mutabilidad.

 

As you are already using commons.io, you could use the NotFileFilter.

and you will get:

private static List<String> getFileNamesWithoutExcludedPrefixes(File directory, String[] filesToBeExcluded) {     return Arrays.asList(directory.list(new NotFileFilter(new PrefixFileFilter(filesToBeExcluded)))); } 

(Argument checking could be added)

In your source:

totalFiles.removeAll(listOfFiles); 

this can not work, because Arrays.asList() creates an immutable list.

You could change the line that creates the list to:

new ArrayList<String>(...); 

if you need mutability.

 
 

Relacionados problema

5  Encuentre el próximo número Prime - Control de flujo de los bucles anidados 'para `  ( Find the next prime number flow control of nested for loops ) 
Este código funciona perfectamente, pero me molesta. Tener un bucle etiquetado y anidado Bucle, con un Enumerable<T>.Empty()0 Declaración, y un 9988777665...

34  Clon a todo color del juego de la vida de Conway, con una GUI decente  ( Full color clone of conways game of life with a decent gui ) 
Escribí esto para aprender Javafx, y como excusa para volver a hacer el juego de la vida. Esta es la gui más compleja que he escrito, así que me gustaría come...

2  Solucionador de rompecabezas de rascacielos en Java [cerrado]  ( Skyscraper puzzle solver in java ) 
cerrado. Esta pregunta es off-topic . Actualmente no está aceptando respuestas. ¿Quieres ...

8  Simple GCD Utility en Java  ( Simple gcd utility in java ) 
i anteriormente discutido El rendimiento se refiere a diferentes algoritmos GCD. Escribí una simple clase de Java que implementa el algoritmo binario GCD. E...

1  Compruebe si dos cadenas son permutación entre sí  ( Check if two strings are permutation of each other ) 
private String sort(String word) { char[] content = word.toCharArray(); Arrays.sort(content); return new String(content); } private boolea...

5  Memoria / Performance of Merge Sort Code  ( Memory performance of merge sort code ) 
Escribí un código de tipo de combinación para un poco de bocadillo nocturno. Lo he puesto trabajando, pero solo estaba mirando a aprender si me faltaba algo e...

6  Encontrar el siguiente palíndromo de una cadena de números  ( Finding the next palindrome of a number string ) 
Aquí está el problema: Un entero positivo se llama palíndromo si su representación en el El sistema decimal es el mismo cuando se lee de izquierda a dere...

2  Fusionar la implementación de Sort Java  ( Merge sort java implementation ) 
¿Puede alguien revisar mi implementación de tipo de fusión en Java? ¿Es bueno / malo y puede mejorarse más? public class MyMergeSort { private int [] d...

2  Eliminación de un nodo en un árbol de búsqueda binario  ( Deletion of a node in a binary search tree ) 
Estoy buscando ver si mi implementación del método de eliminación / eliminación en un árbol de búsqueda binario es suficiente, legible y se ejecuta en un tiem...

17  Implementación vectorial (física)  ( Vector physics implementation ) 
Recientemente comencé a aprender Java, y decidí implementar un sistema de vectores básico para otro sistema de partículas que estaba construyendo. join()9 ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos