Apache Commons IO - Szybki przewodnik

Biblioteka Apache Commons IO zapewnia różne klasy narzędziowe dla typowych operacji dla File IO, obejmujące szeroki zakres przypadków użycia. Pomaga to uniknąć pisania kodu standardowego.

Biblioteka Apache Commons IO zapewnia klasy dla następujących kategorii -

Klasy użytkowe

Te klasy, które są w ramach org.apache.commons.iopakiet, zapewnia porównanie plików i ciągów. Oto kilka przykładów.

  • IOUtils- Zapewnia narzędzia do czytania, pisania i kopiowania plików. Metody działają z InputStream, OutputStream, Reader i Writer.

  • FilenameUtils- Zapewnia metodę pracy z nazwami plików bez korzystania z obiektu pliku. Działa na różnych systemach operacyjnych w podobny sposób.

  • FileUtils - Zapewnia metody manipulowania plikami, takie jak przenoszenie, otwieranie, sprawdzanie istnienia, odczytywanie pliku itp. Te metody używają obiektu pliku.

  • IOCase - Zapewnia metodę manipulowania ciągiem i porównywania.

  • FileSystemUtils - Zapewnia metodę uzyskania wolnego miejsca na dysku.

  • LineIterator - Zapewnia elastyczny sposób pracy z plikiem opartym na wierszach.

Klasy filtrów

Filtruj klasy, które znajdują się w pakiecie org.apache.commons.io.filefilter, zapewnia metody filtrowania plików na podstawie kryteriów logicznych zamiast żmudnych porównań opartych na ciągach znaków. Oto kilka przykładów.

  • NameFileFilter - Filtruje nazwy plików dla nazwy.

  • WildcardFileFilter - Filtruje pliki przy użyciu dostarczonych symboli wieloznacznych.

  • SuffixFileFilter- Filtruje pliki na podstawie przyrostka. Służy do pobierania wszystkich plików określonego typu.

  • PrefixFileFilter - Filtruje pliki na podstawie prefiksu.

  • OrFileFilter- Zapewnia warunkową logikę OR na liście filtrów plików. Zwraca wartość „prawda”, jeśli którykolwiek z filtrów na liście zwraca wartość „prawda”. W przeciwnym razie zwraca fałsz.

  • AndFileFilter- Zapewnia warunkowanie i logikę na liście filtrów plików. Zwraca fałsz, jeśli którykolwiek z filtrów na liście zwraca fałsz. W przeciwnym razie zwraca true.

Klasy monitora plików

Klasy monitora plików, które są poniżej org.apache.commons.io.monitorpakiet, zapewnia kontrolę nad śledzeniem zmian w określonym pliku lub folderze i pozwala na odpowiednie działanie na zmianach. Oto kilka przykładów.

  • FileEntry- Zawiera stan pliku lub katalogu. Atrybuty pliku w określonym momencie.

  • FileAlterationObserver - Reprezentuje stan plików poniżej katalogu głównego, sprawdza system plików i powiadamia słuchaczy o zdarzeniach tworzenia, zmiany lub usuwania.

  • FileAlterationMonitor - Reprezentuje wątek, który tworzy wątek monitorowania wyzwalający każdy zarejestrowany FileAlterationObserver w określonym interwale.

Klasy porównawcze

Klasy monitora plików w ramach org.apache.commons.io.comparator pakiet pozwala na łatwe porównywanie i sortowanie plików i katalogów.

  • NameFileComparator - Porównaj nazwy dwóch plików.

  • SizeFileComparator - Porównaj rozmiar dwóch plików.

  • LastModifiedFileComparator - Porównaj daty ostatniej modyfikacji dwóch plików.

Zajęcia strumieniowe

Istnieje wiele implementacji InputStream w pakiecie org.apache.commons.io.input i OutputStream w pakiecie org.apache.commons.io.output, aby wykonywać użyteczne zadania na strumieniach. Oto kilka przykładów.

  • NullOutputStream - Pochłania wszystkie dane wysłane z jakimkolwiek błędem.

  • TeeOutputStream - Wysyła dane wyjściowe do dwóch strumieni.

  • ByteArrayOutputStream - Szybsza wersja klasy JDK.

  • CountingOutputStream - Zlicza liczbę bajtów przepuszczonych przez strumień.

  • ProxyOutputStream - Zmienia wywołania na strumień proxy.

  • LockableFileWriter - FileWriter do tworzenia plików blokujących i pozwalający na prostą obsługę blokad plików między wątkami.

