Apache Commons IO - Краткое руководство
Библиотека ввода-вывода Apache Commons предоставляет различные служебные классы для общих операций ввода-вывода файлов, охватывающих широкий спектр вариантов использования. Это помогает избежать написания шаблонного кода.
Библиотека Apache Commons IO предоставляет классы для следующих категорий:
Классы полезности
Эти классы, находящиеся под org.apache.commons.ioпакет, обеспечивает сравнение файлов и строк. Ниже приведены некоторые из примеров.
IOUtils- Предоставляет служебные методы для чтения, записи и копирования файлов. Методы работают с InputStream, OutputStream, Reader и Writer.
FilenameUtils- Предоставляет метод работы с именами файлов без использования файлового объекта. Он работает в разных операционных системах одинаково.
FileUtils - Предоставляет метод для управления файлами, например перемещение, открытие, проверка существования, чтение файла и т. Д. Эти методы используют объект файла.
IOCase - Предоставляет метод для обработки и сравнения строк.
FileSystemUtils - Предоставляет метод получения свободного места на диске.
LineIterator - Обеспечивает гибкий способ работы с построчным файлом.
Классы фильтров
Классы фильтров, входящие в пакет org.apache.commons.io.filefilter, предоставляют методы для фильтрации файлов на основе логических критериев вместо утомительных сравнений на основе строк. Ниже приведены некоторые из примеров.
NameFileFilter - Фильтрует имена файлов по имени.
WildcardFileFilter - Фильтрует файлы с использованием предоставленных подстановочных знаков.
SuffixFileFilter- Фильтрует файлы по суффиксу. Это используется для получения всех файлов определенного типа.
PrefixFileFilter - Фильтрует файлы по префиксу.
OrFileFilter- Обеспечивает логику условного ИЛИ для списка фильтров файлов. Возвращает истину, если какие-либо фильтры в списке возвращают истину. В противном случае возвращается false.
AndFileFilter- Предоставляет условные и логические условия для списка файловых фильтров. Возвращает false, если какие-либо фильтры в списке возвращают false. В противном случае возвращается истина.
Классы файлового монитора
Классы файлового монитора, находящиеся под org.apache.commons.io.monitorпакет, обеспечивает контроль для отслеживания изменений в конкретном файле или папке и позволяет выполнять соответствующие действия с изменениями. Ниже приведены некоторые из примеров.
FileEntry- Предоставляет состояние файла или каталога. Атрибуты файла на определенный момент времени.
FileAlterationObserver - Представляет состояние файлов в корневом каталоге, проверяет файловую систему и уведомляет слушателей о событиях создания, изменения или удаления.
FileAlterationMonitor - Представляет поток, который порождает поток мониторинга, запускающий любой зарегистрированный FileAlterationObserver с заданным интервалом.
Классы компараторов
Классы файлового монитора в org.apache.commons.io.comparator пакет позволяет легко сравнивать и сортировать файлы и каталоги.
NameFileComparator - Сравните названия двух файлов.
SizeFileComparator - Сравните размер двух файлов.
LastModifiedFileComparator - Сравните даты последнего изменения двух файлов.
Классы потоков
Существует несколько реализаций InputStream в пакете org.apache.commons.io.input и OutputStream в пакете org.apache.commons.io.output для выполнения полезных задач с потоками. Ниже приведены некоторые из примеров.
NullOutputStream - Поглощает все данные, отправленные с любой ошибкой.
TeeOutputStream - Отправляет вывод в два потока.
ByteArrayOutputStream - Более быстрая версия класса JDK.
CountingOutputStream - Подсчитывает количество байтов, прошедших через поток.
ProxyOutputStream - Изменяет вызовы на прокси-поток.
LockableFileWriter - FileWriter для создания файлов блокировки и обеспечения простой обработки блокировки файлов между потоками.
В этой главе мы узнаем о настройке локальной среды Apache Commons IO и о том, как настроить путь Commons IO для Windows 2000 / XP, Windows 95/98 / ME и т. Д. Мы также узнаем о некоторых популярных редакторах java и как скачать архив Commons IO.
Настройка локальной среды
Если вы все еще хотите настроить свою среду для языка программирования Java, то в этом разделе вы узнаете, как загрузить и установить Java на свой компьютер. Пожалуйста, выполните шаги, указанные ниже, чтобы настроить среду.
Java SE можно бесплатно скачать по ссылке https://www.oracle.comИтак, вы загружаете версию, основанную на вашей операционной системе.
Следуйте инструкциям, чтобы загрузить Java и запустить .exeчтобы установить Java на свой компьютер. После того, как вы установили Java на свой компьютер, вам нужно будет установить переменные среды, чтобы они указывали на правильные каталоги установки.
Путь для Windows 2000 / XP
Давайте разберемся, как настроить путь для Windows 2000 / XP. Мы предполагаем, что вы установили Java вc:\Program Files\java\jdk каталог.
Щелкните правой кнопкой мыши «Мой компьютер» и выберите «Свойства».
Нажмите кнопку «Переменные среды» на вкладке «Дополнительно».
Теперь измените переменную «Путь», чтобы она также содержала путь к исполняемому файлу Java. Например, если путь в настоящее время установлен на 'C: \ WINDOWS \ SYSTEM32', измените свой путь на чтение'C:\WINDOWS\SYSTEM32;c:\Program Files\java\jdk\bin'.
Путь для Windows 95/98 / ME
Давайте разберемся, как настроить путь для Windows 95/98 / ME. Мы предполагаем, что вы установили Java вc:\Program Files\java\jdk каталог.
Отредактируйте файл 'C: \ autoexec.bat' и добавьте в конец следующую строку - 'SET PATH =% PATH%; C: \ Program Files \ java \ jdk \ bin'
Путь для Linux, UNIX, Solaris, FreeBSD
Переменная среды PATH должна указывать на то место, где были установлены двоичные файлы Java. Обратитесь к документации по вашей оболочке, если у вас возникли проблемы с этим.
Например, если вы используете bash в качестве оболочки, вы должны добавить следующую строку в конец вашего '.bashrc: export PATH = / path / to / java: $ PATH'
Популярные редакторы Java
Для написания программ на Java вам понадобится текстовый редактор. На рынке доступно множество сложных IDE. Но пока вы можете рассмотреть одно из следующих:
Notepad - На компьютере с Windows вы можете использовать любой простой текстовый редактор, например Блокнот (рекомендуется для этого урока), TextPad.
Netbeans - Это Java IDE с открытым исходным кодом, бесплатная и может быть загружена с https://www.netbeans.org/index.html.
Eclipse - Это также Java IDE, разработанная сообществом разработчиков открытого исходного кода eclipse, которую можно загрузить с https://www.eclipse.org/.
Скачать общий архив ввода-вывода
Загрузите последнюю версию файла jar Apache Common IO с сайта commons-io-2.6- bin.zip, который доступен по адресу download_io.cgi. На момент написания этого руководства мы загрузили commons-io-2.6-bin.zip и скопировали его в папку C: \> Apache.
Операционные системы | Имя архива |
---|---|
Windows | commons-io-2.6-bin.zip |
Linux | Commons-io-2.6-bin.tar.gz |
Mac | Commons-io-2.6-bin.tar.gz |
Общая среда ввода-вывода Apache
Установить APACHE_HOMEпеременная среды, указывающая на местоположение базового каталога, в котором на вашем компьютере хранится Apache jar. Предположим, мы извлекли commons-io-2.6-bin.zip в папку Apache в различных операционных системах следующим образом.
Операционные системы | Вывод |
---|---|
Windows | Установите для переменной среды APACHE_HOME значение C: \ Apache |
Linux | экспорт APACHE_HOME = / usr / local / Apache |
Mac | экспорт APACHE_HOME = / Библиотека / Apache |
Установить переменную CLASSPATH
Установить CLASSPATHпеременная окружения, указывающая на расположение Common IO jar. Предположим, вы сохранили commons-io-2.6-bin.zip в папке Apache в различных операционных системах следующим образом.
Операционные системы | Вывод |
---|---|
Windows | Установите для переменной среды CLASSPATH значение% CLASSPATH%;% APACHE_HOME% \ commons-io-2.6.jar;.; |
Linux | экспорт CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-io-2.6.jar :. |
Mac | экспорт CLASSPATH = $ CLASSPATH: $ APACHE_HOME / commons-io-2.6.jar :. |
IOUtils предоставляет служебные методы для чтения, записи и копирования файлов. Методы работают с InputStream, OutputStream, Reader и Writer.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.IOUtils Класс -
public class IOUtils
extends Object
Особенности IOUtils
Характеристики IOUtils приведены ниже -
Предоставляет статические служебные методы для операций ввода / вывода.
toXXX () - читает данные из потока.
write () - записать данные в поток.
copy () - копировать все данные из потока в другой поток.
contentEquals - сравнивает содержимое двух потоков.
Пример класса IOUtils
Вот входной файл, который нам нужно проанализировать -
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") );
}
}
}
Вывод
Он напечатает следующий результат -
Welcome to TutorialsPoint. Simply Easy Learning.
Welcome to TutorialsPoint. Simply Easy Learning.
FileUtils предоставляет метод для управления файлами, например перемещение, открытие, проверка существования, чтение файла и т. Д. Эти методы используют объект File.
Объявление класса
Ниже приводится объявление для класса org.apache.commons.io.FileUtils -
public class FileUtils
extends Object
Особенности FileUtils
Особенности FileUtils указаны ниже -
Способы записи в файл.
Методы чтения из файла.
Способы создания каталога, включающего родительские каталоги.
Способы копирования файлов и каталогов.
Способы удаления файлов и каталогов.
Методы преобразования в URL и обратно.
Способы составления списка файлов и каталогов по фильтру и расширению.
Методы сравнения содержимого файлов.
Методы записи даты последнего изменения.
Способы подсчета контрольной суммы.
Пример класса FileUtils
Вот входной файл, который нам нужно проанализировать -
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);
}
}
Вывод
Результат упомянут ниже -
Temp
Welcome to TutorialsPoint. Simply Easy Learning.
FilenameUtils предоставляет метод для работы с именами файлов без использования File Object. Он работает в разных операционных системах одинаково. Этот класс решает проблемы при переходе с машины для разработки на базе Windows на производственную машину на базе Unix.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.FilenameUtils Класс -
public class FilenameUtils
extends Object
Особенности FileNameUtils
Этот класс определяет шесть компонентов в имени файла. Рассмотрим пример местоположения какC:\dev\project\file.txt. Тогда компоненты следующие:
Префикс - C: \
Относительный путь - dev \ project \
Абсолютный путь - C: \ dev \ project \
Имя - file.txt
Базовое имя - файл
Расширение - txt
Чтобы идентифицировать каталог, добавьте разделитель к имени файла.
Пример класса FilenameUtils
Пример класса FilenameUtils приведен ниже -
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));
}
}
Вывод
Результат приведен ниже -
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 предоставляет метод для получения свободного места на диске.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.FileSystemUtils Класс -
public class FileSystemUtils
extends Object
Пример класса FileSystemUtils
Ниже приведен пример класса 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());
}
}
}
Вывод
Ниже приведен результат -
Free Space 61355640 kb
Перечисление чувствительности к регистру ввода-вывода. В разных операционных системах действуют разные правила чувствительности к регистру для имен файлов. Например, в Windows регистр не учитывается при именовании файлов, в то время как в Unix регистр учитывается. IOCase фиксирует эту разницу, предоставляет перечисление для управления тем, как должно выполняться сравнение имен файлов. Он также предоставляет методы для использования перечисления для выполнения сравнений.
Объявление Enum
Ниже приводится объявление для org.apache.commons.io.IOCase Enum -
public enum IOCase
extends Enum<IOCase> implements Serializable
Пример IOCase Enum
Пример IOCase Enum приведен ниже -
IOTester.java
import java.io.IOException;
import org.apache.commons.io.IOCase;
public class IOTester {
public static void main(String[] args) {
try {
usingIOCase();
} catch(IOException e) {
System.out.println(e.getMessage());
}
}
public static void usingIOCase() throws IOException {
String text = "Welcome to TutorialsPoint. Simply Easy Learning.";
String text1 = "WELCOME TO TUTORIALSPOINT. SIMPLY EASY LEARNING.";
System.out.println("Ends with Learning (case sensitive): " + IOCase.SENSITIVE.checkEndsWith(text1, "Learning."));
System.out.println("Ends with Learning (case insensitive): " + IOCase.INSENSITIVE.checkEndsWith(text1, "Learning."));
System.out.println("Equality Check (case sensitive): " + IOCase.SENSITIVE.checkEquals(text, text1));
System.out.println("Equality Check (case insensitive): " + IOCase.INSENSITIVE.checkEquals(text, text1));
}
}
Вывод
Он напечатает следующий результат -
Ends with Learning (case sensitive): false
Ends with Learning (case insensitive): true
Equality Check (case sensitive): false
Equality Check (case insensitive): true
LineIterator предоставляет гибкий способ работы с построчным файлом. Давайте узнаем о том же в этой главе.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.LineIterator Класс -
public class LineIterator
extends Object implements Iterator<String>, Closeable
Пример класса LineIterator
Вот входной файл, который нам нужно проанализировать -
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());
}
}
}
}
Вывод
Он напечатает следующий результат -
Contents of input.txt
Welcome to TutorialsPoint. Simply Easy Learning.
Learn web technologies,
prepare exams,
code online,
all at one place.
NameFileFilter в Commons IO фильтрует имена файлов по имени.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.filefilter.NameFileFilter Класс :
public class NameFileFilter
extends AbstractFileFilter implements Serializable
Пример класса NameFileFilter
Вот входной файл, который нам нужно проанализировать -
Welcome to TutorialsPoint. Simply Easy Learning.
Давайте распечатаем все файлы и каталоги в текущем каталоге, а затем отфильтруем файл с именем 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]);
}
}
}
Вывод
Он напечатает следующий результат -
All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File with name input.txt
input.txt
WildcardFileFilter в Commons IO фильтрует файлы с помощью предоставленных подстановочных знаков.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.filefilter.WildcardFileFilter Класс -
public class WildcardFileFilter
extends AbstractFileFilter implements Serializable
Пример класса WildcardFileFilter
Вот входной файл, который нам нужно проанализировать
Welcome to TutorialsPoint. Simply Easy Learning.
Давайте напечатаем все файлы и каталоги в текущем каталоге, а затем отфильтруем файл, имя которого заканчивается на 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]);
}
}
}
Вывод
Он напечатает следующий результат.
All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File name ending with t
.project
input.txt
SuffixFileFilter фильтрует файлы на основе суффикса. Это используется для получения всех файлов определенного типа.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.filefilter.SuffixFileFilter Класс -
public class SuffixFileFilter
extends AbstractFileFilter implements Serializable
Пример класса SuffixFileFilter
Вот входной файл, который нам нужно проанализировать -
Welcome to TutorialsPoint. Simply Easy Learning.
Напечатаем все файлы и каталоги в текущем каталоге, а затем отфильтруем файл с расширением 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]);
}
}
}
Вывод
Он напечатает следующий результат.
All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File with extenstion txt
input.txt
PrefixFileFilter фильтрует файлы на основе префикса.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.filefilter.PrefixFileFilter Класс -
public class PrefixFileFilter
extends AbstractFileFilter implements Serializable
Пример класса PrefixFileFilter
Вот входной файл, который нам нужно проанализировать -
Welcome to TutorialsPoint. Simply Easy Learning.
Давайте распечатаем все файлы и каталоги в текущем каталоге, а затем отфильтруем файл с именем, начинающимся с ввода.
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]);
}
}
}
Вывод
Он напечатает следующий результат -
All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File with extenstion txt
input.txt
OrFileFilter предоставляет логику условного ИЛИ для списка файловых фильтров. Он возвращает истину, если какие-либо фильтры в списке возвращают истину. В противном случае возвращается false.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.filefilter.OrFileFilter Класс -
public class OrFileFilter
extends AbstractFileFilter implements ConditionalFileFilter, Serializable
Пример класса OrFileFilter
Вот входной файл, который нам нужно проанализировать -
Welcome to TutorialsPoint. Simply Easy Learning.
Давайте напечатаем все файлы и каталоги в текущем каталоге, а затем отфильтруем файл с именем, начинающимся с. или заканчивается на 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]);
}
}
}
Вывод
Он напечатает следующий результат.
All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File starting with . or ends with t
.classpath
.project
.settings
input.txt
AndFileFilter предоставляет условные и логические условия для списка файловых фильтров. Он возвращает истину, если все фильтры в списке возвращают истину. В противном случае возвращается false.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.filefilter.AndFileFilter Класс -
public class AndFileFilter
extends AbstractFileFilter implements ConditionalFileFilter, Serializable
Пример класса AndFileFilter
Вот входной файл, который нам нужно проанализировать -
Welcome to TutorialsPoint. Simply Easy Learning.
Давайте напечатаем все файлы и каталоги в текущем каталоге, а затем отфильтруем файл с именем, начинающимся с. и заканчивается на 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]);
}
}
}
Вывод
Он напечатает следующий результат.
All files and Folders.
.classpath
.project
.settings
bin
input.txt
src
File starting with . or ends with t
.project
FileEntry предоставляет состояние файла или каталога. Атрибуты файла на определенный момент времени.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.monitor.FileEntry Класс -
public class FileEntry
extends Object implements Serializable
Особенности FileEntry
Объект класса FileEntry предоставляет следующие атрибуты файла в определенный момент времени.
getName () - имя файла.
exists () - проверяет, существует файл или нет.
isDirectory () - проверяет, является ли файл каталогом.
lastModified () - выдает дату последнего изменения и время.
listFiles () - выдает содержимое каталога.
Пример класса FileEntry
Вот входной файл, который нам нужно проанализировать -
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());
}
}
Вывод
Он напечатает следующий результат.
Monitored File: input.txt
File name: input.txt
Is Directory: false
FileAlterationObserver представляет состояние файлов в корневом каталоге, проверяет файловую систему и уведомляет слушателей о событиях создания, изменения или удаления.
Объявление класса
Ниже приводится декларация для
org.apache.commons.io.monitor.FileAlterationObserver Класс -
public class FileAlterationObserver
extends Object implements Serializable
Пример класса FileAlterationObserver
Вот входной файл, который нам нужно проанализировать -
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());
}
}
}
Вывод
Он напечатает следующий результат.
Folder created: test
File created: test1
Folder deleted: test
File deleted: test1
FileAlterationMonitor представляет поток, который порождает поток мониторинга, запускающий любой зарегистрированный FileAlterationObserver с заданным интервалом.
Объявление класса
Ниже приводится объявление для класса org.apache.commons.io.monitor.FileAlterationMonitor:
public final class FileAlterationMonitor
extends Object implements Runnable
Пример класса FileAlterationMonitor
Вот входной файл, который нам нужно проанализировать -
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());
}
}
}
Вывод
Он напечатает следующий результат.
Folder created: test
File created: test1
Folder deleted: test
File deleted: test1
NameFileComparator сравнивает имена двух файлов. Его можно использовать для сортировки списков или массивов файлов по их именам с учетом регистра, без учета регистра или с учетом регистра в зависимости от системы.
Объявление класса
Ниже приводится декларация для
org.apache.commons.io.comparator.NameFileComparator Класс -
public class NameFileComparator
extends Object implements Serializable
Пример класса NameFileComparator
Вот входной файл, который нам нужно проанализировать -
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());
}
}
}
Вывод
Он напечатает следующий результат.
Sorted By Name:
.classpath
.project
input.txt
SizeFileComparator сравнивает размеры двух файлов / директорий. Его можно использовать для сортировки списков или массивов файлов по их размеру или каталогам в зависимости от количества дочерних файлов.
Объявление класса
Ниже приводится декларация для
org.apache.commons.io.comparator.SizeFileComparator Класс -
public class SizeFileComparator
extends Object implements Serializable
Пример класса SizeFileComparator
Вот входной файл, который нам нужно проанализировать -
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());
}
}
}
Вывод
Он напечатает следующий результат.
Sorted By Size:
input.txt, size:124
.project, size:382
.classpath, size:441
LastModifiedFileComparator сравнивает даты последнего изменения двух файлов / каталогов. Его можно использовать для сортировки списков или массивов файлов / каталогов по датам их последнего изменения.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.comparator.LastModifiedFileComparator Класс -
public class LastModifiedFileComparator
extends Object implements Serializable
Пример класса LastModifiedFileComparator
Вот входной файл, который нам нужно проанализировать -
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()));
}
}
}
Вывод
Он напечатает следующий результат.
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
Это прокси InputStream, который прозрачно записывает копию всех байтов, считываемых из потока прокси, в данный OutputStream. Входной поток прокси закрывается, когда вызывается метод close () на этом прокси. Его можно использовать для одновременного управления двумя потоками одновременно.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.input.TeeInputStream Класс -
public class TeeInputStream
extends ProxyInputStream
Пример класса TeeInputStream
В этом примере закрытие TeeInputStream закрывает TeeInputStream, а также объекты 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());
}
}
}
}
Вывод
Он напечатает следующий результат.
Output stream 1: Welcome to TutorialsPoint. Simply Easy Learning.
Output stream 2: Welcome to TutorialsPoint. Simply Easy Learning.
TeeOutputStream разделяет OutputStream. Он назван в честь команды unix 'tee'. Это позволяет разветвить поток на два потока.
Объявление класса
Ниже приводится декларация для org.apache.commons.io.output.TeeOutputStream Класс -
public class TeeOutputStream
extends ProxyOutputStream
Пример класса TeeOutputStream
В этом примере TeeOutputStream принимает два выходных потока в качестве параметра и передает данные в набор данных 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());
}
}
}
}
Вывод
Он напечатает следующий результат.
Output stream 1: Welcome to TutorialsPoint. Simply Easy Learning.
Output stream 2: Welcome to TutorialsPoint. Simply Easy Learning.