Apache Commons IO-빠른 가이드

Apache Commons IO 라이브러리는 광범위한 사용 사례를 포괄하는 파일 IO의 공통 작업을위한 다양한 유틸리티 클래스를 제공합니다. 상용구 코드 작성을 피하는 데 도움이됩니다.

Apache Commons IO 라이브러리는 다음 범주에 대한 클래스를 제공합니다.

유틸리티 클래스

아래에있는 이러한 클래스 org.apache.commons.io패키지, 파일 및 문자열 비교를 제공합니다. 다음은 몇 가지 예입니다.

  • IOUtils− 파일 읽기, 쓰기 및 복사를위한 유틸리티 방법을 제공합니다. 이 메서드는 InputStream, OutputStream, Reader 및 Writer와 함께 작동합니다.

  • FilenameUtils− File Object를 사용하지 않고 파일명으로 작업하는 방법을 제공합니다. 유사한 방식으로 다른 운영 체제에서 작동합니다.

  • FileUtils − 파일 이동, 열기, 존재 확인, 파일 읽기 등의 파일 조작 방법을 제공합니다. 이러한 방법은 File Object를 사용합니다.

  • 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 − 두 파일의 이름을 비교합니다.

  • SizeFileComparator − 두 파일의 크기를 비교합니다.

  • LastModifiedFileComparator − 두 파일의 마지막 수정 날짜를 비교합니다.

스트림 클래스

스트림에서 유용한 작업을 수행하기 위해 org.apache.commons.io.input 패키지 아래의 InputStream과 org.apache.commons.io.output 패키지 아래의 OutputStream 구현이 여러 개 있습니다. 다음은 몇 가지 예입니다.

  • NullOutputStream − 오류와 함께 전송 된 모든 데이터를 흡수합니다.

  • TeeOutputStream − 출력을 두 개의 스트림으로 보냅니다.

  • ByteArrayOutputStream − JDK 클래스의 더 빠른 버전.

  • CountingOutputStream − 스트림을 통과 한 바이트 수를 계산합니다.

  • ProxyOutputStream − 호출을 프록시 스트림으로 변경합니다.

  • LockableFileWriter − 잠금 파일을 생성하고 간단한 크로스 스레드 파일 잠금 처리를 허용하는 FileWriter.

이 장에서는 Apache Commons IO의 로컬 환경 설정과 Windows 2000 / XP, Windows 95 / 98 / ME 등을위한 Commons IO의 경로를 설정하는 방법에 대해 알아 봅니다. 또한 몇 가지 인기있는 자바 편집기 및 Commons IO 아카이브를 다운로드하는 방법.

지역 환경 설정

여전히 Java 프로그래밍 언어에 대한 환경을 설정하려는 경우이 섹션에서 시스템에 Java를 다운로드하고 설정하는 방법을 안내합니다. 환경을 설정하려면 아래 단계를 따르십시오.

Java SE는 링크에서 무료로 다운로드 할 수 있습니다. https://www.oracle.com따라서 운영 체제에 따라 버전을 다운로드합니다.

지침에 따라 Java를 다운로드하고 .exe컴퓨터에 Java를 설치합니다. 시스템에 Java를 설치 한 후에는 올바른 설치 디렉토리를 가리 키도록 환경 변수를 설정해야합니다.

Windows 2000 / XP의 경로

Windows 2000 / XP의 경로를 설정하는 방법을 이해하겠습니다. Java를 설치했다고 가정합니다.c:\Program Files\java\jdk 예배 규칙서.

  • '내 컴퓨터'를 마우스 오른쪽 버튼으로 클릭하고 '속성'을 선택합니다.

  • '고급'탭에서 '환경 변수'버튼을 클릭합니다.

  • 이제 '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 프로그램을 작성하려면 텍스트 편집기가 필요합니다. 시중에는 정교한 IDE가 많이 있습니다. 그러나 지금은 다음 중 하나를 고려할 수 있습니다.

  • Notepad − Windows 시스템에서는 메모장 (이 자습서에 권장 됨), TextPad와 같은 간단한 텍스트 편집기를 사용할 수 있습니다.

  • Netbeans − 오픈 소스이며 무료이며 다음에서 다운로드 할 수있는 Java IDE입니다. https://www.netbeans.org/index.html.

  • Eclipse − 또한 Eclipse 오픈 소스 커뮤니티에서 개발 한 Java IDE이며 다음에서 다운로드 할 수 있습니다. https://www.eclipse.org/.