W tym rozdziale dowiemy się o konfiguracji środowiska lokalnego Apache Commons IO oraz o tym, jak ustawić ścieżkę Commons IO dla Windows 2000 / XP, Windows 95/98 / ME itp. Zrozumiemy także niektóre popularne edytory java i jak pobrać archiwum Commons IO.

Konfiguracja środowiska lokalnego

Jeśli nadal chcesz skonfigurować swoje środowisko pod kątem języka programowania Java, w tej sekcji dowiesz się, jak pobrać i skonfigurować Javę na swoim komputerze. Wykonaj poniższe czynności, aby skonfigurować środowisko.

Oprogramowanie Java SE jest dostępne bezpłatnie do pobrania pod linkiem https://www.oracle.comWięc pobierasz wersję opartą na systemie operacyjnym.

Postępuj zgodnie z instrukcjami, aby pobrać Javę i uruchomić .exeaby zainstalować Javę na swoim komputerze. Po zainstalowaniu Javy na komputerze należałoby ustawić zmienne środowiskowe, aby wskazywały na prawidłowe katalogi instalacyjne.

Ścieżka do systemu Windows 2000 / XP

Pozwól nam zrozumieć, jak ustawić ścieżkę w systemie Windows 2000 / XP. Zakładamy, że zainstalowałeś Javę wc:\Program Files\java\jdk informator.

  • Kliknij prawym przyciskiem myszy „Mój komputer” i wybierz „Właściwości”.

  • Kliknij przycisk „Zmienne środowiskowe” na karcie „Zaawansowane”.

  • Teraz zmień zmienną „Path”, tak aby zawierała również ścieżkę do pliku wykonywalnego Java. Na przykład, jeśli ścieżka jest obecnie ustawiona na „C: \ WINDOWS \ SYSTEM32”, ​​zmień ścieżkę do odczytu'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.

Ścieżka do Windows 95/98 / ME

Zrozummy, jak ustawić ścieżkę dla Windows 95/98 / ME. Zakładamy, że zainstalowałeś Javę wc:\Program Files\java\jdk informator.

  • Edytuj plik „C: \ autoexec.bat” i dodaj na końcu następujący wiersz - „SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin”

Ścieżka do systemów Linux, UNIX, Solaris, FreeBSD

Zmienna środowiskowa PATH powinna wskazywać miejsce, w którym zostały zainstalowane pliki binarne Java. Zajrzyj do dokumentacji powłoki, jeśli masz z tym problem.

Na przykład, jeśli używasz bash jako powłoki, to dodasz następujący wiersz na końcu swojego '.bashrc: export PATH = / path / to / java: $ PATH'

Popularne edytory Java

Do pisania programów w języku Java potrzebny jest edytor tekstu. Na rynku dostępnych jest wiele wyrafinowanych IDE. Ale na razie możesz rozważyć jedną z następujących -

  • Notepad - Na komputerze z systemem Windows możesz użyć dowolnego prostego edytora tekstu, takiego jak Notatnik (zalecany w tym samouczku), TextPad.

  • Netbeans - Jest to środowisko Java IDE o otwartym kodzie źródłowym i bezpłatne, które można pobrać z witryny https://www.netbeans.org/index.html.

  • Eclipse - Jest to również środowisko Java IDE opracowane przez społeczność eclipse open source i można je pobrać z witryny https://www.eclipse.org/.

Pobierz wspólne archiwum we / wy

Pobierz najnowszą wersję pliku jar Apache Common IO z commons-io-2.6- bin.zip, który jest dostępny pod adresem download_io.cgi W czasie pisania tego samouczka pobraliśmy plik commons-io-2.6-bin.zip i skopiowaliśmy go do folderu C: \> Apache.

OS Nazwa archiwum
Windows commons-io-2.6-bin.zip
Linux commons-io-2.6-bin.tar.gz
Prochowiec commons-io-2.6-bin.tar.gz

Środowisko Apache Common IO

Ustaw APACHE_HOMEzmienna środowiskowa wskazująca lokalizację katalogu podstawowego, w którym na komputerze jest przechowywany plik jar Apache. Zakładając, że wyodrębniliśmy plik commons-io-2.6-bin.zip do folderu Apache w różnych systemach operacyjnych w następujący sposób.

OS Wynik
Windows Ustaw zmienną środowiskową APACHE_HOME na C: \ Apache
Linux eksportuj APACHE_HOME = / usr / local / Apache
Prochowiec eksportuj APACHE_HOME = / Library / Apache

Ustaw zmienną CLASSPATH

