SERVEI DE FITXERS






 

Introducció

Propósit

El Servei de Fitxers té com a objectiu principal oferir la possibilitat de gestió i accés a fitxers. Les seves característiques es troben diferenciades en:

  1. Creació, esborrat i cópia de fitxers
  2. Obtenció d'informació dels fitxers (path, nom, extensió, etc.)
  3. Manipulació i obtenció del contingut dels fitxers mitjançant l'ús de streams o fluxos d'entrada/sortida

Context i Escenaris d'Ús

El Servei de Fitxers es troba dins dels serveis d'integració de canigo.

Versions i Dependències

Les dependències descrites a la següent url son requerides per tal de compilar i fer funcionar el projecte:
Dependències Servei de Fitxers

A qui va dirigit

Aquest document va dirigit als següents perfils:

  1. Programador. Per conéixer l'ús del servei
  2. Arquitecte. Per conéixer quins són els components i la configuració del servei
  3. Administrador. Per conéixer cóm configurar el servei en cadascun dels entorns en cas de necessitat

Documents i Fonts de Referència

[1] Commons-io http://jakarta.apache.org/commons/io/

Glossari

Commons IO

Llibreria de Jakarta en Java que permet la interacció amb fitxers

Descripció Detallada

Arquitectura i Components

canigo ofereix una arquitectura de gestió de fitxers deslligada de la implementació.

Actualment, i a causa del seu grau de facilitat canigo es basa en la llibreria del projecte Jakarta Commons IO. No obstant s'han encapsulat els mètodes "static" de la classes utilitàries amb interfícies per a garantir l'estabilitat de l'API a llarg termini.

Els components podem classificar-los en:
  1. Interfícies i Components Genérics. Interfícies del servei i components d'ús general amb independència de la implementació escollida.
  2. Implementació de les interfícies basada en Commons IO
    Es pot trobar tota la documentació JavaDoc y el codi font referent aquests components a les següents urls:

JavaDoc: http://canigo.ctti.gencat.net/confluence/canigodocs/site/canigo2_0/canigo-services-file/apidocs/index.html
Codi Font:  http://canigo.ctti.gencat.net/confluence/canigodocs/site/canigo2_0/canigo-services-file/xref/index.html

Instal- lació i Configuració

Instal- lació

La instal- lació del servei requereix de la utilització de la llibreria 'canigo-services-file' i les dependències indicades a l'apartat 'Introducció-Versions i Dependències'.

Configuració

Fitxer de configuració: canigo-services-exceptions.xml

Ubicació proposada: <PROJECT_ROOT>/src/main/resources/spring

La configuració del Servei de Fitxers és força senzilla, doncs només cal definir els beans que farem servir com a implementacions. En l'actualitat implica la definició dels següents beans:

  1. fileSystemService. Indicar la implementació escollida en el camp class i indicar les propietats:
Propietat Requerit Descripció
lazy-init Indicar 'true'
singleton No Indicar 'true', doncs els mètodes són estàtics i no es poden crear instàncies. Per defecte és 'true'
  1. fileNamingService. Indicar la implementació escollida en el camp class i indicar les mateixes propietats que 'fileSystemService'
  1. ioService. Indicar la implementació escollida en el camp class i indicar les mateixes propietats que 'fileSystemService'

Exemple:

<beans>

<bean  id="fileSystemService"

class="net.gencat.ctti.canigo.services.file.impl.commons.FileSystemServiceCommonsImpl"

lazy-init="true"

singleton="true"/>

<bean  id="fileNamingService"

class="net.gencat.ctti.canigo.services.file.impl.commons.FileNamingServiceCommonsImpl"

lazy-init="true"

singleton="true"/>

<bean  id="ioService"

class="net.gencat.ctti.canigo.services.file.impl.commons.IOServiceCommonsImpl"

lazy-init="true"

singleton="true"/>

</beans>





Utilització del Servei

La utilització del Servei es basa en l´ús de les interfícies definides a l'apartat 'Arquitectura i Components'. Consultar l'apartat 'Exemples' per veure alguns exemples de tractament de fitxers amb la API proporcionada.

Exemples

Exemples d'Operacions de Manteniment de Directoris i Fitxers

Crear una nova carpeta



File newFolder = new  File("D:/WEBAPP/New Folder");

fileSystemService.forceMkdir(newFolder);





Eliminar una carpeta



fileSystemService.deleteDirectory(newFolder);




Crear un fitxer



Aquest comandament usa  el constructor de java.io.File.

 File newFile = new File("D:/WEBAPP/New Folder/New Text Document.txt");




Eliminar un fitxer



File file = new  File("D:/WEBAPP/New Folder/New Text  Document.txt");

fileSystemService.forceDelete(file);






Copiar una carpeta



File folder = new  File("D:/WEBAPP/New Folder");

fileSystemService.copyDirectory(folder, new  File("D:/WEBAPP/Destination"));






Copiar un fitxer



File sourceFile = new  File("D:/WEBAPP/New Folder/New Text  Document.txt");

fileSystemService.copyFileToDirectory(sourceFile, new  File("D:/WEBAPP/Dest"));





Llegir un fitxer

  • # Cap a un String*
    File srcFile = new File("D:/WEBAPP/New Folder/New Text  Document.txt");
    
    String destinationString =  fileSystemService.readFileToString(srcFile);





  • # Cap a una llista de cadenes*
    File srcFile = new File("D:/WEBAPP/New Folder/New Text  Document.txt");
    
    List destinationList = fileSystemService.readLines(srcFile,  "ISO-8859-1");
    
    Iterator iter = destinationList.iterator();
    
    while  (iter.hasNext()) {
    
    String line = (String) iter.next();
    
    //  Process...
    
    }



Exemple d'Obtenció d'Informació dels Fitxers

En aquest exemple es pot observar cóm podem obtenir informació d'un fitxer.

File file = new File("D:/WEBAPP/New Folder/New Text Document.txt");
String prefix = fileNamingService.getPrefix(file.getPath());
// => D:/

String path= fileNamingService.getPath(file.getPath());
// => WEBAPP/New Folder/

String baseName = fileNamingService.getBaseName(file.getPath());
// => New Text Document

String extension = fileNamingService.getExtension(file.getPath());
// => txt





Exemple de Lectura del Contingut d'un Recurs

IOService conté mètodes utilitaris per a llegir, escriure i llegir amb fluxos de tipus InputStream, OutputStream, Reader i Writer.

Per exemple, podríem llegir els bytes des d'una URL, i imprimir-los en la pantalla. Amb les classes de Java clàssiques del package java.io, el codi seria el següent:

InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
try {
    InputStreamReader inR = new InputStreamReader( in );
    BufferedReader buf = new BufferedReader( inR );
    String line;
    while ( ( line = buf.readLine() ) != null ) {
        System.out.println( line );
    }
}
finally{
    in.close();
}





Mentre que amb l'ús del servei IOService, el codi serà:

InputStream in = new URL( "http://jakarta.apache.org" ).openStream();
try {
    System.out.println( ioService.toString( in ) );
}
finally {
    IOUtils.closeQuietly(in);
}


Cóm veiem, hem guanyat en senzillesa.