Apache Commons IO - Guia rápido

A biblioteca Apache Commons IO fornece várias classes de utilitários para operações comuns para File IO, abrangendo uma ampla gama de casos de uso. Isso ajuda a evitar a escrita de código clichê.

A biblioteca Apache Commons IO fornece classes para as seguintes categorias -

Aulas de utilidades

Essas classes que estão sob org.apache.commons.iopacote, fornece comparação de arquivo e string. A seguir estão alguns dos exemplos.

  • IOUtils- Fornece métodos utilitários para ler, escrever e copiar arquivos. Os métodos funcionam com InputStream, OutputStream, Reader e Writer.

  • FilenameUtils- Fornece método para trabalhar com nomes de arquivo sem usar Objeto de Arquivo. Ele funciona em diferentes sistemas operacionais de maneira semelhante.

  • FileUtils - Fornece método para manipular arquivos como mover, abrir, verificar a existência, ler o arquivo, etc. Esses métodos usam Objeto de Arquivo.

  • IOCase - Fornece método para manipulação e comparação de strings.

  • FileSystemUtils - Fornece método para obter o espaço livre em uma unidade de disco.

  • LineIterator - Oferece uma maneira flexível de trabalhar com um arquivo baseado em linha.

Classes de filtro

As classes de filtro que estão no pacote org.apache.commons.io.filefilter, fornecem métodos para filtrar arquivos com base em critérios lógicos em vez de comparações tediosas baseadas em strings. A seguir estão alguns dos exemplos.

  • NameFileFilter - Filtra nomes de arquivo para um nome.

  • WildcardFileFilter - Filtra arquivos usando os curingas fornecidos.

  • SuffixFileFilter- Filtra arquivos com base no sufixo. Isso é usado para recuperar todos os arquivos de um tipo específico.

  • PrefixFileFilter - Filtra arquivos com base no prefixo.

  • OrFileFilter- Fornece lógica OR condicional em uma lista de filtros de arquivo. Retorna verdadeiro se algum filtro da lista retornar verdadeiro. Caso contrário, ele retorna falso.

  • AndFileFilter- Fornece condicional e lógica em uma lista de filtros de arquivo. Retorna falso se algum filtro na lista retornar falso. Caso contrário, ele retorna verdadeiro.

Classes File Monitor

Classes de monitor de arquivo que estão sob org.apache.commons.io.monitorpacote, fornece controle para rastrear alterações em um arquivo ou pasta específica e permite executar ações de acordo com as alterações. A seguir estão alguns dos exemplos.

  • FileEntry- Fornece o estado de um arquivo ou diretório. Atributos de arquivo em um determinado momento.

  • FileAlterationObserver - Representa o estado dos arquivos abaixo de um diretório raiz, verifica o sistema de arquivos e notifica os ouvintes sobre a criação, alteração ou exclusão de eventos.

  • FileAlterationMonitor - Representa um encadeamento que gera um encadeamento de monitoramento, disparando qualquer FileAlterationObserver registrado em um intervalo especificado.

Classes comparadoras

Classes de monitoramento de arquivos em org.apache.commons.io.comparator pacote permite comparar e classificar arquivos e diretórios facilmente.

  • NameFileComparator - Compare os nomes de dois arquivos.

  • SizeFileComparator - Compare o tamanho de dois arquivos.

  • LastModifiedFileComparator - Compare as datas da última modificação de dois arquivos.

Aulas de fluxo

Existem várias implementações de InputStream no pacote org.apache.commons.io.input e de OutputStream no pacote org.apache.commons.io.output, para fazer tarefas úteis em fluxos. A seguir estão alguns dos exemplos.

  • NullOutputStream - Absorve todos os dados enviados com algum erro.

  • TeeOutputStream - Envia saída para dois fluxos.

  • ByteArrayOutputStream - Versão mais rápida da classe JDK.

  • CountingOutputStream - Conta o número de bytes passados ​​pelo fluxo.

  • ProxyOutputStream - Altera as chamadas para fluxo de proxy.

  • LockableFileWriter - Um FileWriter para criar arquivos de bloqueio e permitir manipulação de bloqueio de arquivo de thread cruzado simples.

