Apache Commons IO - Guida rapida

La libreria Apache Commons IO fornisce varie classi di utilità per operazioni comuni per File IO che coprono un'ampia gamma di casi d'uso. Aiuta a evitare di scrivere codice boilerplate.

La libreria Apache Commons IO fornisce classi per le seguenti categorie:

Classi di utilità

Queste classi che sono sotto org.apache.commons.iopacchetto, fornisce il confronto di file e stringhe. Di seguito sono riportati alcuni esempi.

  • IOUtils- Fornisce metodi di utilità per leggere, scrivere e copiare file. I metodi funzionano con InputStream, OutputStream, Reader e Writer.

  • FilenameUtils- Fornisce un metodo per lavorare con i nomi dei file senza utilizzare File Object. Funziona su diversi sistemi operativi in ​​modo simile.

  • FileUtils - Fornisce un metodo per manipolare i file come lo spostamento, l'apertura, il controllo dell'esistenza, la lettura del file, ecc. Questi metodi utilizzano File Object.

  • IOCase - Fornisce un metodo per la manipolazione e il confronto delle stringhe.

  • FileSystemUtils - Fornisce un metodo per ottenere lo spazio libero su un'unità disco.

  • LineIterator - Fornisce un modo flessibile per lavorare con un file basato su riga.

Filtra classi

Le classi di filtro che si trovano nel pacchetto org.apache.commons.io.filefilter, forniscono metodi per filtrare i file in base a criteri logici invece di noiosi confronti basati su stringhe. Di seguito sono riportati alcuni esempi.

  • NameFileFilter - Filtra i nomi dei file per un nome.

  • WildcardFileFilter - Filtra i file utilizzando i caratteri jolly forniti.

  • SuffixFileFilter- Filtra i file in base al suffisso. Viene utilizzato per recuperare tutti i file di un tipo particolare.

  • PrefixFileFilter - Filtra i file in base al prefisso.

  • OrFileFilter- Fornisce logica OR condizionale in un elenco di filtri di file. Restituisce vero, se qualche filtro nell'elenco restituisce vero. In caso contrario, restituisce false.

  • AndFileFilter- Fornisce condizionale e logica in un elenco di filtri di file. Restituisce false se qualsiasi filtro nell'elenco restituisce false. In caso contrario, restituisce true.

Classi di File Monitor

Classi di file monitor che si trovano sotto org.apache.commons.io.monitorpacchetto, fornisce il controllo per tenere traccia delle modifiche in un file o una cartella specifici e consente di eseguire azioni di conseguenza sulle modifiche. Di seguito sono riportati alcuni esempi.

  • FileEntry- Fornisce lo stato di un file o di una directory. Attributi di file in un determinato momento.

  • FileAlterationObserver - Rappresenta lo stato dei file sotto una directory principale, controlla il file system e notifica ai listener gli eventi di creazione, modifica o eliminazione.

  • FileAlterationMonitor - Rappresenta un thread che genera un thread di monitoraggio che attiva qualsiasi FileAlterationObserver registrato a un intervallo specificato.

Classi di confronto

Classi di monitoraggio file in org.apache.commons.io.comparator pacchetto permette di confrontare e ordinare facilmente file e directory.

  • NameFileComparator - Confronta i nomi di due file.

  • SizeFileComparator - Confronta le dimensioni di due file.

  • LastModifiedFileComparator - Confronta le ultime date di modifica di due file.

Corsi in streaming

Esistono più implementazioni di InputStream nel pacchetto org.apache.commons.io.input e di OutputStream nel pacchetto org.apache.commons.io.output, per eseguire attività utili sui flussi. Di seguito sono riportati alcuni esempi.

  • NullOutputStream - Assorbe tutti i dati inviati con qualsiasi errore.

  • TeeOutputStream - Invia l'output a due flussi.

  • ByteArrayOutputStream - Versione più veloce della classe JDK.

  • CountingOutputStream - Conta il numero di byte passati attraverso il flusso.

  • ProxyOutputStream - Modifica le chiamate al flusso proxy.

  • LockableFileWriter - Un FileWriter per creare file di blocco e consentire una semplice gestione del blocco dei file di thread incrociati.

In questo capitolo apprenderemo la configurazione dell'ambiente locale di Apache Commons IO e come impostare il percorso di Commons IO per Windows 2000 / XP, Windows 95/98 / ME ecc. Comprenderemo anche alcuni popolari editor java e come scaricare l'archivio Commons IO.

