Commons-io-quick-guide

提供:Dev Guides
移動先:案内検索

Apache Commons IO-概要

Apache Commons IOライブラリは、幅広いユースケースをカバーするFile 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 -ファイルフィルターのリスト全体に条件付きAndロジックを提供します。 リスト内のフィルターが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 -ストリームを通過したバイト数をカウントします。
  • CountingOutputStream -ストリームを通過したバイト数をカウントします。
  • ProxyOutputStream -プロキシストリームへの呼び出しを変更します。
  • LockableFileWriter -ロックファイルを作成し、単純なクロススレッドファイルロック処理を可能にするFileWriter。

Apache Commons IO-環境のセットアップ

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

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

Java SEは、https://java.sun.com/javase/downloads/index_jdk5.jsp [Javaのダウンロード]リンクから無料で入手できます。 そのため、オペレーティングシステムに基づいてバージョンをダウンロードします。

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

Windows 2000/XPのパスのセットアップ

_c:\ Program Files \ java \ jdk_ディレクトリにJavaがインストールされていると想定しています-

  • 「マイコンピュータ」を右クリックして、「プロパティ」を選択します。
  • 「詳細」タブの下の「環境変数」ボタンをクリックします。
  • ここで、「Path」変数を変更して、Java実行可能ファイルへのパスも含まれるようにします。 たとえば、パスが現在「C:\ WINDOWS \ SYSTEM32」に設定されている場合、パスを「C:\ WINDOWS \ SYSTEM32; c:\ Program Files \ java \ jdk \ bin」に変更します。

Windows 95/98/MEのパスのセットアップ

_c:\ Program Files \ java \ jdk_ディレクトリにJavaがインストールされていると想定しています-

  • 「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があります。 しかし、今のところ、次のいずれかを検討することができます-

Common IO Archiveをダウンロード

commons-io-2.6-bin.zipからApache Common IO jarファイルの最新バージョンをダウンロードします。 このチュートリアルを書いている時点で、_commons-io-2.6-bin.zip_をダウンロードし、C:\> Apacheフォルダーにコピーしました。

OS Archive name
Windows commons-io-2.6-bin.zip
Linux commons-io-2.6-bin.tar.gz
Mac commons-io-2.6-bin.tar.gz

Apache共通IO環境を設定する

*APACHE_HOME* 環境変数を設定して、マシン上のApache jarが保存されているベースディレクトリの場所を指すようにします。 次のように、さまざまなオペレーティングシステムのApacheフォルダーにcommons-io-2.6-bin.zipを抽出したと仮定します。
OS Output
Windows Set the environment variable APACHE_HOME to C:\Apache
Linux export APACHE_HOME=/usr/local/Apache
Mac export APACHE_HOME=/Library/Apache

CLASSPATH変数を設定する

共通IO jarの場所を指すように CLASSPATH 環境変数を設定します。 次のように、さまざまなオペレーティングシステムのApacheフォルダーにcommons-io-2.6-bin.zipを保存しているとします。

OS Output
Windows Set the environment variable CLASSPATH to %CLASSPATH%;%APACHE_HOME%\commons-io-2.6.jar;.;
Linux export CLASSPATH=$CLASSPATH:$APACHE_HOME/commons-io-2.6.jar:.
Mac export CLASSPATH=$CLASSPATH:$APACHE_HOME/commons-io-2.6.jar:.

Apache Commons IO-IOUtils

ファイルの読み取り、書き込み、コピーのためのユーティリティメソッドを提供します。 このメソッドは、InputStream、OutputStream、Reader、Writerで機能します。

クラス宣言

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

public class IOUtils
   extends Object

特徴

  • 入出力操作用の静的ユーティリティメソッドを提供します。
  • toXXX()-ストリームからデータを読み取ります。
  • write()-データをストリームに書き込みます。
  • copy()-すべてのデータをストリームから別のストリームにコピーします。
  • contentEquals-2つのストリームの内容を比較します。

IOUtilsクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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 finddevguides. Simply Easy Learning.
Welcome to finddevguides. Simply Easy Learning.

Apache Commons IO-FileUtils

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

クラス宣言

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

public class FileUtils
   extends Object

特徴

  • ファイルに書き込むメソッド。
  • ファイルから読み取るメソッド。
  • 親ディレクトリを含むディレクトリを作成するメソッド。
  • ファイルとディレクトリをコピーする方法。
  • ファイルとディレクトリを削除する方法。
  • URLとの間で変換するメソッド。
  • フィルターと拡張子によってファイルとディレクトリをリストするメソッド。
  • ファイルの内容を比較する方法。
  • 最終変更日を記録する方法。
  • チェックサムを計算する方法。

FileUtilsクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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 finddevguides. Simply Easy Learning.

Apache Commons IO-FilenameUtils

ファイルオブジェクトを使用せずにファイル名を操作する方法を提供します。 同様の方法で異なるオペレーティングシステムで動作します。 このクラスは、Windowsベースの開発マシンからUnixベースの生産マシンに移行する際の問題を解決します。

クラス宣言

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

public class FilenameUtils
   extends Object

特徴