Ustaw CLASSPATHzmienna środowiskowa, aby wskazywała lokalizację pliku jar Common IO Zakładając, że przechowujesz commons-io-2.6-bin.zip w folderze Apache w różnych systemach operacyjnych w następujący sposób.

OS Wynik
Windows Ustaw zmienną środowiskową CLASSPATH na% CLASSPATH%;% APACHE_HOME% \ commons-io-2.6.jar;.;
Linux export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-io-2.6.jar :.
Prochowiec export CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-io-2.6.jar :.

IOUtils zapewnia narzędzia do odczytywania, pisania i kopiowania plików. Metody działają z InputStream, OutputStream, Reader i Writer.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.IOUtils Klasa -

public class IOUtils
   extends Object

Funkcje IOUtils

Funkcje IOUtils podano poniżej -

  • Zapewnia statyczne metody narzędziowe do operacji wejścia / wyjścia.

  • toXXX () - odczytuje dane ze strumienia.

  • write () - zapisuje dane do strumienia.

  • copy () - kopiuje wszystkie dane do strumienia do innego strumienia.

  • contentEquals - porównaj zawartość dwóch strumieni.

Przykład klasy IOUtils

Oto plik wejściowy, który musimy przeanalizować -

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

Wynik

Wyświetli następujący wynik -

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

FileUtils dostarcza metod do manipulowania plikami, takich jak przenoszenie, otwieranie, sprawdzanie istnienia, odczytywanie pliku itp. Te metody używają obiektu File.

Deklaracja klasy

Poniżej znajduje się deklaracja klasy org.apache.commons.io.FileUtils -

public class FileUtils
   extends Object

Funkcje FileUtils

Funkcje FileUtils opisano poniżej -

  • Metody zapisu do pliku.

  • Metody odczytu z pliku.

  • Metody tworzenia katalogu zawierającego katalogi nadrzędne.

  • Metody kopiowania plików i katalogów.

  • Metody usuwania plików i katalogów.

  • Metody konwersji do iz adresu URL.

  • Metody wyświetlania listy plików i katalogów według filtru i rozszerzenia.

  • Metody porównywania zawartości plików.

  • Metody zapisywania ostatniej zmiany daty.

  • Metody obliczania sumy kontrolnej.

Przykład klasy FileUtils

Oto plik wejściowy, który musimy przeanalizować -

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

Wynik

Dane wyjściowe są wymienione poniżej -

Temp
Welcome to TutorialsPoint. Simply Easy Learning.

FilenameUtils zapewnia metodę do pracy z nazwami plików bez używania File Object. Działa na różnych systemach operacyjnych w podobny sposób. Ta klasa rozwiązuje problemy podczas przechodzenia z maszyny deweloperskiej opartej na systemie Windows na maszynę produkcyjną opartą na systemie Unix.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.FilenameUtils Klasa -

public class FilenameUtils
   extends Object

Funkcje FileNameUtils

Ta klasa definiuje sześć komponentów w nazwie pliku. Rozważ przykładową lokalizację jakoC:\dev\project\file.txt. Następnie elementy są następujące:

  • Prefiks - C: \

  • Ścieżka względna - dev \ project \

  • Bezwzględna ścieżka - C: \ dev \ project \

  • Nazwa - plik.txt

  • Nazwa podstawowa - plik

  • Rozszerzenie - txt

Aby zidentyfikować katalog, dodaj separator do nazwy pliku.

Przykład klasy FilenameUtils

Przykład klasy FilenameUtils jest podany poniżej -

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

Wynik

Dane wyjściowe podano poniżej -

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 zapewnia metodę uzyskiwania wolnego miejsca na dysku.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.FileSystemUtils Klasa -

public class FileSystemUtils
   extends Object

Przykład klasy FileSystemUtils

Poniżej podano przykład klasy 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());
      }
   }
}

Wynik

Poniżej podano wynik -

Free Space 61355640 kb

Wyliczenie wielkości liter we / wy. Różne systemy operacyjne mają różne reguły rozróżniania wielkości liter w nazwach plików. Na przykład system Windows nie rozróżnia wielkości liter w nazewnictwie plików, podczas gdy w systemie Unix rozróżniana jest wielkość liter. IOCase przechwytuje tę różnicę, zapewnia wyliczenie kontrolujące sposób wykonywania porównań nazw plików. Zapewnia również metody użycia wyliczenia do wykonywania porównań.

Deklaracja wyliczenia

Poniżej znajduje się deklaracja org.apache.commons.io.IOCase Enum -