Configurazione dell'ambiente locale

Se sei ancora disposto a configurare il tuo ambiente per il linguaggio di programmazione Java, questa sezione ti guiderà su come scaricare e configurare Java sulla tua macchina. Seguire i passaggi indicati di seguito per configurare l'ambiente.

Java SE è disponibile gratuitamente per il download al link https://www.oracle.comQuindi scarichi una versione basata sul tuo sistema operativo.

Segui le istruzioni per scaricare Java ed eseguire il file .exeper installare Java sulla tua macchina. Dopo aver installato Java sulla macchina, sarà necessario impostare le variabili di ambiente in modo che puntino alle directory di installazione corrette.

Percorso per Windows 2000 / XP

Facci capire come impostare il percorso per Windows 2000 / XP. Supponiamo che tu abbia installato Java inc:\Program Files\java\jdk directory.

  • Fare clic con il pulsante destro del mouse su "Risorse del computer" e selezionare "Proprietà".

  • Fare clic sul pulsante "Variabili d'ambiente" nella scheda "Avanzate".

  • Ora, modifica la variabile "Path", in modo che contenga anche il percorso dell'eseguibile Java. Esempio, se il percorso è attualmente impostato su "C: \ WINDOWS \ SYSTEM32", modifica il percorso in lettura'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Percorso per Windows 95/98 / ME

Cerchiamo di capire come impostare il percorso per Windows 95/98 / ME. Supponiamo che tu abbia installato Java inc:\Program Files\java\jdk directory.

  • Modifica il file "C: \ autoexec.bat" e aggiungi la seguente riga alla fine: "SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin"

Percorso per Linux, UNIX, Solaris, FreeBSD

La variabile d'ambiente PATH dovrebbe essere impostata in modo che punti a dove sono stati installati i binari Java. Fare riferimento alla documentazione della shell, se si hanno problemi a farlo.

Esempio, se usi bash come shell, aggiungi la seguente riga alla fine di '.bashrc: export PATH = / path / to / java: $ PATH'

Editor Java popolari

Per scrivere i tuoi programmi Java, hai bisogno di un editor di testo. Ci sono molti IDE sofisticati disponibili sul mercato. Ma per ora, puoi considerare uno dei seguenti:

  • Notepad - Su una macchina Windows puoi usare qualsiasi semplice editor di testo come Blocco note (consigliato per questo tutorial), TextPad.

  • Netbeans - È un IDE Java che è open-source e gratuito e che può essere scaricato da https://www.netbeans.org/index.html.

  • Eclipse - È anche un IDE Java sviluppato dalla comunità open source di eclipse e può essere scaricato da https://www.eclipse.org/.

Scarica Common IO Archive

Scarica l'ultima versione del file jar Apache Common IO da commons-io-2.6- bin.zip, che è disponibile su download_io.cgi Al momento della stesura di questo tutorial, abbiamo scaricato commons-io-2.6-bin.zip e copiato nella cartella C: \> Apache.

OS Nome dell'archivio
finestre commons-io-2.6-bin.zip
Linux commons-io-2.6-bin.tar.gz
Mac commons-io-2.6-bin.tar.gz

Ambiente I / O comune Apache

Impostare il APACHE_HOMEvariabile di ambiente in modo che punti alla posizione della directory di base in cui è archiviato il jar di Apache sulla macchina. Supponendo, abbiamo estratto commons-io-2.6-bin.zip nella cartella Apache su vari sistemi operativi come segue.

OS Produzione
finestre Imposta la variabile d'ambiente APACHE_HOME su C: \ Apache
Linux esportare APACHE_HOME = / usr / local / Apache
Mac export APACHE_HOME = / Library / Apache

Imposta la variabile CLASSPATH

Impostare il CLASSPATHvariabile di ambiente in modo che punti alla posizione del jar IO comune. Supponendo che abbiate memorizzato commons-io-2.6-bin.zip nella cartella Apache su vari sistemi operativi come segue.

OS Produzione
finestre Imposta la variabile d'ambiente CLASSPATH su% CLASSPATH%;% APACHE_HOME% \ commons-io-2.6.jar;.;
Linux export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-io-2.6.jar :.
Mac export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-io-2.6.jar :.

IOUtils fornisce metodi di utilità per leggere, scrivere e copiare file. I metodi funzionano con InputStream, OutputStream, Reader e Writer.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.IOUtils Classe -