このクラスは、ファイル名内の6つのコンポーネントを定義します。 例の場所を C:\ dev \ project \ file.txt として考えてください。 その後、コンポーネントは-

  • プレフィックス-C:\
  • 相対パス-dev \ project \
  • 絶対パス-C:\ dev \ project \
  • 名前-file.txt
  • ベース名-ファイル
  • 拡張子-txt

ディレクトリを識別するには、ファイル名に区切り文字を追加します。

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

Apache Commons IO-FileSystemUtils

ディスクドライブの空き領域を取得する方法を提供します。

クラス宣言

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

public class FileSystemUtils
   extends Object

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

Apache Commons IO-IOCase

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

列挙宣言

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

public enum IOCase
   extends Enum<IOCase> implements Serializable

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 finddevguides. Simply Easy Learning.";
      String text1 = "WELCOME TO finddevguides. 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

Apache Commons IO-LineIterator

行ベースのファイルを操作するための柔軟な方法を提供します。

クラス宣言

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

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

LineIteratorクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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 finddevguides. Simply Easy Learning.
Learn web technologies,
prepare exams,
code online,
all at one place.

Apache Commons IO-NameFileFilter

名前のファイル名をフィルタリングします。

クラス宣言

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

public class NameFileFilter
   extends AbstractFileFilter implements Serializable

NameFileFilterクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

Apache Commons IO-WildcardFileFilter

指定されたワイルドカードを使用してファイルをフィルタリングします。

クラス宣言

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

public class WildcardFileFilter
   extends AbstractFileFilter implements Serializable

WildcardFileFilterクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

Apache Commons IO-SuffixFileFilter

サフィックスに基づいてファイルをフィルタリングします。 これは、特定のタイプのすべてのファイルを取得する際に使用されます。

クラス宣言

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

public class SuffixFileFilter
   extends AbstractFileFilter implements Serializable

SuffixFileFilterクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

Apache Commons IO-PrefixFileFilter

プレフィックスに基づいてファイルをフィルタリングします。

クラス宣言

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

public class PrefixFileFilter
   extends AbstractFileFilter implements Serializable

PrefixFileFilterクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

Apache Commons IO-OrFileFilter

ファイルフィルタのリスト全体に条件付きORロジックを提供します。 リスト内のいずれかのフィルターがtrueを返す場合、trueを返します。 そうでなければ、falseを返します。

クラス宣言

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

public class OrFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

OrFileFilterクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

Apache Commons IO-AndFileFilter

ファイルフィルターのリスト全体に条件付きANDロジックを提供します。 リスト内のすべてのフィルターがtrueを返す場合、trueを返します。 そうでなければ、falseを返します。

クラス宣言

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

public class AndFileFilter
   extends AbstractFileFilter implements ConditionalFileFilter, Serializable

AndFileFilterクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

Apache Commons IO-FileEntry

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

クラス宣言

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

public class FileEntry
   extends Object implements Serializable

特徴

FileEntryクラスオブジェクトは、ある時点で次のファイル属性を提供します。

  • getName()-ファイル名。
  • exists()-ファイルが存在するかどうかを確認します。
  • isDirectory()-ファイルがディレクトリかどうかを確認します。
  • lastModified()-最終変更日時を提供します。
  • listFiles()-ディレクトリのコンテンツを提供します。

FileEntryクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

コモンズIO-FileAlterationObserver

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

クラス宣言

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

public class FileAlterationObserver
   extends Object implements Serializable

FileAlterationObserverクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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) {
            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

Apache Commons IO-FileAlterationMonitor

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

クラス宣言

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

public final class FileAlterationMonitor
   extends Object implements Runnable

FileAlterationMonitorクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

Apache Commons IO-NameFileComparator

2つのファイルの名前を比較します。 NameFileComparatorを使用して、大文字と小文字を区別する、大文字と小文字を区別しない、またはシステムに依存する大文字と小文字を区別する方法で、名前を使用してファイルのリストまたは配列をソートできます。

クラス宣言

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

public class NameFileComparator
   extends Object implements Serializable

NameFileComparatorクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

Apache Commons IO-SizeFileComparator

2つのファイル/ディレクトリのサイズを比較します。 SizeFileComparatorを使用して、サイズに基づいてファイルのリストまたは配列をソートしたり、noに基づいてディレクトリを使用したりできます。 子どもたちの。

クラス宣言

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

public class SizeFileComparator
   extends Object implements Serializable

SizeFileComparatorクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

コモンズIO-LastModifiedFileComparator

2つのファイル/ディレクトリの最終変更日を比較します。 LastModifiedFileComparatorは、最終変更日を使用してファイル/ディレクトリのリストまたは配列をソートするために使用できます。

クラス宣言

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

public class LastModifiedFileComparator
   extends Object implements Serializable

LastModifiedFileComparatorクラスの例

ここに解析する必要がある入力ファイルがあります-

Welcome to finddevguides. 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

Apache Commons IO-TeeInputStream

これは、プロキシ化されたストリームから読み取られたすべてのバイトのコピーを指定された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 finddevguides. 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 finddevguides. Simply Easy Learning.
Output stream 2: Welcome to finddevguides. Simply Easy Learning.

Apache Commons IO-TeeOutputStream

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 finddevguides. 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 finddevguides. Simply Easy Learning.
Output stream 2: Welcome to finddevguides. Simply Easy Learning.