산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

Java - 파일 및 I/O

java.io 패키지에는 Java에서 입출력(I/O)을 수행하는 데 필요한 거의 모든 클래스가 포함되어 있습니다. 이러한 모든 스트림은 입력 소스와 출력 대상을 나타냅니다. java.io 패키지의 스트림은 프리미티브, 객체, 현지화된 문자 등과 같은 많은 데이터를 지원합니다.

스트림

스트림은 데이터 시퀀스로 정의할 수 있습니다. 스트림에는 두 가지 종류가 있습니다 -

Java는 파일 및 네트워크와 관련된 I/O에 대해 강력하지만 유연한 지원을 제공하지만 이 자습서에서는 스트림 및 I/O와 관련된 매우 기본적인 기능을 다룹니다. 가장 일반적으로 사용되는 예를 하나씩 살펴보겠습니다 −

바이트 스트림

Java 바이트 스트림은 8비트 바이트의 입력 및 출력을 수행하는 데 사용됩니다. 바이트 스트림과 관련된 많은 클래스가 있지만 가장 자주 사용되는 클래스는 FileInputStreamFileOutputStream . 다음은 이 두 클래스를 사용하여 입력 파일을 출력 파일로 복사하는 예입니다 -

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {  
      FileInputStream in = null;
      FileOutputStream out = null;

      try {
         in = new FileInputStream("input.txt");
         out = new FileOutputStream("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

이제 input.txt 파일을 만들어 보겠습니다. 다음 내용으로 -

This is test for copy file.

다음 단계로 위의 프로그램을 컴파일하고 실행하면 input.txt와 동일한 내용으로 output.txt 파일이 생성됩니다. 따라서 위의 코드를 CopyFile.java 파일에 넣고 다음을 수행합니다. -

$javac CopyFile.java
$java CopyFile

캐릭터 스트림

자바 바이트 스트림은 8비트 바이트의 입력 및 출력을 수행하는 데 사용되는 반면 Java Character 스트림은 16비트 유니코드에 대한 입력 및 출력을 수행하는 데 사용됩니다. 문자 스트림과 관련된 많은 클래스가 있지만 가장 자주 사용되는 클래스는 FileReader입니다. 및 FileWriter . 내부적으로 FileReader는 FileInputStream을 사용하고 FileWriter는 FileOutputStream을 사용하지만 여기서 주요 차이점은 FileReader는 한 번에 2바이트를 읽고 FileWriter는 한 번에 2바이트를 씁니다.

위의 예를 다시 작성할 수 있습니다. 이 두 클래스를 사용하여 입력 파일(유니코드 문자 포함)을 출력 파일에 복사합니다. −

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {
      FileReader in = null;
      FileWriter out = null;

      try {
         in = new FileReader("input.txt");
         out = new FileWriter("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

이제 input.txt 파일을 만들어 보겠습니다. 다음 내용으로 -

This is test for copy file.

다음 단계로 위의 프로그램을 컴파일하고 실행하면 input.txt와 동일한 내용으로 output.txt 파일이 생성됩니다. 따라서 위의 코드를 CopyFile.java 파일에 넣고 다음을 수행합니다. -

$javac CopyFile.java
$java CopyFile

표준 스트림

모든 프로그래밍 언어는 사용자 프로그램이 키보드에서 입력을 받아 컴퓨터 화면에 출력을 생성할 수 있는 표준 I/O를 지원합니다. C 또는 C++를 알고 있는 경우 프로그래밍 언어를 사용하는 경우 세 가지 표준 장치 STDIN, STDOUT 및 STDERR을 알고 있어야 합니다. 마찬가지로 Java는 다음 세 가지 표준 스트림을 제공합니다. -

다음은 InputStreamReader를 생성하는 간단한 프로그램입니다. 사용자가 "q"를 입력할 때까지 표준 입력 스트림을 읽으려면 -

라이브 데모
import java.io.*;
public class ReadConsole {

   public static void main(String args[]) throws IOException {
      InputStreamReader cin = null;

      try {
         cin = new InputStreamReader(System.in);
         System.out.println("Enter characters, 'q' to quit.");
         char c;
         do {
            c = (char) cin.read();
            System.out.print(c);
         } while(c != 'q');
      }finally {
         if (cin != null) {
            cin.close();
         }
      }
   }
}

위의 코드를 ReadConsole.java 파일에 보관하고 다음 프로그램과 같이 컴파일하여 실행해 보자. 이 프로그램은 'q' -

를 누를 때까지 동일한 문자를 계속 읽고 출력합니다.
$javac ReadConsole.java
$java ReadConsole
Enter characters, 'q' to quit.
1
1
e
e
q
q

파일 읽기 및 쓰기

앞에서 설명한 것처럼 스트림은 데이터 시퀀스로 정의할 수 있습니다. 입력 스트림 소스 및 OutputStream에서 데이터를 읽는 데 사용됩니다. 대상에 데이터를 쓰는 데 사용됩니다.

다음은 입력 및 출력 스트림을 처리하는 클래스 계층입니다.

두 가지 중요한 스트림은 FileInputStream입니다. 및 FileOutputStream , 이 튜토리얼에서 논의될 것입니다.

파일입력스트림

이 스트림은 파일에서 데이터를 읽는 데 사용됩니다. new 키워드를 사용하여 개체를 만들 수 있습니다. 여러 유형의 생성자를 사용할 수 있습니다.

다음 생성자는 파일 이름을 문자열로 사용하여 파일을 읽을 입력 스트림 개체를 만듭니다. -

InputStream f = new FileInputStream("C:/java/hello");

다음 생성자는 파일 개체를 사용하여 파일을 읽을 입력 스트림 개체를 만듭니다. 먼저 다음과 같이 File() 메서드를 사용하여 파일 객체를 만듭니다. -

File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);

InputStream이 있으면 객체를 손에 들고 있으면 스트림을 읽거나 스트림에서 다른 작업을 수행하는 데 사용할 수 있는 도우미 메서드 목록이 있습니다.

Sr.No. 방법 및 설명
1

public void close()에서 IOException 발생{}

이 메서드는 파일 출력 스트림을 닫습니다. 파일과 관련된 모든 시스템 리소스를 해제합니다. IOException을 발생시킵니다.

2

보호된 무효 finalize()가 IOException을 던짐{}

이 방법은 파일에 대한 연결을 정리합니다. 이 스트림에 대한 참조가 더 이상 없을 때 이 파일 출력 스트림의 닫기 메소드가 호출되는지 확인합니다. IOException을 발생시킵니다.

3

공개 int read(int r) IOException 발생{}

이 메서드는 InputStream에서 데이터의 지정된 바이트를 읽습니다. 정수를 반환합니다. 데이터의 다음 바이트를 반환하고 파일의 끝이면 -1을 반환합니다.

4

public int read(byte[] r)에서 IOException 발생{}

이 메서드는 입력 스트림에서 배열로 r.length 바이트를 읽습니다. 읽은 총 바이트 수를 반환합니다. 파일의 끝이면 -1을 반환합니다.

5

public int available()에서 IOException 발생{}

이 파일 입력 스트림에서 읽을 수 있는 바이트 수를 제공합니다. 정수를 반환합니다.

다른 중요한 입력 스트림을 사용할 수 있습니다. 자세한 내용은 다음 링크를 참조하세요. -

파일출력스트림

FileOutputStream은 파일을 만들고 데이터를 쓰는 데 사용됩니다. 스트림은 파일이 없는 경우 출력을 위해 열기 전에 파일을 생성합니다.

다음은 FileOutputStream 개체를 만드는 데 사용할 수 있는 두 개의 생성자입니다.

다음 생성자는 파일 이름을 문자열로 사용하여 파일을 쓰기 위한 입력 스트림 개체를 만듭니다. -

OutputStream f = new FileOutputStream("C:/java/hello") 

다음 생성자는 파일 개체를 사용하여 파일을 쓰기 위한 출력 스트림 개체를 만듭니다. 먼저 다음과 같이 File() 메서드를 사용하여 파일 객체를 생성합니다. -

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

OutputStream이 있으면 객체를 손에 들고 있으면 스트림에 쓰거나 스트림에서 다른 작업을 수행하는 데 사용할 수 있는 도우미 메서드 목록이 있습니다.

Sr.No. 방법 및 설명
1

public void close()에서 IOException 발생{}

이 메서드는 파일 출력 스트림을 닫습니다. 파일과 관련된 모든 시스템 리소스를 해제합니다. IOException을 발생시킵니다.

2

보호된 무효 finalize()가 IOException을 던짐{}

이 방법은 파일에 대한 연결을 정리합니다. 이 스트림에 대한 참조가 더 이상 없을 때 이 파일 출력 스트림의 닫기 메소드가 호출되는지 확인합니다. IOException을 발생시킵니다.

3

공개 무효 쓰기(int w) IOException 발생{}

이 메서드는 지정된 바이트를 출력 스트림에 씁니다.

4

공개 무효 쓰기(바이트[] w)

언급된 바이트 배열의 w.length 바이트를 OutputStream에 씁니다.

사용할 수 있는 다른 중요한 출력 스트림이 있습니다. 자세한 내용은 다음 링크를 참조하세요. -

다음은 InputStream 및 OutputStream을 보여주는 예입니다 -

import java.io.*;
public class fileStreamTest {

   public static void main(String args[]) {
   
      try {
         byte bWrite [] = {11,21,3,40,5};
         OutputStream os = new FileOutputStream("test.txt");
         for(int x = 0; x < bWrite.length ; x++) {
            os.write( bWrite[x] );   // writes the bytes
         }
         os.close();
     
         InputStream is = new FileInputStream("test.txt");
         int size = is.available();

         for(int i = 0; i < size; i++) {
            System.out.print((char)is.read() + "  ");
         }
         is.close();
      } catch (IOException e) {
         System.out.print("Exception");
      }	
   }
}

위의 코드는 test.txt 파일을 생성하고 주어진 숫자를 바이너리 형식으로 작성합니다. stdout 화면의 출력도 마찬가지입니다.

파일 탐색 및 I/O

파일 탐색 및 I/O의 기본 사항을 알아보기 위해 거쳐야 하는 몇 가지 다른 수업이 있습니다.

자바 디렉토리

디렉토리는 다른 파일 및 디렉토리 목록을 포함할 수 있는 파일입니다. 파일을 사용합니다. 개체를 사용하여 디렉터리를 만들고 디렉터리에서 사용 가능한 파일을 나열합니다. 자세한 내용은 File 개체에서 호출할 수 있는 모든 메서드 목록과 디렉터리와 관련된 항목을 확인하세요.

디렉토리 생성

두 개의 유용한 파일이 있습니다. 디렉토리를 만드는 데 사용할 수 있는 유틸리티 메서드 -

다음 예는 "/tmp/user/java/bin" 디렉토리를 생성합니다 -

import java.io.File;
public class CreateDir {

   public static void main(String args[]) {
      String dirname = "/tmp/user/java/bin";
      File d = new File(dirname);
      
      // Create directory now.
      d.mkdirs();
   }
}

위의 코드를 컴파일하고 실행하여 "/tmp/user/java/bin"을 생성합니다.

참고 − Java는 규칙에 따라 UNIX 및 Windows에서 경로 구분 기호를 자동으로 처리합니다. Windows 버전의 Java에서 슬래시(/)를 사용하면 경로가 여전히 올바르게 해석됩니다.

디렉토리 나열

목록( )을 사용할 수 있습니다. 파일에서 제공하는 메소드 다음과 같이 디렉터리에서 사용 가능한 모든 파일과 디렉터리를 나열하는 개체 -

import java.io.File;
public class ReadDir {

   public static void main(String[] args) {
      File file = null;
      String[] paths;
  
      try {      
         // create new file object
         file = new File("/tmp");

         // array of files and directory
         paths = file.list();

         // for each name in the path array
         for(String path:paths) {
            // prints filename and directory name
            System.out.println(path);
         }
      } catch (Exception e) {
         // if any error occurs
         e.printStackTrace();
      }
   }
}

그러면 /tmp에서 사용 가능한 디렉토리와 파일을 기반으로 다음과 같은 결과가 생성됩니다. 디렉토리 -

출력

test1.txt
test2.txt
ReadDir.java
ReadDir.class

java

  1. C 입력 출력(I/O)
  2. 파이썬 파일 I/O
  3. 자바 변수와 리터럴
  4. Java 기본 입력 및 출력
  5. 자바 클래스와 객체
  6. 자바 추상 ​​클래스와 추상 메소드
  7. Java 중첩 및 내부 클래스
  8. 자바 던지기 및 던지기
  9. 자바 스캐너 클래스
  10. 자바 오토박싱과 언박싱