public enum IOCase
   extends Enum<IOCase> implements Serializable

Przykład IOCase Enum

Przykład IOCase Enum podano poniżej -

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

Wynik

Wyświetli następujący wynik -

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

LineIterator zapewnia elastyczny sposób pracy z plikiem liniowym. Dowiedzmy się o tym samym w tym rozdziale.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.LineIterator Klasa -

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

Przykład klasy LineIterator

Oto plik wejściowy, który musimy przeanalizować -

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

Wynik

Wyświetli następujący wynik -

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

NameFileFilter w Commons IO filtruje nazwy plików według nazwy.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.filefilter.NameFileFilter Klasa :

public class NameFileFilter
   extends AbstractFileFilter implements Serializable

Przykład klasy NameFileFilter

Oto plik wejściowy, który musimy przeanalizować -

Welcome to TutorialsPoint. Simply Easy Learning.

Wydrukujmy wszystkie pliki i katalogi w bieżącym katalogu, a następnie przefiltrujmy plik o nazwie 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]);
      }
   }
}

Wynik

Wyświetli następujący wynik -

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with name input.txt

input.txt

WildcardFileFilter w Commons IO filtruje pliki przy użyciu dostarczonych symboli wieloznacznych.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.filefilter.WildcardFileFilter Klasa -

public class WildcardFileFilter
   extends AbstractFileFilter implements Serializable

Przykład klasy WildcardFileFilter

Oto plik wejściowy, który musimy przeanalizować

Welcome to TutorialsPoint. Simply Easy Learning.

Wydrukujmy wszystkie pliki i katalogi w bieżącym katalogu, a następnie przefiltrujmy plik, którego nazwa kończy się na 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]);
      }
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File name ending with t

.project
input.txt

SuffixFileFilter filtruje pliki oparte na sufiksie. Służy do pobierania wszystkich plików określonego typu.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.filefilter.SuffixFileFilter Klasa -

public class SuffixFileFilter
   extends AbstractFileFilter implements Serializable

Przykład klasy SuffixFileFilter

Oto plik wejściowy, który musimy przeanalizować -

Welcome to TutorialsPoint. Simply Easy Learning.

Wydrukujmy wszystkie pliki i katalogi w bieżącym katalogu, a następnie przefiltrujmy plik z rozszerzeniem 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]);
      }
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with extenstion txt

input.txt

PrefixFileFilter filtruje pliki oparte na prefiksie.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.filefilter.PrefixFileFilter Klasa -

public class PrefixFileFilter
   extends AbstractFileFilter implements Serializable

Przykład klasy PrefixFileFilter

Oto plik wejściowy, który musimy przeanalizować -

Welcome to TutorialsPoint. Simply Easy Learning.

Wydrukujmy wszystkie pliki i katalogi w bieżącym katalogu, a następnie przefiltrujmy plik o nazwie zaczynającej się od wejścia.

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

Wynik

Wyświetli następujący wynik -

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with extenstion txt

input.txt

OrFileFilter zapewnia warunkową logikę OR na liście filtrów plików. Zwraca prawdę, jeśli którykolwiek z filtrów na liście zwraca prawdę. W przeciwnym razie zwraca fałsz.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.filefilter.OrFileFilter Klasa -

public class OrFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

Przykład klasy OrFileFilter

Oto plik wejściowy, który musimy przeanalizować -

Welcome to TutorialsPoint. Simply Easy Learning.

Wydrukujmy wszystkie pliki i katalogi w bieżącym katalogu, a następnie przefiltrujmy plik o nazwie zaczynającej się od. lub kończy się na 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]);
      }
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File starting with . or ends with t

.classpath
.project
.settings
input.txt

AndFileFilter zapewnia warunkowe i logiczne na liście filtrów plików. Zwraca prawdę, jeśli wszystkie filtry na liście zwracają prawdę. W przeciwnym razie zwraca fałsz.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.filefilter.AndFileFilter Klasa -

public class AndFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

Przykład klasy AndFileFilter

Oto plik wejściowy, który musimy przeanalizować -

Welcome to TutorialsPoint. Simply Easy Learning.

Wydrukujmy wszystkie pliki i katalogi w bieżącym katalogu, a następnie przefiltrujmy plik o nazwie zaczynającej się od. i kończy się na 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]);
      }
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File starting with . or ends with t

.project

FileEntry zapewnia stan pliku lub katalogu. Atrybuty pliku w określonym momencie.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.monitor.FileEntry Klasa -

public class FileEntry
   extends Object implements Serializable

Funkcje FileEntry

