Diferència entre revisions de la pàgina «M3 - Programació estructurada / Continguts UF3: Clase File»

De wikiserver
Dreceres ràpides: navegació, cerca
(Es crea la pàgina amb «3 1. Introducció Entre les funcions d’un sistema operatiu hi ha la d’oferir mecanismes genèrics per gestionar sistemes de fitxers. Normalment,...».)
 
(Demostració de la classe File)
 
(Hi ha 15 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
3
+
==Introducció==
1. Introducció
+
 
Entre les funcions d’un sistema operatiu hi ha la d’oferir mecanismes genèrics per gestionar  
+
Entre les funcions d’un sistema operatiu hi ha la d’oferir mecanismes genèrics per gestionar sistemes de fitxers. En la immensa majoria dels casos es gestionen mitjançant una estructura jeràrquica amb carpetes i fitxers.
sistemes de fitxers. Normalment,  dins  un  sistema  operatiu  modern  (
+
 
o ja no tant modern), s’espera
+
Molts llenguatges de programació, disposen biblioteques que permeten accedir als mecanismes interns que ofereix el sistema, i per tant, realitzar operacions típiques d'un explorador de fitxers.
disposar d’algun tipus d’interfície o explorador per poder gestionar fitxers, ja sigui gràficament o
+
 
usant una línia d’ordres de text. Si bé la manera com les dades es desen realment en els dispositius
+
Java, disposa d'un conjunt de classes incloses dins del package java.io amb les quals, és possible dur a terme pràcticament qualsevol tasca sobre el sistema de fitxers.
físics d’emmagatzematge
+
 
de dades pot ser molt diferent segons cada tipus (magnètic, òptic, etc.), la
+
==La classe File==
manera de gestionar el sistema de fitxers sol ser molt similar en la immensa majoria dels casos: una  
+
 
estructura jeràrquica amb carpetes i fitxers. Ara bé, en realitat, la capacit
+
:*Tipus compost.
at d’operar amb el sistema
+
 
de  fitxers  no  és  exclusiva  de  la  interfície  oferta  pel  sistema  operatiu.  Molts llenguatges de  
+
:*Pertany al package java.io. Cal importar-la abans de poder-la usar.
programació proporcionen  biblioteques que permeten accedir directament  als mecanismes interns  
+
<pre>
que ofereix el sistema, de manera que és
+
import java.io.File;
possible crear codi font des del qual, amb les instruccions
+
</pre>
adients, es poden realitzar operacions típiques d’un explorador de fitxers. De fet, les interfícies
+
 
ofertes,  com  un explorador de fitxers,  són  un  programa  com  qualsevol  altre,  el  qual,  usant
+
:*Permet manipular qualsevol aspecte vinculat al sistema de fitxers.
preci
+
 
sament aquestes llibreries, permet que l’usuari gestioni fitxers fàcilment. Però no és estrany
+
'''Compte!!'''
trobar altres aplicacions amb la seva pròpia interfície per gestionar fitxers, encara que només sigui
+
 
per  poder  seleccionar  quin  cal  carregar  o  desar  en  un  momen
+
:*La classe File indica una ruta dins el sistema de fitxers.
t  donat:  editors  de  text,  compressors,
+
 
reproductors de música, etc.
+
:*Serveix per fer operacions tant sobre rutes al sistema de fitxers que ja existeixin com no existents.  
Java no és cap excepció oferint aquest tipus de biblioteca, en forma del conjunt de classes incloses  
+
 
dins del package java.io. Mitjançant la invocació dels mètodes adients definits d’aques
+
:*Es pot usar tant per manipular fitxers de dades com directoris.
tes classes, és  
+
 
possible dur a terme pràcticament qualsevol tasca sobre el sistema de fitxers.
+
===Inicialització===
4
+
 
2
+
<pre>
. La classe File
 
La peça més bàsica per poder operar amb fitxers, independentment del seu tipus, en un programa fet
 
en  Java  és  el  tipus  compost File. Aquesta
 
classe pertany al package java.io. Per tant, l’haureu
 
d’importar  abans de poder usar
 
-
 
la. Aquesta  us  permet  manipular qualsevol aspecte vinculat al  
 
sistema de fitxers. Ara bé, cal anar amb compte, ja que el seu nom (“fitxer”, en anglès) és una mica
 
enganyós
 
, ja que no es refereix exactament a un fitxer.
 
 
La classe File indica, més concretament, una ruta dins el sistema de fitxers.
 
Concretament, serveix per fer operacions tant sobre rutes al sistema de fitxers que ja existeixin com  
 
no existents. A  més  a  més,
 
aquesta  classe  es  pot usar tant per manipular fitxers de dades com  
 
directoris
 
2
 
.1 Inicialització
 
Com qualsevol altra classe, abans de poder treballar amb File, a part d’importar
 
-
 
la correctament, cal
 
inicialitzar
 
-
 
la, de manera que sigui possible invocar el
 
s seus mètodes. En aquest cas, per fer
 
-
 
ho cal
 
incloure  com  a  paràmetre  una  cadena  de  text  corresponent  a  la  ruta  sobre  la  qual  es  volen  dur  a
 
terme les operacions.
 
 
File f = new File (String ruta)
 
File f = new File (String ruta)
File file = new File("c:
+
 
\
+
File file = new File("c:\\data\\input-file.txt");
\
+
</pre>
data
+
 
\
+
:*File s'inicialitza independentment de que tots els elements de la ruta existeixin o no.
\
+
 
input
+
:*No és fins que es criden els diferents mètodes definits a File, o fins que s’hi escriuen o s’hi llegeixen dades, que realment s’accedeix al sistema de fitxers i es processa la informació.
-
+
 
file.txt");
+
'''Compte!!'''
Una  rut
+
 
a és la forma general d’un nom de fitxer o carpeta, de manera que identifica únicament la
+
La ruta pot ser diferent segons el sistema operatiu:
seva localització en el sistema de fitxers. Cadascun dels elements de la ruta poden existir realment o  
+
 
no, però això no impedeix de cap manera poder inicialitzar File
+
:*Windows inicia les rutes per un nom d’unitat (C:,  D:,  etc.), els sistemes operatius basats en Unix comencen directament amb una barra (”/”).  
. En realitat, el seu comportament és
+
 
com una declaració d’intencions sobre quina ruta del sistema de fitxers es vol interactuar. No és fins  
+
:*Els sistemes Unix usen la barra (”/”) mentre que el Windows la contrabarra (“\”).
que es criden els diferents mètodes definits a File, o fins que s’hi escriuen o s’hi llegeixen dades,  
+
 
que realment  
+
'''Portabilitat:''' la classe File disposa de la constant '''File.separator''', que permet especificar separadors de ruta dins una  cadena de text de manera genèrica.
s’accedeix al sistema de fitxers i es processa la informació.
+
<pre>
Un aspecte important que cal tenir present en inicialitzar File és tenir sempre present que el format
+
  File f = new File(File.separator + "usr" + File.separator + "bin");
de la  cadena de text que conforma la ruta pot ser diferent segons el sistema operatiu sobre
+
</pre>
el qual
+
 
s’executa l’aplicació. Per exemple, el sistema operatiu
+
:*Java adopta per defecte el sistema Unix com a separador per defecte (usant la barra, /).
Windows inicia les rutes per un nom d’unitat  
+
 
(C:,  D:,  etc.), mentre  que  els sistemes operatius basats en Unix comencen directament amb una  
+
'''Compte!!'''
barra (”/”). A més a més, els diferents sistemes oper
+
 
atius  usen  diferents  separadors  dins  les  rutes.
+
:*En un sistema Windows la contrabarra no és un caràcter permès dins una cadena de text, i serveix per declarar valors especials d’escapament (\n salt de línia, \t tabulador, etc.).
Per exemple, els sistemes Unix usen la barra (”/”) mentre que el Windows la contrabarra (“
+
 
\
+
:*File és un tipus compost, per tant, cada cop que s'inicialitza, a l’identificador emprat s’hi assigna un valor associat a aquella ruta. A partir de llavors, l’identificador actua com una variable dins el programa. Per operar amb diferents rutes alhora caldrà inicialitzar i manipular diferents variables.
”).
+
 
5
+
===Alguns mètodes===
Per  generar  aplicacions  totalment  portables  en  diferents  sistemes,  la   classe   File   ofereix  la  
+
 
possibilitat d’acced
+
{|border="2" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
ir a una constant declarada dins d’aquesta classe per especificar separadors de  
+
! align="left" width="170 px" style="background:Lavender; color:Black"|Mètode
ruta dins una  cadena de text de manera genèrica,  anomenada
+
! align="left" width="300 px" style="background:Lavender; color:Black"|Descripció
File.separator
+
|-
. Quan s’usa, el seu
+
|boolean canExecute()||Retorna true si l’aplicació actual pot executar un fitxer.
valor és el que correspon segons el sistema operatiu on s’executa el programa. L’a
+
|-
ccés  a  aquesta
+
|boolean canRead()||Retorna true si l’aplicació actual pot llegir un fitxer.
constant es fa de manera molt semblant a com s’invoca un mètode estàtic.
+
|-
File f = new File(File.separator + "usr" + File.separator + "bin");
+
|boolean canWrite()||Retorna true si l’aplicació actual pot escriure en un arxiu
De  totes  maneres,  Java adopta per defecte el sistema Unix com a separador per defecte (usant la  
+
|-
bar
+
|boolean createNewFile()||Crea un nou fitxer buit anomenat per aquesta ruta només si el fitxer no existeix. Retorna cert si l’ha pogut crear.
ra, /), independentment del sistema operatiu. Per tant, en un sistema
+
|-
Windows és possible separar
+
|boolean delete()||Elimina el fitxer o directori. Retorna si ha tingut èxit.
una ruta amb aquest caràcter i Java ho sabrà interpretar correctament. A partir d’ara, tots exemples
+
|-
es basaran en un sistema Windows (rutes iniciades amb un
+
|boolean exists()||Retornar true si el nom especificat com a argument pel constructor és un arxiu o directori.
nom d’unitat„ C:, D:, etc.), però s’usarà
+
|-
la barra per referir
+
|boolean isFile()||Retorna true si el nom especificat com a argument pel constructor és un arxiu.
-
+
|-
se a qualsevol ruta.
+
|boolean isDirectory()||Retorna true si el nom especificat com a argument pel constructor és un directori.
De fet, en fer un programa en Java en un sistema Windows cal ser especialment acurat amb aquest
+
|-
fet,  ja  que  la contrabarra no és un caràcter permès dins una cadena de text
+
|boolean isAbsolute()||Retorna true si els arguments especificats pel constructor de File indiquen una ruta absoluta a un arxiu o directori.
, i serveix per declarar  
+
|-
valors especials d’escapament (
+
|boolean isHidden()||Retorna true si és un fitxer ocult.
\
+
|-
n salt de línia,  
+
|String getAbsolutePath()||Retorna una cadena amb la ruta absoluta de l’arxiu o directori.
\
+
|-
t tabulador, etc.).
+
|String getName()||Retorna una cadena amb el nom de l’arxiu o directori.
Un altre aspecte molt important en inicialitzar File és que es tracta d’una classe que defineix un  
+
|-
tipus compost (com  String), i  no  un  simple  repositori  de  mètod
+
|String getPath()||Retorna una cadena amb la ruta de l’arxiu o directori.
es  (com  Scanner  o  Random).  En
+
|-
conseqüència, cada cop que s’inicialitza, a l’identificador emprat s’hi assigna un valor associat a  
+
|String getParent()||Retorna una cadena amb el directori pare.
aquella ruta. A partir de llavors, l’identificador actua com una variable dins el programa. Per operar  
+
|-
amb diferents rutes alh
+
|long length()||Retorna la longitud de l’arxiu en bytes. Si és un directori retorna 0.
ora caldrà inicialitzar i manipular diferents variables, igual que es faria amb
+
|}
diferents cadenes d
+
 
 +
===Exemples===
 +
 
 +
====Comprovació de l'existència d'un fitxer====
 +
 
 +
Una vegada creada la instància de File podem comprovar si aquest fitxer realment existeix. Cal recordar que en crear l'objecte File no donarà error encara que aquest fitxer (ruta) no existeixi.
 +
 
 +
Per a comprovar-ho cal fer servir el mètode exists.
 +
<pre>
 +
  File fitxer = new File("c:\\data\\input-file.txt");
 +
  if (fitxer.exists()){
 +
      System.out.println("Ja existeix")
 +
  }
 +
</pre>
 +
 
 +
====Creació d'un directori====
 +
 
 +
Amb la classe File també podem crear directoris si no existeixen. Aquesta classe conté els mètodes mkdir i mkdirs amb aquest propòsit.
 +
 
 +
El primer mètode crea un simple directori si aquest no existeix. Per exemple:
 +
<pre>
 +
    File directori = new File("c:\\users\\albert\\m3");
 +
    boolean creat = directori.mkdir();
 +
</pre>
 +
Donant per fet que existeix la ruta c:\users\albert aquest mètode crearà un subdirectori anomenat m3. El mètode retorna true si el directori ha estat creat.
 +
 
 +
El mètode mkdirs crea tots els directoris que no existeixen en la ruta de l'objecte. Per exemple:
 +
<pre>
 +
  File directori = new File("c:\\users\\albert\\m3");
 +
  boolean creat = directori.mkdirs();
 +
</pre>
 +
 
 +
Donant per fet que existeix el disc C, aquest codi ens crearia tots els directoris de la ruta. El mètode
 +
retorna cert si tots els directoris han estat creats.
 +
 
 +
====Reanomenar o moure un fitxer====
 +
 
 +
Per reanomenar (o moure) un fitxer cal fer servir el mètode renameTo. Per exemple:
 +
<pre>
 +
  File fitxer = new File("c:\\data\\input-file.txt");
 +
  boolean visca = fitxer.renameTo(new File("c:\\data\\new-file.txt"));
 +
</pre>
 +
 
 +
El nou nom fitxer passat al mètode no té perquè estar al mateix directori i per tant també el podem moure. El mètode retorna cert si ha tingut èxit. Pensa que pot fallar per diferents motius, que el fitxer estigués obert, falta de permisos, etc.
 +
 
 +
====Esborrar un fitxer====
 +
 
 +
Només cal cridar al mètode delete. Per exemple:
 +
<pre>
 +
  File fitxer = new File("c:\\data\\input-file.txt");
 +
  boolean visca = fitxer.delete();
 +
</pre>
 +
 +
El mètode retorna cert si ha tingut èxit. Pensa que pot fallar per diferents motius, que el fitxer
 +
estigués obert, falta de permisos, etc.
 +
 
 +
====Llegir la llista de fitxers d'un directori====
 +
 
 +
Podem obtenir la llista de tots els fitxers d'un directori amb els mètodes list o listFiles. El primer mètode retorna una taula de String amb els noms dels fitxers i directoris d'aquesta ruta. El mètode listFiles retorna el mateix però amb una taula de objectes de tipus File que acostuma a ser més pràctic.
 +
<pre>
 +
  File fitxer = new File("c:\\data");
 +
  String[] nomsFitxers = fitxer.list();
 +
  File[] fitxers = fitxer.listFiles();
 +
</pre>
 +
 
 +
===Demostració de la classe File===
 +
 
 +
<pre>
 +
package demostraciofile;
 +
 
 +
import java.io.File;
 +
import java.util.Scanner;
 +
 
 +
public class DemostracioFile {
 +
 
 +
    public static void main(String args[]) {
 +
 
 +
      Scanner entrada = new Scanner(System.in);
 +
      DemostracioFile aplicacio = new DemostracioFile();
 +
      System.out.print("Escriu el nom de l'arxiu o directori: ");
 +
      aplicacio.analitzarRuta(entrada.nextLine());
 +
    }
 +
 
 +
 
 +
    public void analitzarRuta(String ruta) {
 +
 
 +
      File nom = new File(ruta);
 +
 
 +
      if (nom.exists()) {
 +
        System.out.printf("%s%s\n%s\n%s\n%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s",nom.getName(), " existeix",
 +
                          (nom.isFile() ? "es un arxiu" : "no es un arxiu"),
 +
                          (nom.isDirectory() ? "es un directori" : "no es un directori"),
 +
                          (nom.isAbsolute() ? "es ruta absoluta" : "no es ruta absoluta"),
 +
                          "Ultima modificacio: ", nom.lastModified(),
 +
                          "Mida: ", nom.length(),
 +
                          "Ruta: ", nom.getPath(), "Ruta absoluta: ",
 +
                          nom.getAbsolutePath(), "Pare: ", nom.getParent());
 +
 
 +
        if (nom.isDirectory()) {
 +
            String directori[] = nom.list();
 +
            System.out.println("\n\nContingut del directori:\n");
 +
            for (String nomDirectori : directori) {
 +
              System.out.printf("%s\n", nomDirectori);
 +
            }
 +
        }
 +
      }
 +
      else {
 +
          System.out.printf("%s %s", ruta, "no existeix.");
 +
      }
 +
    }
 +
  }
 +
</pre>

Revisió de 13:03, 6 abr 2022

Introducció

Entre les funcions d’un sistema operatiu hi ha la d’oferir mecanismes genèrics per gestionar sistemes de fitxers. En la immensa majoria dels casos es gestionen mitjançant una estructura jeràrquica amb carpetes i fitxers.

Molts llenguatges de programació, disposen biblioteques que permeten accedir als mecanismes interns que ofereix el sistema, i per tant, realitzar operacions típiques d'un explorador de fitxers.

Java, disposa d'un conjunt de classes incloses dins del package java.io amb les quals, és possible dur a terme pràcticament qualsevol tasca sobre el sistema de fitxers.

La classe File

  • Tipus compost.
  • Pertany al package java.io. Cal importar-la abans de poder-la usar.
import java.io.File;
  • Permet manipular qualsevol aspecte vinculat al sistema de fitxers.

Compte!!

  • La classe File indica una ruta dins el sistema de fitxers.
  • Serveix per fer operacions tant sobre rutes al sistema de fitxers que ja existeixin com no existents.
  • Es pot usar tant per manipular fitxers de dades com directoris.

Inicialització

File f = new File (String ruta)

File file = new File("c:\\data\\input-file.txt");
  • File s'inicialitza independentment de que tots els elements de la ruta existeixin o no.
  • No és fins que es criden els diferents mètodes definits a File, o fins que s’hi escriuen o s’hi llegeixen dades, que realment s’accedeix al sistema de fitxers i es processa la informació.

Compte!!

La ruta pot ser diferent segons el sistema operatiu:

  • Windows inicia les rutes per un nom d’unitat (C:, D:, etc.), els sistemes operatius basats en Unix comencen directament amb una barra (”/”).
  • Els sistemes Unix usen la barra (”/”) mentre que el Windows la contrabarra (“\”).

Portabilitat: la classe File disposa de la constant File.separator, que permet especificar separadors de ruta dins una cadena de text de manera genèrica.

   File f = new File(File.separator + "usr" + File.separator + "bin");
  • Java adopta per defecte el sistema Unix com a separador per defecte (usant la barra, /).

Compte!!

  • En un sistema Windows la contrabarra no és un caràcter permès dins una cadena de text, i serveix per declarar valors especials d’escapament (\n salt de línia, \t tabulador, etc.).
  • File és un tipus compost, per tant, cada cop que s'inicialitza, a l’identificador emprat s’hi assigna un valor associat a aquella ruta. A partir de llavors, l’identificador actua com una variable dins el programa. Per operar amb diferents rutes alhora caldrà inicialitzar i manipular diferents variables.

Alguns mètodes

Mètode Descripció
boolean canExecute() Retorna true si l’aplicació actual pot executar un fitxer.
boolean canRead() Retorna true si l’aplicació actual pot llegir un fitxer.
boolean canWrite() Retorna true si l’aplicació actual pot escriure en un arxiu
boolean createNewFile() Crea un nou fitxer buit anomenat per aquesta ruta només si el fitxer no existeix. Retorna cert si l’ha pogut crear.
boolean delete() Elimina el fitxer o directori. Retorna si ha tingut èxit.
boolean exists() Retornar true si el nom especificat com a argument pel constructor és un arxiu o directori.
boolean isFile() Retorna true si el nom especificat com a argument pel constructor és un arxiu.
boolean isDirectory() Retorna true si el nom especificat com a argument pel constructor és un directori.
boolean isAbsolute() Retorna true si els arguments especificats pel constructor de File indiquen una ruta absoluta a un arxiu o directori.
boolean isHidden() Retorna true si és un fitxer ocult.
String getAbsolutePath() Retorna una cadena amb la ruta absoluta de l’arxiu o directori.
String getName() Retorna una cadena amb el nom de l’arxiu o directori.
String getPath() Retorna una cadena amb la ruta de l’arxiu o directori.
String getParent() Retorna una cadena amb el directori pare.
long length() Retorna la longitud de l’arxiu en bytes. Si és un directori retorna 0.

Exemples

Comprovació de l'existència d'un fitxer

Una vegada creada la instància de File podem comprovar si aquest fitxer realment existeix. Cal recordar que en crear l'objecte File no donarà error encara que aquest fitxer (ruta) no existeixi.

Per a comprovar-ho cal fer servir el mètode exists.

   File fitxer = new File("c:\\data\\input-file.txt");
   if (fitxer.exists()){
      System.out.println("Ja existeix")
   } 

Creació d'un directori

Amb la classe File també podem crear directoris si no existeixen. Aquesta classe conté els mètodes mkdir i mkdirs amb aquest propòsit.

El primer mètode crea un simple directori si aquest no existeix. Per exemple:

    File directori = new File("c:\\users\\albert\\m3");
    boolean creat = directori.mkdir();

Donant per fet que existeix la ruta c:\users\albert aquest mètode crearà un subdirectori anomenat m3. El mètode retorna true si el directori ha estat creat.

El mètode mkdirs crea tots els directoris que no existeixen en la ruta de l'objecte. Per exemple:

   File directori = new File("c:\\users\\albert\\m3");
   boolean creat = directori.mkdirs();

Donant per fet que existeix el disc C, aquest codi ens crearia tots els directoris de la ruta. El mètode retorna cert si tots els directoris han estat creats.

Reanomenar o moure un fitxer

Per reanomenar (o moure) un fitxer cal fer servir el mètode renameTo. Per exemple:

   File fitxer = new File("c:\\data\\input-file.txt");
   boolean visca = fitxer.renameTo(new File("c:\\data\\new-file.txt"));

El nou nom fitxer passat al mètode no té perquè estar al mateix directori i per tant també el podem moure. El mètode retorna cert si ha tingut èxit. Pensa que pot fallar per diferents motius, que el fitxer estigués obert, falta de permisos, etc.

Esborrar un fitxer

Només cal cridar al mètode delete. Per exemple:

   File fitxer = new File("c:\\data\\input-file.txt");
   boolean visca = fitxer.delete();

El mètode retorna cert si ha tingut èxit. Pensa que pot fallar per diferents motius, que el fitxer estigués obert, falta de permisos, etc.

Llegir la llista de fitxers d'un directori

Podem obtenir la llista de tots els fitxers d'un directori amb els mètodes list o listFiles. El primer mètode retorna una taula de String amb els noms dels fitxers i directoris d'aquesta ruta. El mètode listFiles retorna el mateix però amb una taula de objectes de tipus File que acostuma a ser més pràctic.

   File fitxer = new File("c:\\data");
   String[] nomsFitxers = fitxer.list();
   File[] fitxers = fitxer.listFiles();

Demostració de la classe File

package demostraciofile;

import java.io.File;
import java.util.Scanner;

public class DemostracioFile {

    public static void main(String args[]) {

      Scanner entrada = new Scanner(System.in);
      DemostracioFile aplicacio = new DemostracioFile();
      System.out.print("Escriu el nom de l'arxiu o directori: ");
      aplicacio.analitzarRuta(entrada.nextLine());
    }


    public void analitzarRuta(String ruta) {

      File nom = new File(ruta);

      if (nom.exists()) {
         System.out.printf("%s%s\n%s\n%s\n%s\n%s%s\n%s%s\n%s%s\n%s%s\n%s%s",nom.getName(), " existeix",
                          (nom.isFile() ? "es un arxiu" : "no es un arxiu"),
                          (nom.isDirectory() ? "es un directori" : "no es un directori"),
                          (nom.isAbsolute() ? "es ruta absoluta" : "no es ruta absoluta"), 
                          "Ultima modificacio: ", nom.lastModified(), 
                          "Mida: ", nom.length(), 
                          "Ruta: ", nom.getPath(), "Ruta absoluta: ",
                          nom.getAbsolutePath(), "Pare: ", nom.getParent());

         if (nom.isDirectory()) {
            String directori[] = nom.list();
            System.out.println("\n\nContingut del directori:\n");
            for (String nomDirectori : directori) {
               System.out.printf("%s\n", nomDirectori);
            }
         }
       }
       else {
          System.out.printf("%s %s", ruta, "no existeix.");
       }
     }
   }