공통 IO 아카이브 다운로드

commons-io-2.6- bin.zip에서 최신 버전의 Apache Common IO jar 파일을 다운로드합니다.이 파일은 download_io.cgi 에서 다운로드 할 수 있습니다. 이 자습서를 작성할 때 commons-io-2.6-bin.zip을 다운로드하여 복사했습니다. C : \> Apache 폴더에 넣습니다.

OS 아카이브 이름
윈도우 commons-io-2.6-bin.zip
리눅스 commons-io-2.6-bin.tar.gz
commons-io-2.6-bin.tar.gz

Apache 공통 IO 환경

설정 APACHE_HOMEApache jar가 시스템에 저장된 기본 디렉토리 위치를 가리키는 환경 변수. 다음과 같이 다양한 운영 체제의 Apache 폴더에서 commons-io-2.6-bin.zip을 추출했다고 가정합니다.

OS 산출
윈도우 환경 변수 APACHE_HOME을 C : \ Apache로 설정합니다.
리눅스 export APACHE_HOME = / usr / local / Apache
export APACHE_HOME = / Library / Apache

CLASSPATH 변수 설정

설정 CLASSPATH공통 IO jar 위치를 가리키는 환경 변수. 다음과 같이 다양한 운영 체제의 Apache 폴더에 commons-io-2.6-bin.zip을 저장했다고 가정합니다.

OS 산출
윈도우 환경 변수 CLASSPATH를 % CLASSPATH %; % APACHE_HOME % \ commons-io-2.6.jar;.;로 설정합니다.
리눅스 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 ()-모든 데이터를 다른 스트림으로 복사합니다.

  • contentEquals-두 스트림의 내용을 비교합니다.

IOUtils 클래스의 예

다음은 파싱해야하는 입력 파일입니다.

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.apache.commons.io.IOUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         //Using BufferedReader
         readUsingTraditionalWay();
         //Using IOUtils
         readUsingIOUtils();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   //reading a file using buffered reader line by line
   public static void readUsingTraditionalWay() throws IOException {
      try(BufferedReader bufferReader = new BufferedReader( new InputStreamReader(
      new FileInputStream("input.txt") ) )) {
         String line;
         while( ( line = bufferReader.readLine() ) != null ) {
            System.out.println( line );
         }
      }
   }
   //reading a file using IOUtils in one go
   public static void readUsingIOUtils() throws  IOException {
      try(InputStream in = new FileInputStream("input.txt")) {
         System.out.println( IOUtils.toString( in , "UTF-8") );
      }
   }
}

산출

다음 결과를 인쇄합니다-

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

FileUtils는 파일 이동, 열기, 존재 확인, 파일 읽기 등과 같은 파일을 조작하는 방법을 제공합니다. 이러한 방법은 File Object를 사용합니다.

클래스 선언

다음은 org.apache.commons.io.FileUtils 클래스에 대한 선언입니다-

public class FileUtils
   extends Object

FileUtils의 기능

FileUtils의 기능은 다음과 같습니다.

  • 파일에 쓰는 방법.

  • 파일에서 읽는 방법.

  • 부모 디렉터리를 포함하는 디렉터리를 만드는 방법.

  • 파일 및 디렉토리를 복사하는 방법.

  • 파일 및 디렉토리를 삭제하는 방법.

  • URL과의 변환 방법.

  • 필터 및 확장자별로 파일 및 디렉토리를 나열하는 방법.

  • 파일 내용을 비교하는 방법.

  • 마지막으로 변경된 날짜를 보관하는 방법.

  • 체크섬을 계산하는 방법.

FileUtils 클래스의 예

