public stringsEnCase(Trade t) { String status = t.getStatus(); switch(status) { caseNEW: newTrade(t); break; caseEXECUTE: executeTrade(t); break; casePENDING: pendingTrade(t); break; default: break; } }2: Gestión automática de recursos
public voidnewTry() { try(FileOutputStream fos = newFileOutputStream("movies.txt"); DataOutputStream dos = newDataOutputStream(fos)) { dos.writeUTF("Java 7 yeah"); } catch(IOException e) { // log the exception } }3: Literales numéricos con barra baja
int million = 1_000_0004: Mejorado el manejo de excepciones
public voidnewMultiCatch() { try{ methodThatThrowsThreeExceptions(); } catch(ExceptionOne | ExceptionTwo | ExceptionThree e) { // log and deal with all Exceptions } }5: Nuevas apis de fichero
package java7; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class PruebasDeFichero { public void pruebas() { Path pathOrigen = Paths.get("c:\\Temp\\tempOrigen"); System.out.println("Número de nodos:" + pathOrigen.getNameCount()); System.out.println("Nombre de fichero:" + pathOrigen.getFileName()); System.out.println("Raíz:" + pathOrigen.getRoot()); System.out.println("Padre:" + pathOrigen.getParent()); OutputStream fis; try { fis = new FileOutputStream(new File( "c:\\Temp\\temp2\\holaMundo2.txt")); Files.copy(pathOrigen, fis); Path pathOrigenDestino = Paths.get("c:\\Temp\\tempDestino"); Files.move(pathOrigen, pathOrigenDestino); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Files.delete(pathOrigen); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Files.deleteIfExists(pathOrigen); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }6: Escucha activa de eventos sobre ficheros
/** * This initiates the police */ private voidinit() { path= Paths.get("C:\Temp\temp\"); try{ watchService= FileSystems.getDefault().newWatchService(); path.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY); } catch(IOException e) { System.out.println("IOException"+ e.getMessage()); } } /** * The police will start making rounds */ private voiddoRounds() { WatchKey key = null; while(true) { try{ key = watchService.take(); for(WatchEvent> event : key.pollEvents()) { Kind> kind = event.kind(); System.out.println("Event on "+ event.context().toString() + " is " + kind); } } catch(InterruptedException e) { System.out.println("InterruptedException: "+e.getMessage()); } booleanreset = key.reset(); if(!reset) break; } }7: Tareas recursivas
package forkJoinDemoEjemploAsíncrono; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.concurrent.RecursiveTask; public class ProcesadorDeDirectorios extends RecursiveTask> { private static final long serialVersionUID = 1L; //El path que será procesado private final String path; //Extensión de ficheros en cuestión private final String extension; //Constructor public FolderProcessor(String path, String extension) { this.path = path; this.extension = extension; } //Implementación del método compute, que debe devolver un listado de Strings, pues aśi fue parametrizado RecursiveTask @Override protected List
compute() { //La lista de los nombres de los ficheros almacenados en el directorio List list = new ArrayList (); //Tareas que almacenan las subtareas que van a procesar los subdirectorios almacenados //en el directorio padre List tasks = new ArrayList (); //Obtiene el contenido del directorio File file = new File(path); File content[] = file.listFiles(); //Para cada elemento del directorio, si hay un subdirectorio, cra un objeto FolderProcessor if (content != null) { for (int i = 0; i < content.length; i++) { if (content[i].isDirectory()) { FolderProcessor task = new FolderProcessor(content[i].getAbsolutePath(), extension); task.fork(); tasks.add(task); } //Otherwise, compare the extension of the file with the extension you are looking for using the checkFile() method //En otro caso, compara la extensión del fichero con la que se busca (definida //en el método checkfile() else { if (checkFile(content[i].getName())) { list.add(content[i].getAbsolutePath()); } } } } //Si el listado de tareas de FolderProcesar supera los 50 elementos, se muestra un mensaje //por consola if (tasks.size() > 50) { System.out.printf("%s: %d Tareas ejecutadas.\n", file.getAbsolutePath(), tasks.size()); } //Añade a la lista de ficheros los resultados returnados por las subtareas ejecutadas en //esta tarea addResultsFromTasks(list, tasks); //Retorna el listado de strings. return list; } //Para cada tarea almacenada en la lista de tareas, llama al método join() que esperará //a la finalización y retornará entonces el resultado de las tareas. private void addResultsFromTasks(List list, List tasks) { for (FolderProcessor item : tasks) { list.addAll(item.join()); } } //Compara si el nombre del fichero pasado como parámetro tiene como extensión la que buscamos private boolean checkFile(String name) { return name.endsWith(extension); } } package forkJoinDemoAsyncExample; import java.util.List; import java.util.concurrent.ForkJoinPool; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { //Crea el pool fork join usando el constructor por defecto. ForkJoinPool pool = new ForkJoinPool(); //Crea tres tareas FolderProcessor. Inicializa cada una de ellas con un path //de directorio diferente FolderProcessor system = new FolderProcessor("C:\\Windows", "log"); FolderProcessor apps = new FolderProcessor("C:\\Program Files", "log"); FolderProcessor documents = new FolderProcessor("C:\\Documents And Settings", "log"); //Ejecuta las tres tareas en el pool mediante el método execute. pool.execute(system); pool.execute(apps); pool.execute(documents); //Escribe a la consola información sobre el estado del pool cada segunda, hasta que //las tres tareas han finalizado su ejecución do { System.out.printf("******************************************\n"); System.out.printf("Main: Paralelismo: %d\n", pool.getParallelism()); System.out.printf("Main: Hilos activos: %d\n", pool.getActiveThreadCount()); System.out.printf("Main: Contados de tareas: %d\n", pool.getQueuedTaskCount()); System.out.printf("******************************************\n"); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } while ((!system.isDone()) || (!apps.isDone()) || (!documents.isDone())); //Para el pool de fork join pool.shutdown(); //Escribe el número de resultados generados por cada tarea a la consola List results; results = system.join(); System.out.printf("System: %d ficheros encontrados.\n", results.size()); results = apps.join(); System.out.printf("Apps: %d ficheros encontrados.\n", results.size()); results = documents.join(); System.out.printf("Documents: %d ficheros encontrados.\n", results.size()); } }
Muchas gracias,
Un saludo