public class IOUtils
   extends Object

Caratteristiche di IOUtils

Le caratteristiche di IOUtils sono fornite di seguito:

  • Fornisce metodi di utilità statici per operazioni di input / output.

  • toXXX () - legge i dati da un flusso.

  • write () - scrive i dati in un flusso.

  • copy () - copia tutti i dati in un flusso in un altro flusso.

  • contentEquals: confronta i contenuti di due stream.

Esempio di classe IOUtils

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.commons.io.IOUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         //Using BufferedReader
         readUsingTraditionalWay();
         //Using IOUtils
         readUsingIOUtils();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   //reading a file using buffered reader line by line
   public static void readUsingTraditionalWay() throws IOException {
      try(BufferedReader bufferReader = new BufferedReader( new InputStreamReader(
      new FileInputStream("input.txt") ) )) {
         String line;
         while( ( line = bufferReader.readLine() ) != null ) {
            System.out.println( line );
         }
      }
   }
   //reading a file using IOUtils in one go
   public static void readUsingIOUtils() throws  IOException {
      try(InputStream in = new FileInputStream("input.txt")) {
         System.out.println( IOUtils.toString( in , "UTF-8") );
      }
   }
}

Produzione

Stamperà il seguente risultato:

Welcome to TutorialsPoint. Simply Easy Learning.
Welcome to TutorialsPoint. Simply Easy Learning.

FileUtils fornisce un metodo per manipolare i file come lo spostamento, l'apertura, il controllo dell'esistenza, la lettura del file, ecc. Questi metodi utilizzano File Object.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.FileUtils Class -

public class FileUtils
   extends Object

Caratteristiche di FileUtils

Le caratteristiche di FileUtils sono indicate di seguito:

  • Metodi per scrivere su un file.

  • Metodi per leggere da un file.

  • Metodi per creare una directory che includa le directory principali.

  • Metodi per copiare file e directory.

  • Metodi per eliminare file e directory.

  • Metodi per convertire in e da un URL.

  • Metodi per elencare file e directory per filtro ed estensione.

  • Metodi per confrontare il contenuto del file.

  • Metodi per archiviare la data dell'ultima modifica.

  • Metodi per calcolare un checksum.

Esempio di classe FileUtils

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import org.apache.commons.io.FileUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         //Using FileUtils
         usingFileUtils();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileUtils() throws IOException {
      //get the file object
      File file = FileUtils.getFile("input.txt");
      //get the temp directory
      File tmpDir = FileUtils.getTempDirectory();
      System.out.println(tmpDir.getName());
      //copy file to temp directory
      FileUtils.copyFileToDirectory(file, tmpDir);
      //create a new file
      File newTempFile = FileUtils.getFile(tmpDir, file.getName());
      //get the content
      String data = FileUtils.readFileToString(newTempFile, Charset.defaultCharset());
      //print the content
      System.out.println(data);
   }
}

Produzione

L'output è menzionato di seguito:

Temp
Welcome to TutorialsPoint. Simply Easy Learning.

FilenameUtils fornisce un metodo per lavorare con i nomi di file senza utilizzare File Object. Funziona su diversi sistemi operativi in ​​modo simile. Questa classe risolve i problemi quando si passa da una macchina di sviluppo basata su Windows a una macchina di produzione basata su Unix.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.FilenameUtils Classe -

public class FilenameUtils
   extends Object

Caratteristiche di FileNameUtils

Questa classe definisce sei componenti all'interno di un nome di file. Considera una posizione di esempio comeC:\dev\project\file.txt. Quindi, i componenti sono i seguenti:

  • Prefisso - C: \

  • Percorso relativo - dev \ project \

  • Percorso assoluto - C: \ dev \ project \

  • Nome: file.txt

  • Nome di base - file

  • Estensione - txt

Per identificare una directory, aggiungi un separatore al nome del file.

Esempio di classe FilenameUtils

L'esempio di FilenameUtils Class è fornito di seguito:

IOTester.java