다음은 파싱해야하는 입력 파일입니다.

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import org.apache.commons.io.FileUtils;
public class IOTester {
   public static void main(String[] args) {
      try {
         //Using FileUtils
         usingFileUtils();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileUtils() throws IOException {
      //get the file object
      File file = FileUtils.getFile("input.txt");
      //get the temp directory
      File tmpDir = FileUtils.getTempDirectory();
      System.out.println(tmpDir.getName());
      //copy file to temp directory
      FileUtils.copyFileToDirectory(file, tmpDir);
      //create a new file
      File newTempFile = FileUtils.getFile(tmpDir, file.getName());
      //get the content
      String data = FileUtils.readFileToString(newTempFile, Charset.defaultCharset());
      //print the content
      System.out.println(data);
   }
}

산출

출력은 아래에 언급되어 있습니다.

Temp
Welcome to TutorialsPoint. Simply Easy Learning.

FilenameUtils는 File Object를 사용하지 않고 파일 이름으로 작업하는 방법을 제공합니다. 유사한 방식으로 다른 운영 체제에서 작동합니다. 이 클래스는 Windows 기반 개발 시스템에서 Unix 기반 프로덕션 시스템으로 이동할 때 문제를 해결합니다.

클래스 선언

다음은에 대한 선언입니다. org.apache.commons.io.FilenameUtils 클래스-

public class FilenameUtils
   extends Object

FileNameUtils의 기능

이 클래스는 파일 이름 내에 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 Enum에 대한 선언입니다-

public enum IOCase
   extends Enum<IOCase> implements Serializable

IOCase 열거 형의 예

IOCase Enum의 예는 다음과 같습니다.

IOTester.java

import java.io.IOException;
import org.apache.commons.io.IOCase;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingIOCase();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingIOCase() throws IOException {
      String text = "Welcome to TutorialsPoint. Simply Easy Learning.";
      String text1 = "WELCOME TO TUTORIALSPOINT. SIMPLY EASY LEARNING.";
      System.out.println("Ends with Learning (case sensitive): " + IOCase.SENSITIVE.checkEndsWith(text1, "Learning."));
      System.out.println("Ends with Learning (case insensitive): " + IOCase.INSENSITIVE.checkEndsWith(text1, "Learning."));
      System.out.println("Equality Check (case sensitive): " + IOCase.SENSITIVE.checkEquals(text, text1));
      System.out.println("Equality Check (case insensitive): " + IOCase.INSENSITIVE.checkEquals(text, text1));
   }
}

산출

다음 결과를 인쇄합니다-

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

LineIterator는 라인 기반 파일로 작업하는 유연한 방법을 제공합니다. 이 장에서 이에 대해 배워 보자.

클래스 선언

다음은에 대한 선언입니다. org.apache.commons.io.LineIterator 클래스-

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

LineIterator 클래스의 예

다음은 파싱해야하는 입력 파일입니다.

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

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingLineIterator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingLineIterator() throws IOException {
      //get the file object
      File file = FileUtils.getFile("input.txt");
      try(LineIterator lineIterator = FileUtils.lineIterator(file)) {
         System.out.println("Contents of input.txt");
         while(lineIterator.hasNext()) {
            System.out.println(lineIterator.next());
         }
      }
   }
}

산출

다음 결과를 인쇄합니다-

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

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.

현재 디렉토리의 모든 파일과 디렉토리를 인쇄 한 다음 입력으로 시작하는 이름으로 파일을 필터링 해 보겠습니다.

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 ()-파일 이름.

  • exist ()-파일이 있는지 여부를 확인합니다.

  • isDirectory ()-파일이 디렉토리인지 확인합니다.

  • lastModified ()-마지막으로 수정 된 날짜 시간을 제공합니다.

  • listFiles ()-디렉토리의 내용을 제공합니다.

FileEntry 클래스의 예

다음은 파싱해야하는 입력 파일입니다.

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.monitor.FileEntry;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingFileEntry();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileEntry() throws IOException {
      //get the file object
      File file = FileUtils.getFile("input.txt");
      FileEntry fileEntry = new FileEntry(file);
      System.out.println("Monitored File: " + fileEntry.getFile());
      System.out.println("File name: " + fileEntry.getName());
      System.out.println("Is Directory: " + 	fileEntry.isDirectory());
   }
}

산출

다음 결과를 인쇄합니다.

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

FileAlterationObserver는 루트 디렉터리 아래의 파일 상태를 나타내며 파일 시스템을 확인하고 리스너에게 생성, 변경 또는 삭제 이벤트를 알립니다.

