Apache CommonsIO-クイックガイド

Apache Commons IOライブラリは、幅広いユースケースをカバーするファイルIOの一般的な操作のためのさまざまなユーティリティクラスを提供します。ボイラープレートコードの記述を回避するのに役立ちます。

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−ファイルフィルターのリスト全体に条件付きORロジックを提供します。リスト内のいずれかのフィルターがtrueを返す場合、trueを返します。それ以外の場合は、falseを返します。

  • AndFileFilter−ファイルフィルターのリスト全体に条件付きロジックを提供します。リスト内のいずれかのフィルターがfalseを返す場合、falseを返します。それ以外の場合は、trueを返します。

ファイルモニタークラス

下にあるファイルモニタークラス org.apache.commons.io.monitorパッケージは、特定のファイルまたはフォルダーの変更を追跡するための制御を提供し、変更に応じてアクションを実行できるようにします。以下はいくつかの例です。

  • FileEntry−ファイルまたはディレクトリの状態を提供します。ある時点でのファイル属性。

  • FileAlterationObserver −ルートディレクトリの下のファイルの状態を表し、ファイルシステムをチェックして、作成、変更、または削除イベントをリスナーに通知します。

  • FileAlterationMonitor −指定された間隔で登録済みのFileAlterationObserverをトリガーする監視スレッドを生成するスレッドを表します。

コンパレータクラス

下のファイルモニタークラス org.apache.commons.io.comparator パッケージを使用すると、ファイルやディレクトリを簡単に比較および並べ替えることができます。

  • NameFileComparator −2つのファイルの名前を比較します。

  • SizeFileComparator −2つのファイルのサイズを比較します。

  • LastModifiedFileComparator −2つのファイルの最終変更日を比較します。

ストリームクラス

ストリームで有用なタスクを実行するために、org.apache.commons.io.inputパッケージの下にInputStreamが、org.apache.commons.io.outputパッケージの下にOutputStreamが複数実装されています。以下はいくつかの例です。

  • NullOutputStream −エラーで送信されたすべてのデータを吸収します。

  • TeeOutputStream −出力を2つのストリームに送信します。

  • ByteArrayOutputStream −JDKクラスのより高速なバージョン。

  • CountingOutputStream −ストリームを通過したバイト数をカウントします。

  • ProxyOutputStream −プロキシストリームへの呼び出しを変更します。

  • LockableFileWriter −ロックファイルを作成し、単純なクロススレッドファイルロック処理を可能にするFileWriter。

この章では、Apache Commons IOのローカル環境のセットアップと、Windows 2000 / XP、Windows 95/98 / MEなどのCommonsIOのパスをセットアップする方法について学習します。また、いくつかの一般的なJavaエディターとCommonsIOアーカイブをダウンロードする方法。

ローカル環境のセットアップ

それでもJavaプログラミング言語用の環境をセットアップする場合は、このセクションで、マシンにJavaをダウンロードしてセットアップする方法について説明します。以下の手順で環境を設定してください。

Java SEは、リンクから無料でダウンロードできます。 https://www.oracle.comしたがって、オペレーティングシステムに基づいたバージョンをダウンロードします。

指示に従ってJavaをダウンロードし、 .exeマシンにJavaをインストールします。マシンにJavaをインストールしたら、正しいインストールディレクトリを指すように環境変数を設定する必要があります。

Windows 2000 / XPのパス

Windows 2000 / XPのパスを設定する方法を理解しましょう。Javaをにインストールしていることを前提としていますc:\Program Files\java\jdk ディレクトリ。

  • 「マイコンピュータ」を右クリックし、「プロパティ」を選択します。

  • [詳細設定]タブの下にある[環境変数]ボタンをクリックします。

  • ここで、「Path」変数を変更して、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 −これはEclipseオープンソースコミュニティによって開発されたJava IDEでもあり、からダウンロードできます。 https://www.eclipse.org/.

CommonIOアーカイブをダウンロードする

download_io.cgiで入手可能なcommons-io-2.6-bin.zipからApacheCommon IOjarファイルの最新バージョンをダウンロードします。このチュートリアルの執筆時点で、commons-io-2.6-bin.zipをダウンロードしてコピーしました。 C:\> Apacheフォルダーに入れます。

OS アーカイブ名
ウィンドウズ commons-io-2.6-bin.zip
Linux commons-io-2.6-bin.tar.gz
マック commons-io-2.6-bin.tar.gz

Apache CommonIO環境

をセットする APACHE_HOMEApachejarがマシンに保存されているベースディレクトリの場所を指す環境変数。次のように、さまざまなオペレーティングシステムのApacheフォルダーにcommons-io-2.6-bin.zipを抽出したと仮定します。