Neste capítulo, aprenderemos sobre a configuração do ambiente local do Apache Commons IO e como configurar o caminho do Commons IO para Windows 2000 / XP, Windows 95/98 / ME etc. Também entenderemos sobre alguns editores populares de Java e como baixar o arquivo Commons IO.

Configuração de ambiente local

Se você ainda deseja configurar seu ambiente para a linguagem de programação Java, esta seção irá guiá-lo sobre como baixar e configurar o Java em sua máquina. Siga as etapas mencionadas abaixo para configurar o ambiente.

Java SE está disponível gratuitamente para download no link https://www.oracle.comEntão, você baixa uma versão baseada em seu sistema operacional.

Siga as instruções para baixar o Java e executar o .exepara instalar o Java em sua máquina. Depois de instalar o Java em sua máquina, você precisará definir as variáveis ​​de ambiente para apontar para os diretórios de instalação corretos.

Caminho para Windows 2000 / XP

Vamos entender, como configurar o caminho para o Windows 2000 / XP. Estamos assumindo que você instalou o Java emc:\Program Files\java\jdk diretório.

  • Clique com o botão direito em 'Meu Computador' e selecione 'Propriedades'.

  • Clique no botão 'Variáveis ​​de ambiente' na guia 'Avançado'.

  • Agora, altere a variável 'Path', para que também contenha o caminho para o executável Java. Por exemplo, se o caminho está atualmente definido como 'C: \ WINDOWS \ SYSTEM32', altere seu caminho para ler'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Caminho para Windows 95/98 / ME

Vamos entender, como configurar o caminho para o Windows 95/98 / ME. Estamos assumindo que você instalou o Java emc:\Program Files\java\jdk diretório.

  • Edite o arquivo 'C: \ autoexec.bat' e adicione a seguinte linha no final - 'SET PATH =% PATH%; C: \ Arquivos de programas \ java \ jdk \ bin'

Caminho para Linux, UNIX, Solaris, FreeBSD

A variável de ambiente PATH deve ser definida para apontar para onde os binários Java foram instalados. Consulte a documentação do shell, se tiver problemas para fazer isso.

Por exemplo, se você usar bash como seu shell, então você adicionaria a seguinte linha ao final de seu '.bashrc: export PATH = / path / to / java: $ PATH'

Editores Java populares

Para escrever seus programas Java, você precisa de um editor de texto. Existem muitos IDEs sofisticados disponíveis no mercado. Mas, por agora, você pode considerar um dos seguintes -

  • Notepad - Na máquina Windows você pode usar qualquer editor de texto simples como o Notepad (recomendado para este tutorial), TextPad.

  • Netbeans - É um IDE Java de código aberto e gratuito que pode ser baixado de https://www.netbeans.org/index.html.

  • Eclipse - Também é um IDE Java desenvolvido pela comunidade de código aberto eclipse e pode ser baixado de https://www.eclipse.org/.

Baixe o arquivo IO comum

Baixe a versão mais recente do arquivo jar do Apache Common IO em commons-io-2.6- bin.zip, que está disponível em download_io.cgi No momento em que este tutorial foi escrito, baixamos commons-io-2.6-bin.zip e copiamos na pasta C: \> Apache.

SO Nome do arquivo
janelas commons-io-2.6-bin.zip
Linux commons-io-2.6-bin.tar.gz
Mac commons-io-2.6-bin.tar.gz

Ambiente IO comum Apache

Colocou o APACHE_HOMEvariável de ambiente para apontar para o local do diretório base onde o jar do Apache está armazenado em sua máquina. Supondo que extraímos commons-io-2.6-bin.zip na pasta Apache em vários sistemas operacionais como segue.

SO Resultado
janelas Defina a variável de ambiente APACHE_HOME para C: \ Apache
Linux export APACHE_HOME = / usr / local / Apache
Mac export APACHE_HOME = / Library / Apache

Definir variável CLASSPATH

Colocou o CLASSPATHvariável de ambiente para apontar para o local do jar IO comum. Supondo que você tenha armazenado commons-io-2.6-bin.zip na pasta Apache em vários sistemas operacionais como segue.