import java.io.IOException;
import org.apache.commons.io.FilenameUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         //Using FilenameUtils
         usingFilenameUtils();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFilenameUtils() throws IOException {
      String path = "C:\\dev\\project\\file.txt";
      System.out.println("Full Path: " +FilenameUtils.getFullPath(path));
      System.out.println("Relative Path: " +FilenameUtils.getPath(path));
      System.out.println("Prefix: " +FilenameUtils.getPrefix(path));
      System.out.println("Extension: " + FilenameUtils.getExtension(path));
      System.out.println("Base: " + FilenameUtils.getBaseName(path));
      System.out.println("Name: " + FilenameUtils.getName(path));
      String filename = "C:/commons/io/../lang/project.xml";
      System.out.println("Normalized Path: " + FilenameUtils.normalize(filename));
   }
}

Produzione

L'output è fornito di seguito:

Full Path: C:\dev\project\
Relative Path: dev\project\
Prefix: C:\
Extension: txt
Base: file
Name: file.txt
Normalized Path: C:\commons\lang\project.xml

FileSystemUtils fornisce il metodo per ottenere lo spazio libero su un'unità disco.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.FileSystemUtils Classe -

public class FileSystemUtils
   extends Object

Esempio di classe FileSystemUtils

Di seguito è riportato l'esempio della classe FileSystemUtils:

IOTester.java

import java.io.IOException;
import org.apache.commons.io.FileSystemUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         System.out.println("Free Space " + FileSystemUtils.freeSpaceKb("C:/") + " Bytes");
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
}

Produzione

Di seguito è riportato l'output:

Free Space 61355640 kb

Enumerazione della distinzione tra maiuscole e minuscole IO. Sistemi operativi diversi hanno regole diverse per la distinzione tra maiuscole e minuscole per i nomi dei file. Ad esempio, Windows non fa distinzione tra maiuscole e minuscole per la denominazione dei file mentre Unix distingue tra maiuscole e minuscole. IOCase cattura quella differenza, fornisce un'enumerazione per controllare come devono essere eseguiti i confronti dei nomi dei file. Fornisce inoltre metodi per utilizzare l'enumerazione per eseguire confronti.

Dichiarazione Enum

Di seguito è riportata la dichiarazione per org.apache.commons.io.IOCase Enum -

public enum IOCase
   extends Enum<IOCase> implements Serializable

Esempio di IOCase Enum

Di seguito viene fornito un esempio di IOCase Enum:

IOTester.java

import java.io.IOException;
import org.apache.commons.io.IOCase;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingIOCase();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingIOCase() throws IOException {
      String text = "Welcome to TutorialsPoint. Simply Easy Learning.";
      String text1 = "WELCOME TO TUTORIALSPOINT. SIMPLY EASY LEARNING.";
      System.out.println("Ends with Learning (case sensitive): " + IOCase.SENSITIVE.checkEndsWith(text1, "Learning."));
      System.out.println("Ends with Learning (case insensitive): " + IOCase.INSENSITIVE.checkEndsWith(text1, "Learning."));
      System.out.println("Equality Check (case sensitive): " + IOCase.SENSITIVE.checkEquals(text, text1));
      System.out.println("Equality Check (case insensitive): " + IOCase.INSENSITIVE.checkEquals(text, text1));
   }
}

Produzione

Stamperà il seguente risultato:

Ends with Learning (case sensitive): false
Ends with Learning (case insensitive): true
Equality Check (case sensitive): false
Equality Check (case insensitive): true

LineIterator fornisce un modo flessibile per lavorare con un file basato su riga. Impariamo lo stesso in questo capitolo.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.LineIterator Classe -

public class LineIterator
   extends Object implements Iterator<String>, Closeable

Esempio di LineIterator Class

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.
Learn web technologies,
prepare exams,
code online,
all at one place.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingLineIterator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingLineIterator() throws IOException {
      //get the file object
      File file = FileUtils.getFile("input.txt");
      try(LineIterator lineIterator = FileUtils.lineIterator(file)) {
         System.out.println("Contents of input.txt");
         while(lineIterator.hasNext()) {
            System.out.println(lineIterator.next());
         }
      }
   }
}

Produzione

Stamperà il seguente risultato:

Contents of input.txt
Welcome to TutorialsPoint. Simply Easy Learning.
Learn web technologies,
prepare exams,
code online,
all at one place.

NameFileFilter in Commons IO filtra i nomi dei file per un nome.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.filefilter.NameFileFilter Classe :

public class NameFileFilter
   extends AbstractFileFilter implements Serializable

Esempio di classe NameFileFilter

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