OS 出力
ウィンドウズ 環境変数APACHE_HOMEをC:\ Apacheに設定します
Linux エクスポートAPACHE_HOME = / usr / local / Apache
マック APACHE_HOME = / Library / Apacheをエクスポートします

CLASSPATH変数を設定する

をセットする CLASSPATHCommon IOjarの場所を指す環境変数。次のように、commons-io-2.6-bin.zipをさまざまなオペレーティングシステムのApacheフォルダーに保存したと仮定します。

OS 出力
ウィンドウズ 環境変数CLASSPATHを%CLASSPATH%;%APACHE_HOME%\ commons-io-2.6.jar;。;に設定します。
Linux export CLASSPATH = $ CLASSPATH:$ APACHE_HOME /commons-io-2.6.jar:。
マック export 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()-すべてのデータを1つのストリームから別のストリームにコピーします。

  • contentEquals-2つのストリームのコンテンツを比較します。

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は、移動、開く、存在の確認、ファイルの読み取りなどのファイルを操作するメソッドを提供します。これらのメソッドはファイルオブジェクトを使用します。

クラス宣言

以下は、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は、ファイルオブジェクトを使用せずにファイル名を操作するためのメソッドを提供します。さまざまなオペレーティングシステムで同様に機能します。このクラスは、Windowsベースの開発マシンからUnixベースの本番マシンに移行する際の問題を解決します。

クラス宣言

以下はの宣言です org.apache.commons.io.FilenameUtils クラス-

public class FilenameUtils
   extends Object

FileNameUtilsの機能

このクラスは、ファイル名内に6つのコンポーネントを定義します。場所の例を次のように考えます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

IOの大文字と小文字の区別の列挙。オペレーティングシステムが異なれば、ファイル名の大文字と小文字を区別するためのルールも異なります。たとえば、Windowsではファイルの命名で大文字と小文字が区別されませんが、Unixでは大文字と小文字が区別されます。IOCaseはその違いをキャプチャし、ファイル名の比較を実行する方法を制御するための列挙型を提供します。また、列挙型を使用して比較を実行する方法も提供します。

列挙型宣言

以下は、org.apache.commons.io.IOCase列挙型の宣言です。

public enum IOCase
   extends Enum<IOCase> implements Serializable

IOCase列挙型の例

IOCase列挙型の例を以下に示します-

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.

Commons IOのNameFileFilterは、名前のファイル名をフィルタリングします。

クラス宣言

以下はの宣言です 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

Commons IOのWildcardFileFilterは、提供されたワイルドカードを使用してファイルをフィルタリングします。

クラス宣言

以下はの宣言です 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.

現在のディレクトリ内のすべてのファイルとディレクトリを出力してから、inputで始まる名前のファイルをフィルタリングしてみましょう。

IOTester.java

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

出力

次の結果が出力されます-

All files and Folders.

.classpath
.project
.settings
bin
input.txt
src

File with extenstion txt

input.txt

OrFileFilterは、ファイルフィルターのリスト全体に条件付きORロジックを提供します。リスト内のいずれかのフィルターがtrueを返す場合、trueを返します。それ以外の場合は、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は、ファイルフィルターのリスト全体に条件付きロジックを提供します。リスト内のすべてのフィルターがtrueを返す場合、trueを返します。それ以外の場合は、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は、2つのファイルの名前を比較します。大文字と小文字を区別する、大文字と小文字を区別しない、またはシステムに依存する大文字と小文字を区別する方法で、名前を使用してファイルのリストまたは配列を並べ替えるために使用できます。

クラス宣言

以下はの宣言です

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は、2つのファイル/ディレクトリのサイズを比較します。子の数に基づいて、サイズまたはディレクトリを使用してファイルのリストまたは配列を並べ替えるために使用できます。

クラス宣言

以下はの宣言です

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は、2つのファイル/ディレクトリの最終変更日を比較します。最終変更日を使用して、ファイル/ディレクトリのリストまたは配列を並べ替えるために使用できます。

クラス宣言

以下はの宣言です 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

これは、プロキシストリームから読み取られたすべてのバイトのコピーを特定のOutputStreamに透過的に書き込むInputStreamプロキシです。このプロキシのclose()メソッドが呼び出されると、プロキシ入力ストリームは閉じられます。一度に2つのストリームをまとめて操作するために使用できます。

クラス宣言

以下はの宣言です 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」コマンドにちなんで名付けられています。これにより、ストリームを2つのストリームに分岐させることができます。

クラス宣言

以下はの宣言です org.apache.commons.io.output.TeeOutputStream クラス-

public class TeeOutputStream
   extends ProxyOutputStream

TeeOutputStreamクラスの例

この例では、TeeOutputStreamは2つの出力ストリームをパラメーターとして受け入れ、データを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.