Obiekt klasy FileEntry udostępnia w danym momencie następujące atrybuty plików.

  • getName () - nazwa pliku.

  • istnieje () - sprawdza, czy plik istnieje, czy nie.

  • isDirectory () - sprawdza, czy plik jest katalogiem.

  • lastModified () - podaje datę ostatniej modyfikacji.

  • listFiles () - podaje zawartość katalogu.

Przykład klasy FileEntry

Oto plik wejściowy, który musimy przeanalizować -

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

Wynik

Zostanie wydrukowany następujący wynik.

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

FileAlterationObserver reprezentuje stan plików poniżej katalogu głównego, sprawdza system plików i powiadamia słuchaczy o zdarzeniach tworzenia, zmiany lub usuwania.

Deklaracja klasy

Poniżej znajduje się deklaracja dla

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

public class FileAlterationObserver
   extends Object implements Serializable

Przykład klasy FileAlterationObserver

Oto plik wejściowy, który musimy przeanalizować -

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

Wynik

Zostanie wydrukowany następujący wynik.

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

FileAlterationMonitor reprezentuje wątek, który tworzy wątek monitorujący wyzwalający każdy zarejestrowany FileAlterationObserver w określonym interwale.

Deklaracja klasy

Poniżej znajduje się deklaracja klasy org.apache.commons.io.monitor.FileAlterationMonitor -

public final class FileAlterationMonitor
   extends Object implements Runnable

Przykład klasy FileAlterationMonitor

Oto plik wejściowy, który musimy przeanalizować -

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

Wynik

Zostanie wydrukowany następujący wynik.

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

NameFileComparator porównuje nazwy dwóch plików. Może być używany do sortowania list lub tablic plików, używając ich nazw, z uwzględnieniem wielkości liter, bez uwzględniania wielkości liter lub zależnie od systemu.

Deklaracja klasy

Poniżej znajduje się deklaracja dla

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

public class NameFileComparator
   extends Object implements Serializable

Przykład klasy NameFileComparator

Oto plik wejściowy, który musimy przeanalizować -

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

Wynik

Zostanie wydrukowany następujący wynik.

Sorted By Name:
.classpath
.project
input.txt

SizeFileComparator porównuje rozmiary dwóch plików / katalogu. Może być używany do sortowania list lub tablic plików według ich rozmiaru lub katalogów na podstawie liczby dzieci.

Deklaracja klasy

Poniżej znajduje się deklaracja dla

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

public class SizeFileComparator
   extends Object implements Serializable

Przykład klasy SizeFileComparator

Oto plik wejściowy, który musimy przeanalizować -

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

Wynik

Zostanie wydrukowany następujący wynik.

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

LastModifiedFileComparator porównuje daty ostatniej modyfikacji dwóch plików / katalogu. Może być używany do sortowania list lub tablic plików / katalogów według ich daty ostatniej modyfikacji.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.comparator.LastModifiedFileComparator Klasa -

public class LastModifiedFileComparator
   extends Object implements Serializable

Przykład klasy LastModifiedFileComparator

Oto plik wejściowy, który musimy przeanalizować -

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

Wynik

Zostanie wydrukowany następujący wynik.

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

Jest to proxy InputStream, które w sposób przezroczysty zapisuje kopię wszystkich bajtów, które są odczytywane ze strumienia proxy do danego OutputStream. Strumień wejściowy proxy jest zamykany, gdy wywoływana jest metoda close () na tym serwerze proxy. Może być używany do obsługi dwóch strumieni jednocześnie.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.input.TeeInputStream Klasa -

public class TeeInputStream
   extends ProxyInputStream

Przykład klasy TeeInputStream

W tym przykładzie zamknięcie TeeInputStream powoduje zamknięcie TeeInputStream, a także obiektów 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());
         }
      }
   }
}

Wynik

Zostanie wydrukowany następujący wynik.

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

TeeOutputStream dzieli OutputStream. Jej nazwa pochodzi od polecenia unix „tee”. Umożliwia rozgałęzienie strumienia na dwa strumienie.

Deklaracja klasy

Poniżej znajduje się deklaracja dla org.apache.commons.io.output.TeeOutputStream Klasa -

public class TeeOutputStream
   extends ProxyOutputStream

Przykład klasy TeeOutputStream

W tym przykładzie TeeOutputStream przyjmuje dwa strumienie wyjściowe jako parametr i przekazuje dane do zestawu danych TeeOutputStream do obu strumieni wyjściowych.

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

Wynik

Zostanie wydrukowany następujący wynik.

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