basic i o operations java
이 비디오 자습서에서는 표준 I / O 장치를 사용하여 Java 사용자 입력, InputStream, Java Printf, Println 등과 같은 Java 입력-출력 메커니즘에 대해 설명합니다.
모든 프로그래밍 언어에서 입력 데이터를 읽고 최종 사용자에게 출력이라고도하는 처리 된 데이터를 보내는 메커니즘이 필요합니다.
아시다시피 소프트웨어 세계에는 프로그래머가 데이터를 읽고 쓰거나 출력하는 데 사용할 수있는 많은 입력 및 출력 장치가 있습니다.
우리를 통해 읽으십시오 완전한 Java 교육 시리즈 Java 개념에 대한 더 많은 통찰력을 얻으려면
학습 내용 :
Java의 기본 I / O 작업에 대한 비디오 자습서
Java 프로그램을 사용하여 다양한 소스 및 대상에서 데이터를 읽고 쓸 수 있습니다. 데이터 소스 및 대상 읽기 및 쓰기는 다음과 같습니다.
- 파일
- 파이프
- 네트워크 연결
- 인 메모리 버퍼 ( 예 : 어레이)
- System.in, System.out, System.error
이 비디오 자습서에서는 입력을 파일로 사용하고 파일에서 데이터를 읽는 데 사용할 수있는 다양한 클래스, 인터페이스 및 메서드를 탐색합니다.
Java의 기본 IO 작업 :
자바 파일 작업 :
Java I / O (Input-Output)는 입력을 처리하고 출력을 생성하는 표준 메커니즘입니다. 패키지“java.io”에는 모든 입력 및 출력 작업을 수행하는 메서드가 포함되어 있습니다.
I / O 작업을 더 빠르게 수행하기 위해 Java는 스트림 개념을 사용합니다. 스트림은 바이트로 구성된 데이터 시퀀스로 정의 할 수 있습니다.
Java I / O 스트림에 대해 자세히 알아 보겠습니다 !!
Java의 표준 I / O 스트림
Java 언어는 'System'클래스를 사용하여 시스템 리소스, 표준 입출력 장치 등에 대한 액세스를 제공합니다. 이 클래스는 다양한 리소스에 액세스하기위한 시스템 종속 프로그래밍 인터페이스를 구현합니다.
System 클래스는 Java의 'java.lang'패키지에 속합니다. 표준 I / O 스트림을 제공하는 것 외에도 System 클래스는 환경 변수, 외부 변수,로드 파일 및 라이브러리에 대한 액세스를 제공하고 배열의 일부를 복사하기위한 유틸리티 메소드 arrayCopy도 제공합니다.
이 튜토리얼은 표준 I / O만을 기반으로하므로 여기서 System 클래스에서 제공하는 나머지 기능은 건너 뛰겠습니다.
입력-출력 관점에서 System 클래스는 다음 스트림을 제공합니다.
# 1) 표준 입력 스트림 (System.in)
System 클래스 System.in에서 제공하는 입력 스트림은 키보드와 같은 표준 입력 장치에서 입력 데이터를 읽는 데 사용됩니다.
스트림은 열린 상태로 유지되며 사용자가 표준 입력 장치에 제공 한 데이터를 읽을 수 있습니다.
아래 예제는 단일 정수 숫자를 읽는 System.in.read 함수를 보여줍니다.
public class Main { public static void main(String args()) throws java.io.IOException { int ch; System.out.println('Enter the character to be displayed : '); ch = System.in.read(); System.out.println('You entered : ' + (char)ch); } }
산출:
# 2) 표준 출력 스트림 (System.out)
System 클래스의 System.out 인터페이스는 프로그램 출력을 모니터와 같은 표준 출력 장치에 쓰는 데 사용됩니다. 대부분의 경우 System.out 인터페이스는 명령 출력을 표준 출력 장치에 기록합니다.
표준 출력이이 클래스에서 파생되므로 'PrintStream'클래스의 세 가지 메서드를 사용합니다.
이러한 방법은 다음과 같습니다.
- 인쇄
- println
- 쓰다
'print'및 'println'메서드는 println 메서드가 출력에 줄 바꿈 문자 ( n)를 추가하는 단일 차이점을 제외하고 동일한 기능을 갖습니다.
쓰기 방법은 ASCII가 아닌 데이터를 표시하는 경우를 제외하고 자주 사용되지 않습니다.
다음 예제는 System.out 스트림을 보여줍니다.
public class Main { public static void main(String args()) throws java.io.IOException { String stringType = 'Java Tutorial Series'; char() charTypeArray = { 'a', 'e', 'i', 'o', 'u' }; boolean booleanType = true; int integerType = 10; double doubleType = Math.PI; long longType = Long.MAX_VALUE; float floatType = Float.MIN_VALUE; System.out.println('String::' + stringType); System.out.print('Character::'); System.out.println(charTypeArray); System.out.println('Boolean::' + booleanType); System.out.println('Integer::' + integerType); System.out.println('Double::' + doubleType); System.out.println('Long::' + longType); System.out.println('Float::' + floatType); } }
산출:
위 프로그램은 System.out 인터페이스와 함께 사용되는“print”및“println”기능을 보여줍니다. 여기에서는 다양한 데이터 유형의 변수를 정의하고 System.out 인터페이스를 사용하여 각각을 표시합니다.
# 3) 표준 오류 스트림 (System.err)
표준 오류 스트림 인 System.err은 프로그램 실행 중에 오류를 표시하는 데 사용됩니다.
System.out 스트림과 마찬가지로 오류 스트림은 PrintStream 클래스, print, println 및 writes의 세 가지 메서드도 지원합니다.
콘솔에서 입력을 읽는 방법
위에서 설명한 입력 스트림 외에도 Java의 콘솔에서 입력 데이터를 읽을 수있는 몇 가지 방법이 더 있습니다.
이러한 방법은 아래에서 설명합니다.
# 1) BufferedReader 클래스
BufferedReader 클래스는 JDK 1.0에서 처음 도입되었으며 콘솔에서 입력 데이터를 읽는 고전적인 방법입니다.
입력 스트림 (System.in)은 InputStreamReader 클래스 내부에 래핑되어 BufferedReader에 래핑됩니다.
다음 프로그램은 BufferedReader 클래스를 사용하여 사용자로부터 입력 데이터를 읽는 방법을 보여줍니다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String() args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.println('Enter the input string'); String name = reader.readLine(); System.out.println('You entered: ' + name); } }
산출:
위의 프로그램에서는 System.in 스트림으로 초기화 된 BufferedReader 클래스의 객체를 선언했습니다. 이 객체를 사용하여 전체 입력 라인을 읽습니다.
보시다시피 버퍼링 된 전체 데이터를 읽을 수 있으므로이 기능이 매우 효율적입니다. 유일한 단점은 매번 기억하기 어려울 수있는 암호 코드입니다.
# 2) 콘솔 클래스
“System.console”클래스를 사용하여 콘솔에서 입력을 읽을 수 있습니다. 특히 명령 줄에서 암호와 같은 입력 문자를 읽는 데 사용됩니다.
콘솔 클래스를 사용하여 입력 데이터를 읽는 방법은 현재 Java에서 가장 효율적이고 선호되는 방법입니다.
다음 프로그램은 System.console 클래스를 보여줍니다.
public class Main { public static void main(String() args) { System.out.println('Enter the input string'); String name = System.console().readLine(); System.out.println('You entered: ' + name); } }
산출:
System.console 클래스를 사용하면 문자를 에코하지 않고 입력 문자를 읽을 수 있습니다. 따라서이 방법은 암호를 읽는 데 더 유용합니다. 둘째, System.out.printf ()에서 사용 된 것과 유사한 형식 문자열을 사용하여 입력 데이터의 형식을 지정할 수도 있습니다.
이것이 입력 데이터를 읽는 데 선호되는 방법이지만 System.console 클래스는 IDE와 같은 대화 형 Java 환경에서 사용할 수 없습니다.
# 3) 스캐너
기본 라우터 암호 및 사용자 이름 목록
스캐너 클래스를 사용하여 입력 데이터를 읽는 것이 아마도 가장 빠르고 선호되는 방법 일 것입니다. 스캐너는 주로 기본 유형 및 문자열을 포함한 데이터 유형을 구문 분석하는 데 사용됩니다. 그러나 입력 데이터를 읽고 토큰 화 된 입력을 사용하여 구문 분석하는데도 사용할 수 있습니다.
스캐너 클래스는이를 위해 정규식을 사용합니다.
다음 프로그램은 scanner 클래스를 사용하여 사용자로부터 입력 데이터를 읽습니다.
import java.util.Scanner; class Main { public static void main(String args()) { Scanner myscan = new Scanner(System.in); System.out.println('Enter the input:'); String mystr = myscan.nextLine(); System.out.println('You entered a string:'+mystr); System.out.println('Enter Next input:'); int num = myscan.nextInt(); System.out.println('You entered an integer:'+num); } }
산출:
위의 프로그램에서 우리는 문자열과 정수 데이터를 읽기 위해 scanner 클래스를 사용했습니다.
printf를 사용하여 Java에서 출력 형식화
Java 프로그램에서 출력을 표시하는 방법을 이미 살펴 보았습니다. 이 섹션에서는이 출력의 형식을 지정하는 방법을 살펴 봅니다. 이를 위해 Java의 'System.out'스트림과 함께 'PrintStream'클래스의 printf 함수를 사용합니다.
Java의 printf 함수는 C / C ++의 printf 함수와 유사합니다. 단일 인수를 사용하는 System.out.print 및 System.out.println 함수와 달리 System.out.printf는 둘 이상의 인수를 사용합니다.
다음은 Java에서 printf 함수의 변형입니다.
아니 | 기능 프로토 타입 | 기술 |
---|---|---|
하나 | System.out.printf (문자열); | 형식화없이 인수에 제공된 문자열을 인쇄합니다. |
두 | System.out.printf (형식, 인수); | 지정된 형식 문자열 '형식'및 인수를 사용하여 출력을 인쇄합니다. |
삼 | System.out.printf (로케일, 형식, 인수); | 로케일과 인수를 적용하여 지정된 형식 문자열을 사용하여 출력을 인쇄합니다. |
System.out.format () 함수는 System.out.printf ()와 동일합니다.
형식 문자열을 지정하는 일반 구문은 다음과 같습니다.
%specifier => + for right-aligning, - for left-aligning. => to specify leading/trailing zeros and precision => suggests the data type.
예를 들어:
System.out.println(“ ‘%05.2f’%n”, 2.28);
다음 출력이 생성됩니다.
’02 .28’
이 자습서의 이후 항목에서 Java의 printf에 대해 자세히 설명합니다.
자주 묻는 질문
Q # 1) 표준 입력과 표준 출력은 무엇입니까?
대답: 표준 입력 및 출력 스트림은 프로그램이 실행을 시작할 때 컴퓨터 프로그램과 외부 환경간에 통신하기 위해 미리 연결된 채널입니다. 세 가지 다른 표준 I / O 스트림은 표준 입력 (stdin), 표준 출력 (stdout), 표준 오류 (stderr)입니다.
질문 # 2) 프로그래밍에서 표준 입력이란 무엇입니까?
대답: 표준 입력 또는 표준 입력은 키보드와 같은 표준 입력 장치에서 입력을 읽는 데 사용되는 스트림입니다.
질문 # 3) 입력-출력 스트림은 무엇입니까?
대답: 입력-출력 스트림은 입력을 읽는 소스와 출력을 보내는 대상을 나타냅니다.
일반적으로 스트림은 소스 및 대상, 즉 키보드, 디스크 파일, 모니터 등으로 사용되는 많은 장치를 나타냅니다.
질문 # 4) Java의 표준 입력이란 무엇입니까?
대답: Java의 표준 입력은 System 클래스에서 System.in 스트림으로 제공됩니다. System 클래스는 java.lang 패키지의 일부입니다.
질문 # 5) Java의 표준 출력은 무엇입니까?
대답: Java의 표준 출력은 System 클래스에서 System.out 스트림으로 제공됩니다. System 클래스는 java.lang 패키지의 일부입니다.
추가 예 – 입력 / 출력 스트림
스트림은 데이터 흐름을 나타내며 해당 데이터는 모든 형식 (바이트, 텍스트, 기본 데이터 유형 등)이 될 수 있습니다. 대상에 데이터를 쓰려면 출력 스트림이 사용되고 데이터를 읽기 위해 입력 스트림이 사용됩니다.
읽기 및 쓰기를위한 다양한 형식
입력 / 출력은 다음과 같은 다른 형식으로 읽고 쓸 수 있습니다.
# 1) 파일을 바이트 스트림으로 읽기
여기서 데이터는 바이트 형식으로 읽습니다. “ FileInputStream” 그리고“ FileOutputStream “클래스는 콘텐츠를 바이트로 읽는 데 사용됩니다. 이런 식으로 모든 바이트에 대해 컴파일러는 OS에 요청을 보냅니다.
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ByteStreamsDemo { public static void main(String() args) throws IOException { FileInputStream fin =null; FileOutputStream fout =null; try { fin=new FileInputStream('input.txt'); fout=new FileOutputStream('out.txt'); int c; while((c=fin.read() )!= -1) { fout.write(c); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(fin!=null) { fin.close(); }if(fout!=null) { fout.close(); } } } }
# 2) 문자 스트림으로 파일 읽기
이런 식으로 입력 스트림은 문자 형식으로 읽 힙니다. 따라서 각 문자에 대해 컴파일러는 OS에 요청을 보냅니다. “ FileReader” 그리고“ FileWriter” 클래스는 내용을 캐릭터로 읽는 데 유용합니다.
public class CharStreamDemo { public static void main(String() args) throws IOException { FileReader input = null; FileWriter output = null; try { input = new FileReader('input.txt'); output = new FileWriter('out1.txt'); int c; while ((c = input.read()) != -1) { output.write(c); } } finally { if (input != null) { input.close(); } if (output != null) { output.close(); } } } }
# 3) 입력 / 출력 스트림 버퍼링
FileInputStream 또는 FileReader 클래스를 사용하는 경우 모든 읽기 또는 쓰기 작업에 대해 새 요청이 OS로 전송됩니다. 따라서 성능 문제가 발생할 수 있습니다. 이 BufferedInputStream 또는 BufferedReader를 피하기 위해 클래스는 버퍼되지 않은 클래스를 래핑하는 데 사용됩니다.
버퍼가 비어있을 때 입력 스트림을 읽습니다.
마찬가지로 FileOutputStream 또는 FileWriter, 클래스는 버퍼가 가득 차면 출력을 쓰기 위해 BufferedOutputStream 또는 BufferedWriter로 래핑됩니다.
public class BufferedStreamDemo { public static void main(String() args) throws IOException { BufferedReader input = null; BufferedWriter output = null; try { input = new BufferedReader(new FileReader('input.txt')); output = new BufferedWriter(new FileWriter('out1.txt')); int c; while ((c = input.read()) != -1) { output.write(c); } } finally { if (input != null) { input.close(); } if (output != null) { output.close(); } } } }
# 4) 데이터 스트림으로 읽기
이 메서드에서 DataInputStream 또는 DataOutputStream 클래스는 콘텐츠를 boolean, char, byte, short, int, long, float, double 및 String과 같은 기본 데이터 유형으로 읽고 쓰는 데 사용됩니다. 대부분 DataInputStream과 DataOutputStream이 함께 사용됩니다.
public class DataInputOutputStreamDemo { public static void main(String() args) { File file = new File('read.bin'); FileOutputStream fos = null; DataOutputStream dos = null; try { fos=new FileOutputStream(file); dos=new DataOutputStream(fos); dos.writeInt(50244); dos.writeDouble(400.253); dos.writeChar('d'); dos.flush(); } catch (IOException e) { e.printStackTrace(); }finally { try { if(fos!=null){ fos.close(); } if(dos!=null){ dos.close(); } } catch (Exception e) { e.printStackTrace(); } } /*Reading operation */ FileInputStream fis = null; DataInputStream dis = null; try { fis = new FileInputStream(file); dis = new DataInputStream(fis); System.out.println(dis.readInt()); System.out.println(dis.readDouble()); System.out.println(dis.readChar()); } catch (IOException e) { e.printStackTrace(); }finally { try { if(fis!=null){ fis.close(); } if(dis!=null){ dis.close(); } } catch (Exception e) { e.printStackTrace(); } } } }
# 5) 객체 스트림으로 읽기
ObjectInputStream / ObjectOutputStream, 클래스는 파일에 객체를 쓰고 파일에서 객체를 읽는 데 유용합니다. 객체를 파일에 저장하려면 클래스가 Serializable 인터페이스를 구현해야합니다.
public class ObjectStreamDemo implements Serializable { int age ; String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
이 'ObjectStreamDemo'클래스에 대한 개체를 만들고 해당 개체를 파일에 쓰고 해당 파일에서 동일한 개체를 읽습니다.
public class ObjectStreamDemoTest { public static void main(String() args) { // TODO Auto-generated method stub ObjectStreamDemo obj=new ObjectStreamDemo(); obj.setAge(32); obj.setName('bob'); try { FileOutputStream fos = new FileOutputStream('t.tmp'); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(obj); oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } FileInputStream fis; ObjectInputStream ois; try { fis = new FileInputStream('t.tmp'); ois = new ObjectInputStream(fis); ObjectStreamDemo obj1 = (ObjectStreamDemo)ois.readObject(); System.out.println(obj1.name); System.out.println(obj1.age); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } } }
파일 I / O 작업
파일 클래스는 파일 작업을 수행하는 데 유용합니다.
File 클래스를 사용하여 수행되는 일부 파일 작업은 다음과 같습니다.
- 파일 생성
- 파일이 존재하는지 확인
- 파일 경로 가져 오기
- 파일 쓰기
- 파일 읽기
- 파일 삭제 및 파일 이름 바꾸기
- 파일 권한 확인 및 파일 권한 변경
- 한 디렉토리에서 다른 위치로 파일 이동
파일 생성, 읽기 및 쓰기를위한 데모 프로그램 :
public class CreateFileDemo { public static void main(String() args) throws IOException { File newfile=new File('created.txt'); if(!newfile.exists()) { newfile.createNewFile(); System.out.println('file not exist'); } try { String FILENAME='created.txt'; String content='hi how are u'; FileWriter fwt = new FileWriter(FILENAME); BufferedWriter bwt = new BufferedWriter(fwt); bwt.write(content); System.out.println('writing completed ...'); bwt.close(); } catch (IOException e) { e.printStackTrace(); } } }
주목해야 할 핵심 사항 :
- 스트림은 데이터 흐름을 논리적으로 표현한 것입니다.
- 바이트, 문자, 객체, 기본 데이터 유형과 같은 다른 형식으로 데이터를 읽고 쓸 수 있습니다.
- 파일 클래스는 파일 생성, 파일 삭제 및 파일 이동 또는 복사 또는 이름 바꾸기에 사용됩니다.
- BufferedInputStream 또는 BufferedOutputStream은 데이터를 버퍼링하여 성능을 향상시키는 데 사용됩니다.
결론
Java에는 System 클래스를 사용하여 표준 입력 및 출력 기능을 제공하는 java.lang 패키지가 있습니다.
표준 입력 및 출력에 각각 사용되는 System.in 및 System.out 스트림 외에도 사용자의 입력을 읽는 데 사용되는 BufferedReader, 콘솔 클래스 및 스캐너 클래스와 같은 다른 메서드도 있습니다.
System.out 스트림은“PrintStream”클래스 함수 인 print 및 println을 사용하여 출력을 표시합니다. 형식화하지 않고 출력을 표시하는 데 사용되는 함수입니다. C / C ++의 printf 함수와 유사한 또 다른 함수“printf”는 형식화 된 출력을 위해 Java에서도 사용됩니다.
다음 튜토리얼에서 Java의 스캐너 클래스 및 printf 함수에 대해 자세히 알아볼 것입니다.
=> 독점적 인 Java 교육 자습서 시리즈를 보려면 여기를 방문하십시오.