클래스 선언

다음은에 대한 선언입니다.

org.apache.commons.io.monitor.FileAlterationObserver 클래스-

public class FileAlterationObserver
   extends Object implements Serializable

FileAlterationObserver 클래스의 예

다음은 파싱해야하는 입력 파일입니다.

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileDeleteStrategy;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingFileAlterationObserver();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileAlterationObserver() throws IOException {
      //get the file object
      File inputFile = FileUtils.getFile("input.txt");
      String absolutePath = inputFile.getAbsolutePath();
      String parent = absolutePath.substring(0,absolutePath.indexOf("input.txt"));
      File parentDirectory = FileUtils.getFile(parent);
      FileAlterationObserver observer = new
      FileAlterationObserver(parentDirectory);
      observer.addListener(new FileAlterationListenerAdaptor() {
         @Override
         public void onDirectoryCreate(File file) {
            System.out.println("Folder created: " + file.getName());
         }
         @Override
            public void onDirectoryDelete(File file) {
               System.out.println("Folder deleted: " + file.getName());
            }
         @Override
            public void onFileCreate(File file) {
               System.out.println("File created: " + file.getName());
            }
         @Override
            public void onFileDelete(File file) {
               Syst em.out.println("File deleted: " + file.getName());
            }
        });
       //create a monitor to check changes after every 500 ms
       FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
       try {
          monitor.start();
         //create a new directory
         File newFolder = new File("test");
         File newFile = new File("test1");
         newFolder.mkdirs();
         Thread.sleep(1000);
         newFile.createNewFile();
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFolder);
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFile);
         Thread.sleep(1000);
         monitor.stop(10000);
      } catch(IOException e) {
         System.out.println(e.getMessage());
      } catch(InterruptedException e) {
         System.out.println(e.getMessage());
      } catch (Exception e) {
         System.out.println(e.getMessage());
      }
   }
}

산출

다음 결과를 인쇄합니다.

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

FileAlterationMonitor는 등록 된 FileAlterationObserver를 지정된 간격으로 트리거하는 모니터링 스레드를 생성하는 스레드를 나타냅니다.

클래스 선언

다음은 org.apache.commons.io.monitor.FileAlterationMonitor 클래스에 대한 선언입니다-

public final class FileAlterationMonitor
   extends Object implements Runnable

FileAlterationMonitor 클래스의 예

다음은 파싱해야하는 입력 파일입니다.

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileDeleteStrategy;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingFileAlterationMonitor();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingFileAlterationMonitor() throws IOException {
      //get the file object
      File inputFile = FileUtils.getFile("input.txt");
      String absolutePath = inputFile.getAbsolutePath();
      String parent = absolutePath.substring(0,absolutePath.indexOf("input.txt"));
      File parentDirectory = FileUtils.getFile(parent);
      FileAlterationObserver observer = new
      FileAlterationObserver(parentDirectory);
      observer.addListener(new FileAlterationListenerAdaptor(){
         @Override
         public void onDirectoryCreate(File file) {
            System.out.println("Folder created: " + file.getName());
         }
         @Override
         public void onDirectoryDelete(File file) {
            System.out.println("Folder deleted: " + file.getName());
         }
         @Override
         public void onFileCreate(File file) {
            System.out.println("File created: " + file.getName());
         }
         @Override
         public void onFileDelete(File file) {
            System.out.println("File deleted: " + file.getName());
         }
      });
      //create a monitor to check changes after every 500 ms
      FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
      try {
         monitor.start();
         //create a new directory
         File newFolder = new File("test");
         File newFile = new File("test1");
         newFolder.mkdirs();
         Thread.sleep(1000);
         newFile.createNewFile();
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFolder);
         Thread.sleep(1000);
         FileDeleteStrategy.NORMAL.delete(newFile);
         Thread.sleep(1000);
         monitor.stop(10000);
      } catch(IOException e) {
         System.out.println(e.getMessage());
      } catch(InterruptedException e) {
         System.out.println(e.getMessage());
      } catch (Exception e) {
         System.out.println(e.getMessage());
      }
   }
}

산출