Stampiamo tutti i file e le directory nella directory corrente e quindi filtriamo un file il cui nome è Input.txt.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.IOCase;
import org.apache.commons.io.filefilter.NameFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingNameFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingNameFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile with name input.txt\n");
      String[] acceptedNames = {"input", "input.txt"};
      String[] filesNames = currentDirectory.list( new NameFileFilter(acceptedNames, IOCase.INSENSITIVE) );
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

Produzione

Stamperà il seguente risultato:

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with name input.txt

input.txt

WildcardFileFilter in Commons IO filtra i file utilizzando i caratteri jolly forniti.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.filefilter.WildcardFileFilter Classe -

public class WildcardFileFilter
   extends AbstractFileFilter implements Serializable

Esempio di classe WildcardFileFilter

Ecco il file di input che dobbiamo analizzare

Welcome to TutorialsPoint. Simply Easy Learning.

Stampiamo tutti i file e le directory nella directory corrente e quindi filtriamo un file il cui nome termina con t.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.WildcardFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingWildcardFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingWildcardFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
        System.out.println(files[i]);
      }
      System.out.println("\nFile name ending with t.\n");
      String[] filesNames = currentDirectory.list( new  WildcardFileFilter("*t"));
      for( int i = 0; i < filesNames.length; i++ ) {
        System.out.println(filesNames[i]);
      }
   }
}

Produzione

Stamperà il seguente risultato.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File name ending with t

.project
input.txt

SuffixFileFilter filtra i file basati sul suffisso. Viene utilizzato per recuperare tutti i file di un tipo particolare.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.filefilter.SuffixFileFilter Classe -

public class SuffixFileFilter
   extends AbstractFileFilter implements Serializable

Esempio di classe SuffixFileFilter

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

Stampiamo tutti i file e le directory nella directory corrente e quindi filtriamo un file con estensione txt.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.SuffixFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingSuffixFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingSuffixFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile with extenstion txt\n");
      String[] filesNames = currentDirectory.list( new SuffixFileFilter("txt"));
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

Produzione

Stamperà il seguente risultato.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with extenstion txt

input.txt

PrefixFileFilter filtra i file basati sul prefisso.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.filefilter.PrefixFileFilter Classe -

public class PrefixFileFilter
   extends AbstractFileFilter implements Serializable

Esempio di classe PrefixFileFilter

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

Stampiamo tutti i file e le directory nella directory corrente e quindi filtriamo un file il cui nome inizia con input.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.PrefixFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingPrefixFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingPrefixFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile starting with input\n");
      String[] filesNames = currentDirectory.list( new PrefixFileFilter("input") );
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

Produzione

Stamperà il seguente risultato:

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with extenstion txt

input.txt

OrFileFilter fornisce logica OR condizionale in un elenco di filtri di file. Restituisce true, se qualsiasi filtro nell'elenco restituisce true. In caso contrario, restituisce false.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.filefilter.OrFileFilter Classe -

public class OrFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

Esempio di classe OrFileFilter

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

Stampiamo tutti i file e le directory nella directory corrente e quindi filtriamo un file il cui nome inizia con. o termina con t.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.OrFileFilter;
import org.apache.commons.io.filefilter.PrefixFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingOrFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingOrFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile starting with . or ends with t\n");
      String[] filesNames = currentDirectory.list( new OrFileFilter(new PrefixFileFilter("."), new WildcardFileFilter("*t")));
      for( int i = 0; i < filesNames.length; i++ ) {
         System.out.println(filesNames[i]);
      }
   }
}

Produzione

Stamperà il seguente risultato.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File starting with . or ends with t

.classpath
.project
.settings
input.txt

AndFileFilter fornisce condizionale e logica in un elenco di filtri di file. Restituisce true, se tutti i filtri nell'elenco restituiscono true. In caso contrario, restituisce false.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.filefilter.AndFileFilter Classe -

public class AndFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

Esempio di AndFileFilter Class

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

Stampiamo tutti i file e le directory nella directory corrente e quindi filtriamo un file il cui nome inizia con. e termina con t.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.AndFileFilter;
import org.apache.commons.io.filefilter.PrefixFileFilter;
import org.apache.commons.io.filefilter.WildcardFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingAndFileFilter();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingAndFileFilter() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      //get names of all files and directory in current directory
      String[] files = currentDirectory.list();
      System.out.println("All files and Folders.\n");
      for( int i = 0; i < files.length; i++ ) {
         System.out.println(files[i]);
      }
      System.out.println("\nFile starting with . and ends with t\n");
      String[] filesNames = currentDirectory.list(new AndFileFilter(
         new PrefixFileFilter("."), new WildcardFileFilter("*t")));
      for( int i = 0; i < filesNames.length; i++ ) {
        System.out.println(filesNames[i]);
      }
   }
}

