Руководство Java Commons IO
1. Library
Maven Dependency
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
2. IOUtils
IOUtils - это утилитарный класс, который помогает быстрее обрабатывать поток данных. Если вы используете стандартный java.io, вы можете делать то, что хотите. Но хотите быстрее кодировать, экономьте время, используйте IOUtils.
Смотрите Javadoc IOUtils здесь:
Взгляните на код, который будет обрабатываться обычным способом (используя то, что доступно в JDK).
InputStream in = new URL("http://commons.apache.org").openStream();
try {
InputStreamReader inR = new InputStreamReader(in);
BufferedReader buf = new BufferedReader(inR);
String line;
while ((line = buf.readLine()) != null) {
System.out.println(line);
}
} finally {
in.close();
}
И здесь используется код класса IOUtils:
InputStream in = new URL("http://commons.apache.org").openStream();
try {
System.out.println(IOUtils.toString(in));
} finally {
IOUtils.closeQuietly(in);
}
Глядя на два вышеприведённых кода, мы можем ясно видеть, что одна цель, но использовать IOUtils намного быстрее.
ReadURL1.java
package org.o7planning.tutorial.commonsio.io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
public class ReadURL1 {
public static void readURL() throws MalformedURLException, IOException {
InputStream in = new URL("http://commons.apache.org").openStream();
try {
InputStreamReader inR = new InputStreamReader(in);
BufferedReader buf = new BufferedReader(inR);
String line;
while ((line = buf.readLine()) != null) {
System.out.println(line);
}
} finally {
in.close();
}
}
public static void main(String[] args) {
try {
readURL();
} catch (Exception e) {
e.printStackTrace();
}
}
}
ReadURL2.java
package org.o7planning.tutorial.commonsio.io;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.io.IOUtils;
public class ReadURL2 {
public static void readURL() throws MalformedURLException, IOException {
InputStream in = new URL("http://commons.apache.org").openStream();
try {
System.out.println(IOUtils.toString(in));
} finally {
IOUtils.closeQuietly(in);
}
}
public static void main(String[] args) {
try {
readURL();
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. FileUtils
Класс FileUtils содержит утилитарные методы для работы с объектами File. К ним относятся чтение, запись, копирование и сравнение файлов.
Поиск Javadoc FileUtils:
FileUtilsReadFile.java
package org.o7planning.tutorial.commonsio.fileutils;
import java.io.File;
import java.io.IOException;
import java.util.List;
import org.apache.commons.io.FileUtils;
public class FileUtilsReadFile {
public static void readFile() throws IOException {
File file= new File("D:/test.txt");
List<String> lines= FileUtils.readLines(file);
for(String s: lines) {
System.out.println(s);
}
}
public static void main(String[] args) {
try {
readFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileUtilsTouchFile.java
package org.o7planning.tutorial.commonsio.fileutils;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import java.io.File;
public class FileUtilsTouchFile {
public static void main(String[] args) {
try {
// E:/test not exist on disk
File testFile = new File("E:/test.txt");
// Get last modify time
long fileTimestamp = testFile.lastModified();
System.out.println("Time in milis " + fileTimestamp);
// Using the touch() operation
// If file not exists, it create file.
// It change the file date and time stamps
FileUtils.touch(testFile);
System.out.println("Time in milis updated "
+ testFile.lastModified());
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
Первый запуск (Когда E:/test.txt еще не существует на жестком диске)
Второй запуск (Когда E: /test.txt был создан и настроена дата последнего изменения)
Использование FileUtils позволяет вам легко копировать и вставлять файлы из определенного места в другое, или копировать файлы из одной папки в другую.
FileUtilsCopyDirectory.java
package org.o7planning.tutorial.commonsio.fileutils;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
public class FileUtilsCopyDirectory {
public static void main(String[] args) {
File srcDir = new File("C:/test");
File destDir = new File("D:/test/abc");
try {
FileUtils.copyDirectory(srcDir, destDir);
} catch (IOException e) {
e.printStackTrace();
}
}
}
4. FilenameUtils
Класс FilenameUtils содержит утилитарные методы для работы с файлами не используя объекты File. Этот класс для соответствия между Unix и Windows, чтобы помочь переходам между этими средами (например, переход от среды разработки к среде завершенного продукта).
FilenameUtils javadoc:
Иллюстрированный пример, убрать двоеточия на ссылке к файлу:
FilenameUtilsNormalize.java
package org.o7planning.tutorial.commonsio.filenameutils;
import org.apache.commons.io.FilenameUtils;
public class FilenameUtilsNormalize {
public static void main(String[] args) {
String filename = "C:/commons/io/../lang/project.xml";
String normalized = FilenameUtils.normalize(filename);
System.out.println(normalized);
}
}
Запуск и получение результата:
FilenameUtils имеет более 40 утилитарных методов, вы можете посмотреть детали в Javadoc.
5. FileSystemUtils
Класс FileSystemUtils содержит утилитарные методы для работы с файловой системой для доступа к функциям, не поддерживаемыми JDK. В настоящее время, этот класс имеет только методы получения свободного места на диске. Обратите внимание, что он использует команды command line, а не собственный код.
FileSystemUtilsFreeSpaceKb.java
package org.o7planning.tutorial.commonsio.filesystemutils;
import java.io.IOException;
import org.apache.commons.io.FileSystemUtils;
public class FileSystemUtilsFreeSpaceKb {
public static void main(String[] args) {
try {
Long kb = FileSystemUtils.freeSpaceKb("C:/");
System.out.println("Free Space: " + kb + "KB");
} catch (IOException e) {
e.printStackTrace();
}
}
}
6. Line iterator
Класс org.apache.commons.io.LineIterator предоставляет гибкий способ работы с файлом на основе строки. Пример можно создать напрямую или через методы в FileUtils или IOUtils. Рекомендуется использовать:
LineIterator it = FileUtils.lineIterator(file, "UTF-8");
try {
while (it.hasNext()) {
String line = it.nextLine();
// / do something with line
}
} finally {
LineIterator.closeQuietly(it);
}
LineIteratorExample.java
package org.o7planning.tutorial.commonsio.lineiterator;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
public class LineIteratorExample {
public static void main(String[] args) {
try {
File file = new File("D:/test.txt");
LineIterator it = FileUtils.lineIterator(file, "UTF-8");
try {
while (it.hasNext()) {
String line = it.nextLine();
//
if (line != null && line.startsWith("##")) {
System.out.println(line.substring(2));
}
}
} finally {
LineIterator.closeQuietly(it);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
7. Фильтры файлов (File filters)
Пакет org.apache.commons.io.filefilter определяет интерфейс (IOFileFilter) который сочетает оба интерфейса: java.io.FileFilter и java.io.FilenameFilter. Помимо этого, пакет имеет серию классов выполнений (implements) IOFileFilter готовые для вашего пользования, он так же имеет утилитарный класс (FileFilterUtils), позволяющий вам сочетать эти фильтры (filters) друг с другом, чтобы создать новый фильтр. Они используются для фильтрования списка файлов по вашему запросу или используются в FileDialog
Например, java.io.FileFilter может быть использован чтобы вы отфильтровали файлы (File) по вашему усмотрение в определенной папке. Но лучше, если вы будете использовать классы в пакете org.apache.commons.io.filefilter. Там есть много уже написанныз для вас, и нужно просто использовать.
Посмотрите пример когда не используется org.apache.commons.io.filefilter
FileFilterExample1.java
package org.o7planning.tutorial.commonsio.filefilter;
import java.io.File;
import java.io.FileFilter;
public class FileFilterExample1 {
public static void main(String[] args) {
FileFilter filter = new MyFileFilter();
File dir = new File("C:/test");
// Get file with extension js or css.
File[] list = dir.listFiles(filter);
for (File file : list) {
System.out.println("File " + file.getAbsolutePath());
}
}
// Filter accept files (*.js , *.css)
static class MyFileFilter implements FileFilter {
public boolean accept(File pathname) {
String abstractPath = pathname.getAbsolutePath();
if (abstractPath.endsWith(".js") || abstractPath.endsWith(".css")) {
return true;
}
return false;
}
}
}
И, например, используйте класс SuffixFileFilter, расположенный в пакете org.apache.commons.io.filefilter
HiddenFileFilterExample.java
package org.o7planning.tutorial.commonsio.filefilter;
import java.io.File;
import org.apache.commons.io.filefilter.HiddenFileFilter;
public class HiddenFileFilterExample {
public static void main(String[] args) {
File dir = new File("C:/test");
String[] files = dir.list(HiddenFileFilter.HIDDEN);
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
}
}
FileFilterExample2.java
package org.o7planning.tutorial.commonsio.filefilter;
import java.io.File;
import java.io.FileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
public class FileFilterExample2 {
public static void main(String[] args) {
String[] suffixs = new String[] { ".js", ".css" };
FileFilter filter = new SuffixFileFilter(suffixs);
File dir = new File("C:/test");
// Get file with extension js or css.
File[] list = dir.listFiles(filter);
for (File file : list) {
System.out.println("File " + file.getAbsolutePath());
}
}
}
Пример комбинирования два фильтра вместе:
CombineTwoFilterExample.java
package org.o7planning.tutorial.commonsio.filefilter;
import java.io.File;
import java.io.FileFilter;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
public class CombineTwoFilterExample {
public static void main(String[] args) {
String[] suffixs = new String[] { ".js", ".css" };
IOFileFilter filter1 = new SuffixFileFilter(suffixs);
//
IOFileFilter filter2 = HiddenFileFilter.VISIBLE;
//
// Filter accept file with extension (js,css) and Visible.
IOFileFilter newFilter = FileFilterUtils
.andFileFilter(filter1, filter2);
File dir = new File("C:/test");
File[] list = dir.listFiles((FileFilter) newFilter);
for (File file : list) {
System.out.println("File " + file.getAbsolutePath());
}
}
}
8. File comparators (Компаратор File)
Пакет org.apache.commons.io.comparator предоставляет ряд применений java.util.Comparator для java.io.File. Эти компараторы могут использоваться для сортировки списков и массивов файлов
SizeFileComparatorExample.java
package org.o7planning.tutorial.commonsio.comparator;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.comparator.SizeFileComparator;
public class SizeFileComparatorExample {
public static void main(String[] args) throws IOException {
// Current directory
File directory = new File(".");
File[] files = directory.listFiles();
System.out.println("Default order");
displayFiles(files);
Arrays.sort(files, SizeFileComparator.SIZE_COMPARATOR);
System.out
.println("\nSizeFileComparator.SIZE_COMPARATOR (Ascending, directories treated as 0)");
displayFiles(files);
Arrays.sort(files, SizeFileComparator.SIZE_REVERSE);
System.out
.println("\nSizeFileComparator.SIZE_REVERSE (Descending, directories treated as 0)");
displayFiles(files);
Arrays.sort(files, SizeFileComparator.SIZE_SUMDIR_COMPARATOR);
System.out
.println("\nSizeFileComparator.SIZE_SUMDIR_COMPARATOR (Ascending, directory size used)");
displayFilesWithDirectorySizes(files);
Arrays.sort(files, SizeFileComparator.SIZE_SUMDIR_REVERSE);
System.out
.println("\nSizeFileComparator.SIZE_SUMDIR_REVERSE (Descending, directory size used)");
displayFilesWithDirectorySizes(files);
}
public static void displayFiles(File[] files) {
for (File file : files) {
System.out.printf("%-20s Size:" + file.length() + "\n",
file.getName());
}
}
public static void displayFilesWithDirectorySizes(File[] files) {
for (File file : files) {
if (file.isDirectory()) {
System.out.printf(
"%-20s Size:" + FileUtils.sizeOfDirectory(file) + "\n",
file.getName());
} else {
System.out.printf("%-20s Size:" + file.length() + "\n",
file.getName());
}
}
}
}
Результат запуска класса SizeFileComparatorExample:
Default order
.classpath Size:1431
.project Size:569
.settings Size:4096
pom.xml Size:547
src Size:0
target Size:0
test.txt Size:0
SizeFileComparator.SIZE_COMPARATOR (Ascending, directories treated as 0)
.settings Size:4096
src Size:0
target Size:0
test.txt Size:0
pom.xml Size:547
.project Size:569
.classpath Size:1431
SizeFileComparator.SIZE_REVERSE (Descending, directories treated as 0)
.classpath Size:1431
.project Size:569
pom.xml Size:547
.settings Size:4096
src Size:0
target Size:0
test.txt Size:0
SizeFileComparator.SIZE_SUMDIR_COMPARATOR (Ascending, directory size used)
test.txt Size:0
.settings Size:489
pom.xml Size:547
.project Size:569
.classpath Size:1431
src Size:11307
target Size:22433
SizeFileComparator.SIZE_SUMDIR_REVERSE (Descending, directory size used)
target Size:22433
src Size:11307
.classpath Size:1431
.project Size:569
pom.xml Size:547
.settings Size:489
test.txt Size:0
Java Basic
- Настройте java compiler для обработки вашего Annotation (Annotation Processing Tool)
- Программирование на Java для группы с помощью Eclipse и SVN
- Руководство Java WeakReference
- Руководство Java PhantomReference
- Сжатие и декомпрессия в Java
- Настройка Eclipse для использования JDK вместо JRE
- Методы String.format() и printf() в Java
- Синтаксис и новые функции в Java 8
- Регулярные выражения Java
- Руководство Java Multithreading Programming
- Библиотеки Java JDBC Driver для различных типов баз данных
- Руководство Java JDBC
- Получить значения столбцов, автоматически возрастающих при вставлении (Insert) записи, используя JDBC
- Руководство Java Stream
- Руководство Java Functional Interface
- Введение в Raspberry Pi
- Руководство Java Predicate
- Абстрактный класс и Interface в Java
- Модификатор доступа (Access modifiers) в Java
- Руководство Java Enum
- Руководство Java Annotation
- Сравнение и Сортировка в Java
- Руководство Java String, StringBuffer и StringBuilder
- Обработка исключений Java - Java Exception Handling
- Руководство Java Generics
- Манипулирование файлами и каталогами в Java
- Руководство Java BiPredicate
- Руководство Java Consumer
- Руководство Java BiConsumer
- Что мне нужно для начала работы с Java?
- История Java и разница между Oracle JDK и OpenJDK
- Установить Java в Windows
- Установите Java в Ubuntu
- Установите OpenJDK в Ubuntu
- Установить Eclipse
- Установите Eclipse в Ubuntu
- Быстрое изучение Java для начинающих
- История бит и байтов в информатике
- Типы данных в java
- Битовые операции
- Команда if else в Java
- команды switch в Java
- Циклы в Java
- Массивы (Array) в Java
- JDK Javadoc в формате CHM
- Наследование и полиморфизм в Java
- Руководство Java Function
- Руководство Java BiFunction
- Пример Java encoding и decoding с использованием Apache Base64
- Руководство Java Reflection
- Java Удаленный вызов методов - Java RMI
- Руководство Программирование Java Socket
- Какую платформу я должен выбрать для разработки приложений Java Desktop?
- Руководство Java Commons IO
- Руководство Java Commons Email
- Руководство Java Commons Logging
- Понимание Java System.identityHashCode, Object.hashCode и Object.equals
- Руководство Java SoftReference
- Руководство Java Supplier
- Аспектно-ориентированное программирование Java с помощью AspectJ (AOP)
Show More
- Руководства Java Servlet/JSP
- Руководства Java Collections Framework
- Java API для HTML, XML
- Руководства Java IO
- Руководства Java Date Time
- Руководства Spring Boot
- Руководства Maven
- Руководства Gradle
- Руководства Java Web Services
- Руководства Java SWT
- Руководства JavaFX
- Руководства Oracle Java ADF
- Руководства Struts2 Framework
- Руководства Spring Cloud