SO Resultado
janelas Defina a variável de ambiente CLASSPATH como% 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 fornece métodos utilitários para ler, gravar e copiar arquivos. Os métodos funcionam com InputStream, OutputStream, Reader e Writer.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.IOUtils Classe -

public class IOUtils
   extends Object

Características do IOUtils

Os recursos do IOUtils são fornecidos abaixo -

  • Fornece métodos utilitários estáticos para operações de entrada / saída.

  • toXXX () - lê dados de um fluxo.

  • write () - grava dados em um fluxo.

  • copy () - copia todos os dados de um fluxo para outro fluxo.

  • contentEquals - compare o conteúdo de dois fluxos.

Exemplo de classe IOUtils

Aqui está o arquivo de entrada que precisamos analisar -

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") );
      }
   }
}

Resultado

Irá imprimir o seguinte resultado -

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

FileUtils fornece um método para manipular arquivos, como mover, abrir, verificar a existência, ler o arquivo, etc. Esses métodos usam Objeto de Arquivo.

Declaração de Classe

A seguir está a declaração para a classe org.apache.commons.io.FileUtils -

public class FileUtils
   extends Object

Recursos do FileUtils

Os recursos do FileUtils são declarados abaixo -

  • Métodos para gravar em um arquivo.

  • Métodos para ler de um arquivo.

  • Métodos para fazer um diretório incluindo diretórios pais.

  • Métodos para copiar arquivos e diretórios.

  • Métodos para excluir arquivos e diretórios.

  • Métodos para converter de e para um URL.

  • Métodos para listar arquivos e diretórios por filtro e extensão.

  • Métodos para comparar o conteúdo do arquivo.

  • Métodos para arquivar a data da última alteração.

  • Métodos para calcular uma soma de verificação.

Exemplo de classe FileUtils

Aqui está o arquivo de entrada que precisamos analisar -

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);
   }
}

Resultado

A saída é mencionada abaixo -

Temp
Welcome to TutorialsPoint. Simply Easy Learning.

FilenameUtils fornece um método para trabalhar com nomes de arquivo sem usar o objeto Arquivo. Ele funciona em diferentes sistemas operacionais de maneira semelhante. Esta aula resolve problemas ao passar de uma máquina de desenvolvimento baseada em Windows para uma máquina de produção baseada em Unix.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.FilenameUtils Classe -

public class FilenameUtils
   extends Object

Recursos de FileNameUtils

Esta classe define seis componentes em um nome de arquivo. Considere um exemplo de local comoC:\dev\project\file.txt. Então, os componentes são os seguintes:

  • Prefixo - C: \

  • Caminho relativo - dev \ project \

  • Caminho absoluto - C: \ dev \ project \

  • Nome - arquivo.txt

  • Nome da base - arquivo

  • Extensão - txt

Para identificar um diretório, adicione um separador ao nome do arquivo.

Exemplo de classe FilenameUtils

O exemplo da classe FilenameUtils é fornecido abaixo -

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));
   }
}

Resultado

O resultado é dado abaixo -

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 fornece um método para obter o espaço livre em uma unidade de disco.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.FileSystemUtils Classe -

public class FileSystemUtils
   extends Object

Exemplo de classe FileSystemUtils

A seguir está o exemplo da 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());
      }
   }
}

Resultado

A seguir está o resultado -

Free Space 61355640 kb

Enumeração da distinção entre maiúsculas e minúsculas IO. Diferentes sistemas operacionais têm diferentes regras de diferenciação de maiúsculas e minúsculas para nomes de arquivo. Por exemplo, o Windows não diferencia maiúsculas de minúsculas para a nomenclatura de arquivos, enquanto o Unix diferencia maiúsculas de minúsculas. IOCase captura essa diferença, fornece uma enumeração para controlar como as comparações de nome de arquivo devem ser realizadas. Ele também fornece métodos para usar a enumeração para realizar comparações.

Declaração Enum

A seguir está a declaração para org.apache.commons.io.IOCase Enum -

public enum IOCase
   extends Enum<IOCase> implements Serializable

Exemplo de IOCase Enum

Um exemplo de IOCase Enum é fornecido abaixo -

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));
   }
}

Resultado