Produzione

Stamperà il seguente risultato.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File starting with . or ends with t

.project

FileEntry fornisce lo stato di un file o di una directory. Attributi di file in un determinato momento.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.monitor.FileEntry Classe -

public class FileEntry
   extends Object implements Serializable

Caratteristiche di FileEntry

L'oggetto classe FileEntry fornisce i seguenti attributi di file in un determinato momento.

  • getName () - nome del file.

  • esiste () - controlla se il file esiste o meno.

  • isDirectory () - controlla se file è una directory.

  • lastModified () - fornisce l'ora della data dell'ultima modifica.

  • listFiles () - fornisce il contenuto della directory.

Esempio di classe FileEntry

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.monitor.FileEntry;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingFileEntry();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileEntry() throws IOException {
      //get the file object
      File file = FileUtils.getFile("input.txt");
      FileEntry fileEntry = new FileEntry(file);
      System.out.println("Monitored File: " + fileEntry.getFile());
      System.out.println("File name: " + fileEntry.getName());
      System.out.println("Is Directory: " + 	fileEntry.isDirectory());
   }
}

Produzione

Stamperà il seguente risultato.

Monitored File: input.txt
File name: input.txt
Is Directory: false

FileAlterationObserver rappresenta lo stato dei file sotto una directory root, controlla il filesystem e notifica ai listener gli eventi di creazione, modifica o eliminazione.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per

org.apache.commons.io.monitor.FileAlterationObserver Classe -

public class FileAlterationObserver
   extends Object implements Serializable

Esempio di classe FileAlterationObserver

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileDeleteStrategy;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingFileAlterationObserver();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileAlterationObserver() throws IOException {
      //get the file object
      File inputFile = FileUtils.getFile("input.txt");
      String absolutePath = inputFile.getAbsolutePath();
      String parent = absolutePath.substring(0,absolutePath.indexOf("input.txt"));
      File parentDirectory = FileUtils.getFile(parent);
      FileAlterationObserver observer = new
      FileAlterationObserver(parentDirectory);
      observer.addListener(new FileAlterationListenerAdaptor() {
         @Override
         public void onDirectoryCreate(File file) {
            System.out.println("Folder created: " + file.getName());
         }
         @Override
            public void onDirectoryDelete(File file) {
               System.out.println("Folder deleted: " + file.getName());
            }
         @Override
            public void onFileCreate(File file) {
               System.out.println("File created: " + file.getName());
            }
         @Override
            public void onFileDelete(File file) {
               Syst em.out.println("File deleted: " + file.getName());
            }
        });
       //create a monitor to check changes after every 500 ms
       FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
       try {
          monitor.start();
         //create a new directory
         File newFolder = new File("test");
         File newFile = new File("test1");
         newFolder.mkdirs();
         Thread.sleep(1000);
         newFile.createNewFile();
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFolder);
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFile);
         Thread.sleep(1000);
         monitor.stop(10000);
      } catch(IOException e) {
         System.out.println(e.getMessage());
      } catch(InterruptedException e) {
         System.out.println(e.getMessage());
      } catch (Exception e) {
         System.out.println(e.getMessage());
      }
   }
}

Produzione

Stamperà il seguente risultato.

Folder created: test
File created: test1
Folder deleted: test
File deleted: test1

FileAlterationMonitor rappresenta un thread che genera un thread di monitoraggio che attiva qualsiasi FileAlterationObserver registrato a un intervallo specificato.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.monitor.FileAlterationMonitor Class -

public final class FileAlterationMonitor
   extends Object implements Runnable