다음 결과를 인쇄합니다.

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

NameFileComparator는 두 파일의 이름을 비교합니다. 대소 문자를 구분하거나, 대소 문자를 구분하지 않거나, 시스템에 따라 대소 문자를 구분하는 방식으로 이름을 사용하여 목록 또는 파일 배열을 정렬하는 데 사용할 수 있습니다.

클래스 선언

다음은에 대한 선언입니다.

org.apache.commons.io.comparator.NameFileComparator 클래스-

public class NameFileComparator
   extends Object implements Serializable

NameFileComparator 클래스의 예

다음은 파싱해야하는 입력 파일입니다.

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import org.apache.commons.io.IOCase;
import org.apache.commons.io.comparator.NameFileComparator;
import org.apache.commons.io.filefilter.FileFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingNameFileComparator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingNameFileComparator() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      NameFileComparator comparator = new
      NameFileComparator(IOCase.INSENSITIVE);
      File[] sortedFiles = comparator.sort(currentDirectory.listFiles((FileFilter)FileFileFilter.FILE));
      System.out.println("Sorted By Name: ");
      for(File file:sortedFiles) {
         System.out.println(file.getName());
      }
   }
}

산출

다음 결과를 인쇄합니다.

Sorted By Name:
.classpath
.project
input.txt

SizeFileComparator는 두 파일 / 디렉토리의 크기를 비교합니다. 자식 수에 따라 크기 또는 디렉토리를 사용하여 파일 목록 또는 배열을 정렬하는 데 사용할 수 있습니다.

클래스 선언

다음은에 대한 선언입니다.

org.apache.commons.io.comparator.SizeFileComparator 클래스-

public class SizeFileComparator
   extends Object implements Serializable

SizeFileComparator 클래스의 예

다음은 파싱해야하는 입력 파일입니다.

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import org.apache.commons.io.comparator.SizeFileComparator;
import org.apache.commons.io.filefilter.FileFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingSizeFileComparator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   } 
   public static void usingSizeFileComparator() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      SizeFileComparator comparator = new SizeFileComparator();
      File[] sortedFiles = comparator.sort(currentDirectory.listFiles((FileFilter)FileFileFilter.FILE));
      System.out.println("Sorted By Size: ");
      for(File file:sortedFiles) {
         System.out.println(file.getName() + ", size(kb) :" + file.length());
      }
   }
}

산출

다음 결과를 인쇄합니다.

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

LastModifiedFileComparator는 두 파일 / 디렉토리의 마지막 수정 날짜를 비교합니다. 마지막 수정 날짜를 사용하여 파일 / 디렉토리의 목록 또는 배열을 정렬하는 데 사용할 수 있습니다.

클래스 선언

다음은에 대한 선언입니다. org.apache.commons.io.comparator.LastModifiedFileComparator 클래스-

public class LastModifiedFileComparator
   extends Object implements Serializable

LastModifiedFileComparator 클래스의 예

다음은 파싱해야하는 입력 파일입니다.

Welcome to TutorialsPoint. Simply Easy Learning.