Irá imprimir o seguinte resultado -

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

LineIterator fornece uma maneira flexível de trabalhar com um arquivo baseado em linha. Vamos aprender mais sobre o mesmo neste capítulo.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.LineIterator Classe -

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

Exemplo de classe LineIterator

Aqui está o arquivo de entrada que precisamos analisar -

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());
         }
      }
   }
}

Resultado

Irá imprimir o seguinte resultado -

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

NameFileFilter no Commons IO filtra os nomes dos arquivos para um nome.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.filefilter.NameFileFilter Classe :

public class NameFileFilter
   extends AbstractFileFilter implements Serializable

Exemplo de classe NameFileFilter

Aqui está o arquivo de entrada que precisamos analisar -

Welcome to TutorialsPoint. Simply Easy Learning.

Vamos imprimir todos os arquivos e diretórios do diretório atual e, a seguir, filtrar um arquivo cujo nome seja 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]);
      }
   }
}

Resultado

Irá imprimir o seguinte resultado -

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with name input.txt

input.txt

WildcardFileFilter no Commons IO filtra os arquivos usando os curingas fornecidos.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.filefilter.WildcardFileFilter Classe -

public class WildcardFileFilter
   extends AbstractFileFilter implements Serializable

Exemplo de classe WildcardFileFilter

Aqui está o arquivo de entrada que precisamos analisar

Welcome to TutorialsPoint. Simply Easy Learning.

Vamos imprimir todos os arquivos e diretórios do diretório atual e, em seguida, filtrar um arquivo cujo nome termina com 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]);
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File name ending with t

.project
input.txt

SuffixFileFilter filtra os arquivos baseados no sufixo. Isso é usado para recuperar todos os arquivos de um tipo específico.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.filefilter.SuffixFileFilter Classe -

public class SuffixFileFilter
   extends AbstractFileFilter implements Serializable

Exemplo de classe SuffixFileFilter

Aqui está o arquivo de entrada que precisamos analisar -

Welcome to TutorialsPoint. Simply Easy Learning.

Vamos imprimir todos os arquivos e diretórios do diretório atual e depois filtrar um arquivo com extensão 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]);
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with extenstion txt

input.txt

PrefixFileFilter filtra os arquivos baseados em prefixo.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.filefilter.PrefixFileFilter Classe -

public class PrefixFileFilter
   extends AbstractFileFilter implements Serializable

Exemplo de classe PrefixFileFilter

Aqui está o arquivo de entrada que precisamos analisar -

Welcome to TutorialsPoint. Simply Easy Learning.

Vamos imprimir todos os arquivos e diretórios do diretório atual e, a seguir, filtrar um arquivo com nome começando com 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]);
      }
   }
}

Resultado

Irá imprimir o seguinte resultado -

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with extenstion txt

input.txt

OrFileFilter fornece lógica OR condicional em uma lista de filtros de arquivo. Ele retorna verdadeiro, se algum filtro na lista retornar verdadeiro. Caso contrário, ele retorna falso.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.filefilter.OrFileFilter Classe -

public class OrFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

Exemplo de classe OrFileFilter

Aqui está o arquivo de entrada que precisamos analisar -

Welcome to TutorialsPoint. Simply Easy Learning.

Vamos imprimir todos os arquivos e diretórios do diretório atual e, a seguir, filtrar um arquivo com o nome começando com. ou termina com 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]);
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File starting with . or ends with t

.classpath
.project
.settings
input.txt

AndFileFilter fornece condicional e lógica em uma lista de filtros de arquivo. Ele retorna verdadeiro se todos os filtros da lista retornarem verdadeiros. Caso contrário, ele retorna falso.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.filefilter.AndFileFilter Classe -

public class AndFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

Exemplo de classe AndFileFilter

Aqui está o arquivo de entrada que precisamos analisar -

Welcome to TutorialsPoint. Simply Easy Learning.

Vamos imprimir todos os arquivos e diretórios do diretório atual e, a seguir, filtrar um arquivo com o nome começando com. e termina com 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]);
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File starting with . or ends with t

.project

FileEntry fornece o estado de um arquivo ou diretório. Atributos de arquivo em um determinado momento.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.monitor.FileEntry Classe -