Esempio di classe FileAlterationMonitor

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileDeleteStrategy;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingFileAlterationMonitor();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileAlterationMonitor() throws IOException {
      //get the file object
      File inputFile = FileUtils.getFile("input.txt");
      String absolutePath = inputFile.getAbsolutePath();
      String parent = absolutePath.substring(0,absolutePath.indexOf("input.txt"));
      File parentDirectory = FileUtils.getFile(parent);
      FileAlterationObserver observer = new
      FileAlterationObserver(parentDirectory);
      observer.addListener(new FileAlterationListenerAdaptor(){
         @Override
         public void onDirectoryCreate(File file) {
            System.out.println("Folder created: " + file.getName());
         }
         @Override
         public void onDirectoryDelete(File file) {
            System.out.println("Folder deleted: " + file.getName());
         }
         @Override
         public void onFileCreate(File file) {
            System.out.println("File created: " + file.getName());
         }
         @Override
         public void onFileDelete(File file) {
            System.out.println("File deleted: " + file.getName());
         }
      });
      //create a monitor to check changes after every 500 ms
      FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
      try {
         monitor.start();
         //create a new directory
         File newFolder = new File("test");
         File newFile = new File("test1");
         newFolder.mkdirs();
         Thread.sleep(1000);
         newFile.createNewFile();
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFolder);
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFile);
         Thread.sleep(1000);
         monitor.stop(10000);
      } catch(IOException e) {
         System.out.println(e.getMessage());
      } catch(InterruptedException e) {
         System.out.println(e.getMessage());
      } catch (Exception e) {
         System.out.println(e.getMessage());
      }
   }
}

Produzione

Stamperà il seguente risultato.

Folder created: test
File created: test1
Folder deleted: test
File deleted: test1

NameFileComparator confronta i nomi di due file. Può essere utilizzato per ordinare gli elenchi o gli array di file, utilizzando il loro nome, in modo che sia case-sensitive, case-insensitive o dipendenti dal sistema.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per

org.apache.commons.io.comparator.NameFileComparator Classe -

public class NameFileComparator
   extends Object implements Serializable

Esempio di classe NameFileComparator

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import org.apache.commons.io.IOCase;
import org.apache.commons.io.comparator.NameFileComparator;
import org.apache.commons.io.filefilter.FileFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingNameFileComparator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingNameFileComparator() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      NameFileComparator comparator = new
      NameFileComparator(IOCase.INSENSITIVE);
      File[] sortedFiles = comparator.sort(currentDirectory.listFiles((FileFilter)FileFileFilter.FILE));
      System.out.println("Sorted By Name: ");
      for(File file:sortedFiles) {
         System.out.println(file.getName());
      }
   }
}

Produzione

Stamperà il seguente risultato.

Sorted By Name:
.classpath
.project
input.txt

SizeFileComparator confronta le dimensioni di due file / directory. Può essere utilizzato per ordinare gli elenchi o gli array di file utilizzando la loro dimensione o directory, in base al numero di figli.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per

org.apache.commons.io.comparator.SizeFileComparator Classe -

public class SizeFileComparator
   extends Object implements Serializable

Esempio di classe SizeFileComparator

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import org.apache.commons.io.comparator.SizeFileComparator;
import org.apache.commons.io.filefilter.FileFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingSizeFileComparator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   } 
   public static void usingSizeFileComparator() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      SizeFileComparator comparator = new SizeFileComparator();
      File[] sortedFiles = comparator.sort(currentDirectory.listFiles((FileFilter)FileFileFilter.FILE));
      System.out.println("Sorted By Size: ");
      for(File file:sortedFiles) {
         System.out.println(file.getName() + ", size(kb) :" + file.length());
      }
   }
}

Produzione

Stamperà il seguente risultato.

Sorted By Size:
input.txt, size:124
.project, size:382
.classpath, size:441

LastModifiedFileComparator confronta le date dell'ultima modifica di due file / directory. Può essere utilizzato per ordinare gli elenchi o gli array di file / directory utilizzando le date dell'ultima modifica.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.comparator.LastModifiedFileComparator Classe -

public class LastModifiedFileComparator
   extends Object implements Serializable

Esempio di classe LastModifiedFileComparator

Ecco il file di input che dobbiamo analizzare:

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Date;
import org.apache.commons.io.comparator.LastModifiedFileComparator;
import org.apache.commons.io.filefilter.FileFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingLastModifiedFileComparator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingLastModifiedFileComparator() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      LastModifiedFileComparator comparator = new LastModifiedFileComparator();
      File[] sortedFiles = comparator.sort(currentDirectory.listFiles((FileFilter)FileFileFilter.FILE));
      System.out.println("Sorted By Last Modified date: ");
      for(File file:sortedFiles) {
         System.out.println(file.getName() + ", Modified on: " + new Date(file.lastModified()));
      }
   }
}

