Agregue la función de devolución de llamada de corriente de Java

Nick: Melis

Digamos que yo quiero para realizar las siguientes operaciones:

  • Listar los archivos en un directorio dado (como una corriente)
  • Mapear cada archivo (Path) en un lector (BufferedReader por ejemplo) para un consumidor a consumir.
  • Una vez que un archivo ha sido consumido, elimine los archivos

El código sería un poco como esto:

Stream<Reader> stream = Files.list(Paths.get("myFolder")) // Returns a stream of Path
  .callback(Files::delete)                                // This would have to be called after the reader has been consumed
  .map(Files::newBufferedReader);                         // Maps every path into a Reader

Si utilizo peek()para eliminar los archivos, el archivo no estará allí cuando se necesita asignarse a un lector, por lo que iba a necesitar algo que corre detrás de la corriente se consume. ¿Alguna idea?

Nick: Melis

Fui a dar un enfoque ligeramente diferente en el final. Extendí la clase Reader y creé una envoltura, y yo simplemente overrode el close()método para realizar algunas operaciones adicionales en el archivo (es decir, renombrar, borrar, mover, etc) una vez que el lector ha sido consumido.

public class CustomReader extends Reader {
  private Reader reader;
  private File file;

  public CustomReader(File file) {
    this.file = file;
    this.reader = new FileReader(file);
  } 

  [...]
  @Override
  public void close() {
    super.close();
    // Do what you need to do with your file
  }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=168045&siteId=1
Recomendado
Clasificación