public class FileEntry
   extends Object implements Serializable

Recursos de FileEntry

O objeto de classe FileEntry fornece os seguintes atributos de arquivo em um determinado momento.

  • getName () - nome do arquivo.

  • existe () - verifica se o arquivo existe ou não.

  • isDirectory () - verifica se o arquivo é um diretório.

  • lastModified () - fornece a hora da data da última modificação.

  • listFiles () - fornece o conteúdo do diretório.

Exemplo de classe FileEntry

Aqui está o arquivo de entrada que precisamos analisar -

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());
   }
}

Resultado

Irá imprimir o seguinte resultado.

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

FileAlterationObserver representa o estado dos arquivos abaixo de um diretório raiz, verifica o sistema de arquivos e notifica os ouvintes sobre a criação, alteração ou exclusão de eventos.

Declaração de Classe

A seguir está a declaração para

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

public class FileAlterationObserver
   extends Object implements Serializable

Exemplo de classe FileAlterationObserver

Aqui está o arquivo de entrada que precisamos analisar -

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());
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

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

FileAlterationMonitor representa um encadeamento que gera um encadeamento de monitoramento, disparando qualquer FileAlterationObserver registrado em um intervalo especificado.

Declaração de Classe

A seguir está a declaração para a classe org.apache.commons.io.monitor.FileAlterationMonitor -

public final class FileAlterationMonitor
   extends Object implements Runnable

Exemplo de classe FileAlterationMonitor

Aqui está o arquivo de entrada que precisamos analisar -

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());
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

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

NameFileComparator compara os nomes de dois arquivos. Ele pode ser usado para classificar as listas ou matrizes de arquivos, usando seus nomes, seja em uma forma sensível a maiúsculas, minúsculas ou dependente do sistema.

Declaração de Classe

A seguir está a declaração para

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

public class NameFileComparator
   extends Object implements Serializable

Exemplo de classe NameFileComparator

Aqui está o arquivo de entrada que precisamos analisar -

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());
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

Sorted By Name:
.classpath
.project
input.txt

SizeFileComparator compara os tamanhos de dois arquivos / diretório. Ele pode ser usado para classificar as listas ou matrizes de arquivos usando seu tamanho ou diretórios, com base no número de filhos.

Declaração de Classe

A seguir está a declaração para

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

public class SizeFileComparator
   extends Object implements Serializable

Exemplo de classe SizeFileComparator

Aqui está o arquivo de entrada que precisamos analisar -

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());
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

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

LastModifiedFileComparator compara as datas da última modificação de dois arquivos / diretório. Ele pode ser usado para classificar as listas ou matrizes de arquivos / diretórios usando as datas da última modificação.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.comparator.LastModifiedFileComparator Classe -

public class LastModifiedFileComparator
   extends Object implements Serializable

Exemplo de classe LastModifiedFileComparator

Aqui está o arquivo de entrada que precisamos analisar -

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()));
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

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

É um proxy InputStream que grava de forma transparente uma cópia de todos os bytes que são lidos do fluxo do proxy para um determinado OutputStream. O fluxo de entrada do proxy é fechado quando o método close () neste proxy é chamado. Ele pode ser usado para operar dois fluxos coletivamente ao mesmo tempo.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.input.TeeInputStream Classe -

public class TeeInputStream
   extends ProxyInputStream

Exemplo de classe TeeInputStream

Neste exemplo, fechar um TeeInputStream fecha o TeeInputStream, bem como os objetos 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());
         }
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

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

TeeOutputStream divide o OutputStream. É nomeado após o comando unix 'tee'. Ele permite que um fluxo seja ramificado em dois fluxos.

Declaração de Classe

A seguir está a declaração para org.apache.commons.io.output.TeeOutputStream Classe -

public class TeeOutputStream
   extends ProxyOutputStream

Exemplo de classe TeeOutputStream

Neste exemplo, TeeOutputStream aceita dois fluxos de saída como parâmetro e passa dados para os dados definidos TeeOutputStream para ambos os fluxos de saída.

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());
         }
      }
   }
}

Resultado

Irá imprimir o seguinte resultado.

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