Produzione

Stamperà il seguente risultato.

Sorted By Last Modified date:
.project, Modified on: Thu Oct 12 19:06:45 IST 2017
.classpath, Modified on: Mon Nov 20 13:09:55 IST 2017
input.txt, Modified on: Mon Nov 20 19:27:55 IST 2017

È un proxy InputStream che scrive in modo trasparente una copia di tutti i byte che vengono letti dal flusso proxy su un determinato OutputStream. Il flusso di input del proxy viene chiuso quando viene chiamato il metodo close () su questo proxy. Può essere utilizzato per gestire due flussi contemporaneamente.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.input.TeeInputStream Classe -

public class TeeInputStream
   extends ProxyInputStream

Esempio di classe TeeInputStream

In questo esempio, la chiusura di un TeeInputStream chiude gli oggetti TeeInputStream e TeeOutputStream.

IOTester.java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.commons.io.input.TeeInputStream;
import org.apache.commons.io.output.TeeOutputStream;
public class IOTester {
   private static final String SAMPLE = "Welcome to TutorialsPoint. Simply Easy
   Learning.";
   public static void main(String[] args) {
      try {
         usingTeeInputStream();
      }catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingTeeInputStream() throws IOException {
      TeeInputStream teeInputStream = null;
      TeeOutputStream teeOutputStream = null;
      try {
         ByteArrayInputStream inputStream = new
         ByteArrayInputStream(SAMPLE.getBytes("US-ASCII"));
         ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
         ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream();
         teeOutputStream = new TeeOutputStream(outputStream1, outputStream2);
         teeInputStream = new TeeInputStream(inputStream, teeOutputStream, true);
         teeInputStream.read(new byte[SAMPLE.length()]);
         System.out.println("Output stream 1: " + outputStream1.toString());
         System.out.println("Output stream 2: " + outputStream2.toString());
      }catch (IOException e) {
         System.out.println(e.getMessage());
      } finally {
         //teeIn.close() closes teeIn and teeOut which in turn closes the out1 and out2.
         try {
            teeInputStream.close();
         } catch (IOException e) {
            System.out.println(e.getMessage());
         }
      }
   }
}

Produzione

Stamperà il seguente risultato.

Output stream 1: Welcome to TutorialsPoint. Simply Easy Learning.
Output stream 2: Welcome to TutorialsPoint. Simply Easy Learning.

TeeOutputStream divide OutputStream. Prende il nome dal comando unix 'tee'. Consente a un flusso di essere ramificato in due flussi.

Dichiarazione di classe

Di seguito è riportata la dichiarazione per org.apache.commons.io.output.TeeOutputStream Classe -

public class TeeOutputStream
   extends ProxyOutputStream

Esempio di classe TeeOutputStream

In questo esempio, TeeOutputStream accetta due flussi di output come parametro e passando i dati a TeeOutputStream imposta i dati su entrambi i flussi di output.

IOTester.java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.commons.io.input.TeeInputStream;
import org.apache.commons.io.output.TeeOutputStream;
public class IOTester {
   private static final String SAMPLE = "Welcome to TutorialsPoint. Simply Easy
   Learning.";
   public static void main(String[] args) {
      try {
         usingTeeInputStream();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingTeeInputStream() throws IOException {
      TeeInputStream teeInputStream = null;
      TeeOutputStream teeOutputStream = null;
      try {
         ByteArrayInputStream inputStream = new
         ByteArrayInputStream(SAMPLE.getBytes("US-ASCII"));
         ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
         ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream();
         teeOutputStream = new TeeOutputStream(outputStream1, outputStream2);
         teeInputStream = new TeeInputStream(inputStream, teeOutputStream, true);
         teeInputStream.read(new byte[SAMPLE.length()]);
         System.out.println("Output stream 1: " + outputStream1.toString());
         System.out.println("Output stream 2: " + outputStream2.toString());
      } catch (IOException e) {
         System.out.println(e.getMessage());
      } finally {
         //teeIn.close() closes teeIn and teeOut which in turn closes the out1 and out2.
         try {
            teeInputStream.close();
         } catch (IOException e) {
            System.out.println(e.getMessage());
         }
      }
   }
}

Produzione

Stamperà il seguente risultato.

Output stream 1: Welcome to TutorialsPoint. Simply Easy Learning.
Output stream 2: Welcome to TutorialsPoint. Simply Easy Learning.