Java 언어의 입력 및 출력 기능은 매우 강력하고 유연합니다. 유일한 단점은 입력 및 출력 코드가 매우 간결한 것처럼 보입니다. 왜냐하면 종종 많은 다른 객체를 랩핑해야하기 때문입니다. Java 클래스 라이브러리에서 IO 부품의 내용은 표준 입력 및 출력, 파일 작동, 네트워크의 데이터 스트림, 문자열 스트림, 객체 스트림, Zip 파일 스트림 등 광범위한 필드를 포함하기 때문에 매우 큽니다.
흐름의 계층
정의:
Java는 데이터 객체를 입력 스트림으로 읽고 작성할 수있는 객체를 출력 스트림이라고합니다. 구조 다이어그램은 다음과 같습니다.
1. 입력 및 출력 :
입력/출력은 특정 장치 또는 환경에 대한 데이터의 입력 또는 출력을 나타냅니다. 모든 언어에는 입력 및 출력 기능이 있습니다. Java 프로그램에서는 입력 및 출력이 스트림을 통해 완료됩니다. Java 입력 및 출력 시스템을 통해 실제 장치에 연결됩니다. 입력 및 출력 스트림에 연결된 실제 실제 장치는 다르지만 동일한 방식으로 작동 할 수 있습니다. 예를 들어, 하드 디스크의 입력 및 출력의 경우 네트워크 호스트의 입력 및 출력이므로 다양한 장치 또는 환경에 대한 다양한 입력 및 출력 문제 및 솔루션이 있습니다.
2. 스트림 :
스트림은 컴퓨터의 입력과 출력 사이를 이동하는 일련의 데이터를 나타냅니다. 스트림 시퀀스의 데이터는 처리되지 않은 원시 바이너리 데이터 또는 특정 인코딩 프로세스 후 특정 형식의 요구 사항을 충족하는 특정 데이터 일 수 있습니다. 코드 내부와 관련된 부분과 코드 외부와 무관하게 부품을 호출하는 것이 일반적입니다.
데이터 전송 방법으로부터 스트림은 입력 스트림 및 출력 스트림으로 나눌 수 있습니다. 스트림의 내용에서 스트림은 바이트 스트림과 문자 스트림으로 나눌 수 있습니다.
(1) 입력 및 출력 스트림
입력 스트림의 기능은 프로그램 내부에서 외부로 데이터를 읽는 것입니다.
출력 스트림의 기능은 프로그램 외부에서 내부로 데이터를 작성하는 것입니다.
(2) 바이트 스트림 및 문자 스트림
바이트 스트림은 바이트 단위로 데이터를 읽고 쓸 수 있으며, 한 바이트에서 데이터를 읽고 쓸 수 있거나 한 번에 길이의 바이트 블록 (예 : 바이트 어레이)을 읽고 쓸 수 있습니다.
캐릭터 스트림은 스트림, 한 번에 하나의 문자 또는 한 번에 하나의 문자 블록으로 데이터를 읽고 쓸 때 문자로 사용됩니다.
스트림 처리를 용이하게하려면 Java 언어의 스트림이 java.io 패키지에 캡슐화되므로 스트림을 사용하려면 java.io 패키지를 가져와야합니다.
Java의 I/O 스트림은 4 가지 추상 클래스, 즉 InputStream, OutputStream, Reader 및 Writer를 기반으로합니다. 입력 스트림 클래스 및 하위 클래스는 바이트 스트림 데이터의 입력 처리를 구현하는 데 사용될 수 있습니다. 출력 스트림 클래스 및 하위 클래스는 바이트 스트림 데이터의 출력 처리를 구현하는 데 사용될 수 있습니다. Reader 클래스 및 하위 클래스는 문자 스트림 데이터의 입력 처리를 구현하는 데 사용될 수 있습니다. 작가 클래스와 하위 클래스는 문자 스트림 데이터의 출력 처리를 구현하는 데 사용될 수 있습니다.
1. 파일 클래스
Java의 파일 읽기 및 쓰기는 입력 및 출력 스트림을 통해 구현할 수 있지만 Java는 파일 디렉토리, 속성 및 관리 정보를 위해이를 구현하기위한 특수 파일 클래스를 제공합니다.
(1) 파일 클래스의 생성자
파일 클래스 객체를 만드는 생성자는 다음과 같습니다.
파일 (String PathName); // 경로 이름을 기준으로 생성합니다.
파일 (파일 부모, 문자열 자녀); // 주어진 파일 객체에서 생성합니다.
파일 (String Parent, String Child); // 지정된 경로를 기반으로 작성합니다.
파일 (URL URL); // URL 링크를 기반으로 작성합니다.
(2) 파일 클래스의 일반적인 방법
부울 canread () : 파일 객체에 해당하는 경로가 읽을 수 있는지 여부를 결정합니다.
Boolean canwrite () : 파일 개체에 해당하는 경로가 쓸 수 있는지 여부를 결정합니다.
부울이 존재합니다 () : 파일 객체에 해당하는 경로가 존재하는지 여부를 결정합니다.
문자열 getAbsolutepath () : 파일 객체의 해당 경로의 절대 경로를 가져옵니다.
String getParent () : 파일 개체의 해당 경로의 디렉토리를 가져옵니다.
String getPath () : 파일 객체에 해당하는 경로를 가져옵니다.
부울 isabsolute () : 파일 개체에 해당하는 경로가 절대 경로인지 여부를 결정합니다.
String getName () : 파일 개체의 해당 경로의 파일 이름을 가져옵니다.
부울 isdirectory () : 파일 개체에 해당하는 경로가 디렉토리인지 여부를 결정합니다.
Boolean isfile () : 파일 개체에 해당하는 경로가 파일인지 확인합니다.
부울 ishidden () : 파일 개체에 해당하는 파일이 숨겨진 속성인지 결정합니다.
긴 길이 () : 파일 객체에 해당하는 파일의 길이를 가져옵니다.
Long LastModified () : 파일 개체에 해당하는 파일의 최신 수정 시간을 얻습니다.
부울 레나 메토 (File Dest) : 파일 개체에 해당하는 파일의 파일 이름을 변경합니다.
부울 setReadOnly () : 파일 개체의 해당 파일을 읽기 전용으로 설정합니다.
(3) 파일을 만듭니다
파일 출력 스트림을 만들어 새 파일을 만듭니다. 이 메소드는 디렉토리를 만들 수 없으며 작성하려는 파일이 이미 존재하는 경우 원본 파일을 덮어 쓰는 새 파일이 작성됩니다.
fileoutrputStream file = new FileOutputStream ( "filename");
(4) 파일 목록을 얻습니다
List () 또는 ListFiles () 메소드를 통해 특정 폴더의 파일 목록을 가져옵니다. 몇 가지 형태가 있습니다.
문자열 [] list ();
파일 [] listFiles ();
file [] listfiles (filenamefilter 필터);
file [] listfiles (filefilter 필터);
그중에서도 FileFilter 및 FilenameFilter는 모두 인터페이스이며 필터는 해당 필터입니다. 특정 클래스를 선언하고 필터 인터페이스를 구현하여 모든 일치하는 파일을 필터링 조건을 통해 나열 할 수 있습니다.
2. 입력 스트림 클래스 및 출력 스트림 클래스
바이트 스트림 클래스는 추상 클래스 inputStream 및 outputStream에서 파생 된 일련의 클래스입니다. 이 유형의 스트림은 바이트를 기반으로합니다. InputStream 및 OutputStream 클래스를 사용하여 바이너리 파일 데이터를 처리 할뿐만 아니라 텍스트 파일을 처리 할 수도 있습니다.
1. 입력 스트림 클래스의 일반적인 방법
입력 스트림 클래스는 모든 입력 스트림의 상위 클래스입니다. 이 클래스의 모든 방법은 오류가 발생하면 IOException을 던집니다. 주요 방법은 다음과 같습니다.
(1) 공개 초록 int read () 해당 ioexception
이 메소드는 0과 255 또는 -1 사이의 정수를 반환하고 -1은 스트림의 끝이 발생했으며 다른 해당 바이트가 읽었음을 의미합니다.
(2) 공개 int 읽기 (byte [] b) IoException
이 메소드는 파라미터에 의해 주어진 바이트 배열로 바이트를 읽고, 반환 값은 실제로 또는 -1에서 읽는 바이트 수입니다 (스트림의 끝이 발생).
(3) public int read (byte [] b, int i, int b) ioexception
이 방법의 마지막 두 매개 변수는 판독의 시작 위치와 최대 바이트 수를 읽습니다.
(4) Public Int available ()
현재 스트림 객체에서 읽지 않은 바이트 수를 반환합니다. 즉, 스트림에서 데이터 길이를 얻으십시오.
(5) 공개 장기 건너 뛰기 (Long N)
현재 스트림 객체에서 N 바이트를 건너 뛰고 건너 뜁니다. 건너 뜁니다.
(6) 공개 부울 Marksupported ()
흐름이 마크를지지하는지 여부를 결정하고 마크는 원래 읽기 위치로 쉽게 돌아올 수 있습니다.
(7) 공공 공간 close ()
현재 스트림 객체를 닫고 스트림 객체가 차지하는 리소스를 해제하십시오.
(8) 공개 공허 표시 (int I)
나중에 해당 위치에서 계속 읽을 수 있도록 스트림의 현재 위치에 대한 플래그를 설정하십시오.
(9) 공개 void reset ()
스트림 읽기 위치를 세트 마크의 위치로 되돌립니다.
2. 출력 스트림 클래스의 일반적인 방법
OutputStream 클래스는 모든 출력 스트림의 상위 클래스입니다. 이 클래스의 모든 방법은 오류 사례에서 void를 반환하고 ioexception을 던집니다. 주요 방법은 다음과 같습니다.
(1) 공개 공허 쓰기 (int b)는 ioexception을 던진다
스트림 끝에 바이트의 데이터를 작성하십시오.
(2) 공개 공허 쓰기 (바이트 [] b)는 ioexception을 던진다
배열 B에 데이터를 현재 스트림 객체에 차례로 쓰십시오.
(3) 공공 공간 와이어 (Byte [] b, int i, int n)
배열에서 후속 길이의 데이터를 시작부터 시작하여 (포함) 순서대로 스트림 객체에 쓰십시오.
(4) 공개 void close ()
현재 스트림 객체를 닫고 스트림 객체가 차지하는 리소스를 해제하십시오.
(5) 공개 void flush ()
힘 출력 현재 스트림 객체에서 버퍼링 된 데이터를 출력하십시오. 이 방법을 사용하여 즉각적인 출력을 달성하십시오.
위의 두 클래스의 대부분의 메소드는 Mark () 및 reset () 메소드를 제외하고 입력 스트림 및 출력 스트림의 서브 클래스로 재정의됩니다.
3. FileInputStream 클래스
FileInputStream 클래스는 InputStream의 서브 클래스로 파일을 데이터 입력 소스로 사용하여 파일 읽기 작업을 구현하는 데이터 스트림을 처리하는 데 사용할 수 있습니다.
건설 방법은 다음과 같습니다.
(1) FileInputStream (파일 F)
데이터 소스로 지정된 이름을 가진 파일 객체 F를 사용하여 파일 입력 스트림을 만듭니다.
F가 존재하면 파일 경로 여야합니다. 디렉토리 인 경우 ioException이 발생하지만이 디렉토리가 존재하지 않으면 다음이 발생됩니다. FilenotFoundException이 발생합니다.
(2) FileInputStream (문자열 이름)
이름이라는 파일이 데이터 소스로 파일 입력 스트림을 만듭니다.
(3) FileInputStream (Filedescriptor f)
파일 디스크립터 개체 f를 기반으로 입력 끝에 대한 파일 입력 스트림을 만듭니다.
주요 방법은 부모 클래스 (inputStream class)의 메소드를 무시하는 것입니다. read (), read (byte [] b), read (byte [] b, int i, int length), skip (long n), avide (), close ().
4. FileOutputStream 클래스
FileOutputStream 클래스는 outputStream의 서브 클래스로, 데이터로 데이터 스트림을 데이터로 처리하고 파일에 쓰기 작업을 구현하는 데 사용됩니다. 건설 방법은 다음과 같습니다.
FileOutputStream (파일 F);
FileOutputStream (File F, Boolean B);
FileOutputStream (String F);
주요 방법에는 상위 클래스 : 쓰기 (int b), write (byte [] b), writ
5. DatainputStream 및 DataOutputStream 클래스
DateInputStream 및 DataOutputStream 클래스에 의해 생성 된 개체를 각각 데이터 입력 스트림 및 데이터 출력 스트림이라고합니다. 데이터는 각각 Datainput 인터페이스와 DataOutput 인터페이스를 구현합니다. DateInputStream 클래스 및 DataOutputStream 객체를 통해 다양한 유형의 Java 데이터를 읽을 수 있습니다.
이 두 스트림은 필터링 스트림에 속하며 입력 스트림 또는 출력 스트림과 같은 다른 스트림은 종종 입력 또는 출력으로 사용됩니다. 예를 들어:
fileInputStream fis = new FileInputStream ( "d : //a.txt");
datainputStream dis = new DatainputStream (FIS);
fileoutputStream fos = 새 FileOutputStream ( "d : //a.txt");
DataOutputStream dos = 새로운 DataOutputStream (FOS);
DateInputStream 및 DataOutputStream의 입력 및 출력은 거의 대응합니다. 각 기본 데이터 유형의 읽기 및 쓰기 방법은 접미사 이름에서 식별 할 수 있습니다. 예를 들어:
readInt (), writeInt () // int 값을 읽고 쓰십시오
readboolean (), writeboolean () // 부울 가치를 읽고 씁니다
readchar (), writeChar () // 문자를 읽고 쓰십시오
readdouble (), writedouble () // 이중 정밀 부동 소수점 값을 읽고 쓰기
readfloat (), writefloat () // 단일-프리즈 플로팅 포인트 값을 읽고 쓰기
writeChars () // 문자열을 쓰지만 문자열을 직접 읽을 방법이 없습니다.
3. 독자 수업 및 작가 수업
Java의 문자는 유니 코드 인코딩을 사용하고 각 문자에는 2 바이트, 즉 16 비트가 있습니다. 문자 스트림은 16 비트 유니 코드 코드로 표시되는 문자를 기반으로하며 텍스트 데이터를 읽고 쓸 수 있습니다. 텍스트 데이터는 Java 프로그램의 내부 형식과 텍스트 파일, 디스플레이 출력, 키보드 입력 등과 같은 외부 형식 간의 전환을 실현할 수 있습니다.이 방법은 특히 한자의 작동에 적합합니다. 한자가 바이트로 작동하는 경우, 갈색 코드를 출력 할 수 있습니다.
독자와 작가는 java.io 패키지의 모든 캐릭터 스트림의 추상적 인 부모 클래스로, 다른 스트림 클래스를 구현하기위한 주요 방법을 정의합니다. 가장 중요한 두 가지는 각각 문자 데이터를 읽고 쓰는 read ()와 write ()입니다. 독자 및 작가 클래스 및 하위 클래스의 방법은 입력 스트림 클래스, 출력 스트림 클래스 및 하위 클래스를 사용하는 방법과 매우 유사합니다. 그러나 그 매개 변수는 문자 또는 문자 배열로 대체됩니다.
1. 독자 수업 및 작가 수업의 일반적인 방법
독자 수업은 추상 클래스입니다. 이 클래스의 모든 방법은 오류 조건에서 IOException 예외를 던집니다. 일반적인 방법은 다음과 같습니다.
(1) Abstract void close () : 입력 소스를 닫습니다.
(2) void mark (int numchars) : 입력 소스의 현재 지점에 표시를 놓습니다.
(3) Boolean Marksupported () :이 스트림이 Mark/Reset 메소드를 지원하면 true가 반환됩니다.
(4) int read () : 단일 문자를 읽습니다.
(5) int read (char [] buf) : 문자를 문자 배열로 읽습니다.
(6) Abstract int read (char [] buf, int offset, int numchars) : 배열의 일부로 문자를 읽습니다.
(7) 부울 ready () : 다음 입력 요청이 대기 할 필요가 없으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
(8) void reset () : 입력 포인터를 이전에 표시된 세트로 재설정하십시오.
(9) Long Skip (Long Numchars) : skip n 문자 입력을 건너 뛰고 실제 문자 수를 건너 뜁니다.
작가 수업은 또한 추상 클래스이며 일반적으로 사용되는 방법은 다음과 같습니다.
(1) Abstract void close () : 출력 스트림을 닫습니다.
(2) Abstract void flush () : 캐시를 지우려면 출력 상태를 결정하십시오.
(3) void write (int ch) : 단일 문자를 쓰십시오.
(4) void write (char [] buf) : 문자 배열에 쓰십시오.
(5) Abstract void write (char [] buf, int offset, int numchars) : 문자 배열의 일부를 쓰십시오.
(6) void write (string str) : 문자열을 쓰십시오.
(7) void write (String str, int offset, int numchars) : 문자열의 일부를 쓰십시오.
2. Filereader 클래스
Filereader 클래스는 InputStreamReader 클래스에서 상속되고 InputStreamReader 클래스는 Reader 클래스에서 상속됩니다. 따라서 Reader Class와 InputStreamReader 클래스가 제공하는 메소드는 Filereader 클래스에서 생성 한 객체에 사용할 수 있습니다. Filereader의 생성자 방법은 다음과 같습니다.
filereader (파일 파일);
Filereader (Filedescriptor e);
filereader (String filename);
3. filewriter 클래스
Filewriter 클래스는 OutputStreamwriter 클래스에서 상속되고 OutputStreamwriter 클래스는 Writer 클래스에서 상속됩니다. 따라서 Writer Class와 OutputStreamWriter 클래스가 제공하는 방법은 FileWriter 클래스에서 만든 객체에서 사용할 수 있습니다. filewriter의 생성자 방법은 다음과 같습니다.
filewrite (File Filepath);
filewrite (파일 F, 부울 부록);
filewrite (Filedescriptor e);
filewrite (String filename);
filewrite (String filename, 부울 부록);
4. BufferedReader 클래스
BufferedReader 클래스는 독자 클래스에서 상속되며 버퍼의 데이터를 읽는 데 사용됩니다. BufferedReader 클래스는 필터링 스트림에 속하며 FilerEader와 같은 다른 스트림은 종종 입력 또는 출력으로 사용됩니다. 건설 방법은 다음과 같습니다.
BufferedReader (Reader IN);
BufferedReader (Reader In, Int Bufsize);
예를 들어:
filereader fr = new Filereader ( "d : /1.txt");
bufferedReader buf = 새로운 버퍼드 리더 (FR);
BufferedReader는 readerline () 메소드를 제공하여 모든 텍스트 라인을 읽습니다.
5. 버퍼링 라이터 클래스
BufferedWriter 클래스는 Writer 클래스에서 상속되고 BufferedWriter 클래스는 버퍼에 데이터를 작성하는 데 사용됩니다. BufferedWriter 클래스 사용은 BufferedReader 클래스 사용과 유사합니다. 차이점은 버퍼의 데이터가 결국 Flush () 메소드에 의해 지우아야한다는 것입니다. 즉, 버퍼의 모든 데이터를 파일에 작성합니다. 건설 방법은 다음과 같습니다.
버퍼링 라이터 (작가 아웃);
완충 작가 (Writer Out, Int Bufsize);
4. RandomAccessFile 클래스
Java의 랜덤 파일 액세스는 객체 클래스에서 직접 상속하고 인터페이스 Datainput 및 DataOutput을 구현하는 RandomAccessFile 클래스 (이 클래스는 모든 위치에서 모든 위치에서 액세스 할 수 있습니다)를 사용해야합니다.
RandomAccessFile 클래스는 Datainput 및 DataOutput 인터페이스에 정의 된 모든 메소드를 구현하므로 파일에서 기본 유형 데이터를 읽고 기본 유형 데이터를 파일에 쓸 수 있습니다. Datainput 및 DataOutput 인터페이스에 정의 된 메소드 외에도 RandomAccessFile 클래스는 랜덤 액세스를 지원하기위한 다른 방법을 정의합니다.
RandomAccessFile 클래스에 의해 생성 된 스트림은 이전 입력 및 출력 스트림과 다릅니다. RandomAccessFile 클래스는 입력 스트림 클래스에서 입력 스트림 클래스의 서브 클래스가 아니거나 출력 스트림 클래스에서 출력 스트림 클래스의 서브 클래스가 아닙니다. 그러나 RandomAccessFile 클래스에 의해 생성 된 스트림의 방향은 소스와 대상으로 사용할 수 있습니다. 다시 말해, 파일을 읽고 쓸 때 파일을 가리키는 RandomAccessFile 스트림을 만들어 스트림에서 파일의 데이터를 읽고 스트림을 통해 파일에 데이터를 쓸 수 있습니다.
RandomAccessFile 클래스의 두 가지 생성자 방법 :
(1) RandomAccessFile (문자열 이름, 문자열 모드)
매개 변수 이름은 파일 이름을 결정하고 생성 된 스트림의 소스 (또한 유량 대상)를 제공하는 데 사용되며 매개 변수 모드는 파일에 대한 생성 스트림의 액세스 권한을 결정하는 R (읽기 전용) 또는 RW (읽기 작성 가능)를 취합니다.
(2) RandomAccessFile (파일 파일, 문자열 모드)
매개 변수 파일은 파일 객체로 소스 (스트림의 대상)를 제공합니다. 매개 변수 모드는 r (읽기 전용) 또는 RW (읽기 작성 가능)를 사용하고 생성 된 스트림의 파일에 대한 액세스 권한을 결정합니다. 객체를 만들 때 filenotfoundException을 잡아야합니다. 스트림이 읽기 및 쓰기 작업을 수행하면 IOException을 잡아야합니다.
Object RandomAccessFile의 정보를 읽고 쓰는 방법은 데이터 객체를 입력하고 출력하는 방법과 동일합니다. 클래스 DatainputStream 및 DataOutputStream의 모든 read () 및 write () 메소드에 액세스 할 수 있습니다.
파일을 이동하는 방법 파일 읽기 및 쓰기 포인터 :
(1) Long GetFilePointer () : 파일 포인터의 현재 위치를 반환합니다.
(2) void Seek (Long POS) : 파일 포인터를 지정된 절대 위치에 놓습니다. 위치 값은 파일 시작부터 바이트 오프셋 POS로 계산됩니다. POS는 0이며 파일의 시작을 나타냅니다.
(3) 긴 길이 () : 파일의 길이를 반환합니다. 위치 값은 길이 ()이며 파일의 끝을 나타냅니다.