IOTester.java

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Date;
import org.apache.commons.io.comparator.LastModifiedFileComparator;
import org.apache.commons.io.filefilter.FileFileFilter;
public class IOTester {
   public static void main(String[] args) {
      try {
         usingLastModifiedFileComparator();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingLastModifiedFileComparator() throws IOException {
      //get the current directory
      File currentDirectory = new File(".");
      LastModifiedFileComparator comparator = new LastModifiedFileComparator();
      File[] sortedFiles = comparator.sort(currentDirectory.listFiles((FileFilter)FileFileFilter.FILE));
      System.out.println("Sorted By Last Modified date: ");
      for(File file:sortedFiles) {
         System.out.println(file.getName() + ", Modified on: " + new Date(file.lastModified()));
      }
   }
}

산출

다음 결과를 인쇄합니다.

Sorted By Last Modified date:
.project, Modified on: Thu Oct 12 19:06:45 IST 2017
.classpath, Modified on: Mon Nov 20 13:09:55 IST 2017
input.txt, Modified on: Mon Nov 20 19:27:55 IST 2017

프록시 스트림에서 읽은 모든 바이트의 복사본을 지정된 OutputStream에 투명하게 쓰는 InputStream 프록시입니다. 이 프록시의 close () 메서드가 호출되면 프록시 입력 스트림이 닫힙니다. 한 번에 두 개의 스트림을 일괄 적으로 운영하는 데 사용할 수 있습니다.

클래스 선언

다음은에 대한 선언입니다. org.apache.commons.io.input.TeeInputStream 클래스-

public class TeeInputStream
   extends ProxyInputStream

TeeInputStream 클래스의 예

이 예제에서 TeeInputStream을 닫으면 TeeInputStream과 TeeOutputStream 오브젝트가 닫힙니다.

IOTester.java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.commons.io.input.TeeInputStream;
import org.apache.commons.io.output.TeeOutputStream;
public class IOTester {
   private static final String SAMPLE = "Welcome to TutorialsPoint. Simply Easy
   Learning.";
   public static void main(String[] args) {
      try {
         usingTeeInputStream();
      }catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingTeeInputStream() throws IOException {
      TeeInputStream teeInputStream = null;
      TeeOutputStream teeOutputStream = null;
      try {
         ByteArrayInputStream inputStream = new
         ByteArrayInputStream(SAMPLE.getBytes("US-ASCII"));
         ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
         ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream();
         teeOutputStream = new TeeOutputStream(outputStream1, outputStream2);
         teeInputStream = new TeeInputStream(inputStream, teeOutputStream, true);
         teeInputStream.read(new byte[SAMPLE.length()]);
         System.out.println("Output stream 1: " + outputStream1.toString());
         System.out.println("Output stream 2: " + outputStream2.toString());
      }catch (IOException e) {
         System.out.println(e.getMessage());
      } finally {
         //teeIn.close() closes teeIn and teeOut which in turn closes the out1 and out2.
         try {
            teeInputStream.close();
         } catch (IOException e) {
            System.out.println(e.getMessage());
         }
      }
   }
}

산출

다음 결과를 인쇄합니다.

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

TeeOutputStream은 OutputStream을 분할합니다. 유닉스 'tee'명령의 이름을 따서 명명되었습니다. 스트림을 두 개의 스트림으로 분기 할 수 있습니다.

클래스 선언

다음은에 대한 선언입니다. org.apache.commons.io.output.TeeOutputStream 클래스-

public class TeeOutputStream
   extends ProxyOutputStream

TeeOutputStream 클래스의 예

이 예에서 TeeOutputStream은 두 개의 출력 스트림을 매개 변수로 받아들이고 데이터를 TeeOutputStream 세트 데이터로 두 출력 스트림으로 전달합니다.

IOTester.java

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.apache.commons.io.input.TeeInputStream;
import org.apache.commons.io.output.TeeOutputStream;
public class IOTester {
   private static final String SAMPLE = "Welcome to TutorialsPoint. Simply Easy
   Learning.";
   public static void main(String[] args) {
      try {
         usingTeeInputStream();
      } catch(IOException e) {
         System.out.println(e.getMessage());
      }
   }
   public static void usingTeeInputStream() throws IOException {
      TeeInputStream teeInputStream = null;
      TeeOutputStream teeOutputStream = null;
      try {
         ByteArrayInputStream inputStream = new
         ByteArrayInputStream(SAMPLE.getBytes("US-ASCII"));
         ByteArrayOutputStream outputStream1 = new ByteArrayOutputStream();
         ByteArrayOutputStream outputStream2 = new ByteArrayOutputStream();
         teeOutputStream = new TeeOutputStream(outputStream1, outputStream2);
         teeInputStream = new TeeInputStream(inputStream, teeOutputStream, true);
         teeInputStream.read(new byte[SAMPLE.length()]);
         System.out.println("Output stream 1: " + outputStream1.toString());
         System.out.println("Output stream 2: " + outputStream2.toString());
      } catch (IOException e) {
         System.out.println(e.getMessage());
      } finally {
         //teeIn.close() closes teeIn and teeOut which in turn closes the out1 and out2.
         try {
            teeInputStream.close();
         } catch (IOException e) {
            System.out.println(e.getMessage());
         }
      }
   }
}

산출

다음 결과를 인쇄합니다.

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