티스토리 뷰

1.    Scanner

-      Console 클래스는 문자열은 읽을 수 있지만, 기본타입인 정수 타입이나 실수 타입은 바로 읽을 수 없다는 단점이 있는데,

-      Scanner은 콘솔로부터 기본 타입의 값을 바로 읽을 수 있다.

-      형태 : Scanner scanner = new Scanner(System.in)

-      제공되는 메소드 : nextLine( ); [ String값을 읽는다. ] , nextInt( ); [ 정수값을 읽는다. ] ...

 

2.    File 클래스

-      파일 시스템의 파일을 표현하는 클래스

-      파일의 크기 / 속성 / 이름 등의 정보를 제공하고, 파일을 생성 및 삭제하는 기능을 제공한다.

-      디렉토리 생성 및 디렉토리에 존재하는 파일 리스트를 얻어내는 기능을 제공한다.

-      파일 객체 생성 : File file = new File( “파일의 위치“ );

-      파일이 없으면 파일을 생성하게 된다.

-      파일 또는 디렉토리의 존재 유무 확인 메소드 : Boolean isExist = file.exists( );

-      생성 및 삭제 메소드 :

-      createNewFile( ); [ 새로운 파일을 생성한다. ], mkdir( ); [ 새로운 디렉토리를 생성 ], mkdirs( ); [ 경로상에 없는 모든 디렉토리를 생성 ], deletr( ); [ 파일 / 디렉토리 삭제 ]

-       + URL = Uniform Resource Locator ( 표준화된 자원의 위치를 알려준다. )

-       + URL ex) https://www.naver.com:80/index.html

-       + 이때 /index.htmlURI라고 하는데, URL( = Uniform resorce Indicator )는 다양한 웹 자원 중에 필요한 자원을 알려주는 지시자이다.

 

3.    파일 입출력

-      1 ) FileInputStream : 파일로부터 바이트 단위로 읽어 들일 때 사용

-      그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일을 읽을 수 있다.

-      InputStream의 하위 클래스이기에 사용방법은 InputStream과 같다.

-      객체 생성 방법 : FileInputStream 객체가 생성될 때 파일과 직접적으로 연결된다.

-      Try - catch문으로 예외처리를 해줘야 한다.

-      2 ) FileOutputStream : 파일에 바이트 단위로 데이터를 저장할 때 사용한다.

-      파일에 바이트 단위로 데이터를 저장할 때 사용하며, 모든 종류의 데이터를 파일로 저장한다.

 

4.    보조스트림

-      다른 스트림과 연결되어 여러 가지 편리한 기능을 제공해주는 스트림

-      입력 스트림 - > 보조 스트림 - > 프로그램 - > 보조 스트림 - > 출력 스트림

-      문자변환, 입출력 성능 향상, 기본 데이터 타입의 입출력, 객체 입출력 등의 기능을 제공해 준다.

-      보조 스트림 생성 : 보조스트림 변수 = new 보조스트림( 연결스트림 )

-      보조 스트림 체인 : 다른 보조 스트림과 연결되어 역할을 수행한다.

 

5.    문자 변환 보조 스트림 ( 다국어 변환 처리 )

-      소스 스트림이 바이트 기반 스트림이지만, 데이터가 문자일 경우에 사용한다.

-      바이트 기반 입/출력 스트림을 문자 기반의 입/출력 스트림으로 바꿔준다.

-      InputStreamReader : InputStreamReader로 변환해준다.

 

6.    성능 향상 보조 스트림

-      입출력 성능에 영향을 미치는 입출력 소스이다.

-      입출력 소스와 직접 작업하는 것이 아니라 메모리에 버퍼(buffer)를 만들어서 작업하여 실행 성능을 향상시킨다.

-      버퍼를 사용하게 되면 데이터를 한번에 하드 디스크로 보내 출력 횟수를 줄여준다.

-      Ex. BufferedInputStream / BufferedReader / BufferedOutputStream / BufferedWriter

 

7.    프린트 보조 스트림

-      PrintStream / PrintWriter

 

8.    객체 입출력 보조 스트림

-      객체를 파일 또는 네트워크로 입출력할 수 있는 기능을 제공

-      객체 직렬화 : 객체는 문자는 아니기에 바이트 기반 스트림으로 데이터 변경 필요

 


더보기

01. Scanner

package scanner;

import java.util.Scanner;

import lombok.Cleanup;

public class ScannerExample {
	
	public static void main (String[] args) {
		
		@Cleanup
		Scanner sc = new Scanner(System.in); // Scanner 객체 생성
		
//		========================================
		
		System.out.print("문자열 입력 > "); // 입력유도 프롬프트 메세지 출력
		String inputString = sc.nextLine(); // 문자열로 입력받음
		
		System.out.println(inputString);
		System.out.println();
		
//		========================================
		
		System.out.print("정수 입력 > "); // 입력유도 프롬프트 메세지 출력
		int inputInt = sc.nextInt(); // 정수로 입력받음
		
		System.out.println(inputInt);
		System.out.println();
		
//		========================================		
		
		System.out.print("실수 입력 > "); // 입력유도 프롬프트 메세지 출력
		double inputDouble = sc.nextDouble(); // 실수로 입력받음
		
		System.out.println(inputDouble);
		
//		sc.reset(); - 스캐너를 다시 처음으로 리셋시킨다.(?)
		
//		sc.close(); - 스캐너도 자원객체이기에 닫아야 한다.
		
//		========================================	
		
		// 출력 :
//		문자열 입력 > 문자열!
//		문자열!
//
//		정수 입력 > 70
//		70
//
//		실수 입력 > 8.0
//		8.0
		
//		========================================	
		
	} // main

} // end class

더보기

02. InputStreamReader - 바이트 기반을 문자기반 입력 스트림으로

package inputstreamreader;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;

public class InputStreamReaderExample {
	
	public static void main (String [] args) throws Exception {
		
		InputStream is = System.in;
		
		// 1. 문자변환 보조 스트림 : InputStream -> Reader 변환
		Reader reader = new InputStreamReader(is);
		
		int readCharNo;
		
		char [] cbuf = new char [100]; // 바가지
		
		while( ( readCharNo = reader.read(cbuf)) != -1 ) { 
			
			String data = new String(cbuf,0,readCharNo);
			
			System.out.println(data);
			
		} // while
		
		reader.close();
		
	} // main

} // end class

더보기

03. OutputStreamWriter - 바이트 기반을 문자 기반 출력 스트림으로

package outputstreamwriter;

import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;

public class OutputStreamWriterExamle {
	
	public static void main (String[] args) throws Exception {
		
		FileOutputStream fos = new FileOutputStream("C:/Temp/file.txt");
		
		Writer writer = new OutputStreamWriter(fos);
		
		String data = "바이트 출력 스트림을 문자 출력 스트림으로 변환하였습니다.";
		writer.write(data);
		
		writer.flush();
		writer.close();
		System.out.println("출력이 완료되었습니다!");
		
	} // main

} // end class

더보기

04. PrintStream

package print_stream;

import java.io.FileOutputStream;
import java.io.PrintStream;

public class PrintStreamExample {
	
	public static void main (String[] args) { 
		
		try { 
			FileOutputStream fos = new FileOutputStream("C:/Temp/file.txt");
			PrintStream ps = new PrintStream(fos);
		
			try ( fos; ps; ) {
		
			ps.println("[ 프린터 보조 스트림 ]");
			ps.print("마치 ");
			ps.println("프린터가 출력하는 것처럼 ");
			ps.println("데이터를 출력합니다. ");
		
			ps.printf("이름 : %s, 나이 : %s ", "Yoseph",23); // 진정한 포멧팅 : printf (***)
			// %s 자리에 입력한 순서대로 들어가게 된다.
			// 이름 : Yoseph, 나이 : 23 
		
			ps.flush();
		
			} // try - with - resource
			
		} catch (Exception e) {
			e.printStackTrace();
		} // Outer try - catch
		
	} // main

} // end class

더보기

05. DataInput / OutPutStream

package datainput_outputstream;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class DataInputOutputStreamExample {
	
	public static void main ( String[] args ) throws Exception {
		
		// 1. 출력할 때 
		
		FileOutputStream fos = new FileOutputStream("C:/Temp/primitive.dat");
		DataOutputStream dos = new DataOutputStream(fos); // 바이트로 바뀌어서 출력된다.
		
		dos.writeUTF("홍길동");
		dos.writeDouble(95.5);
		dos.writeInt(1);
		
		dos.writeUTF("김자바");
		dos.writeDouble(90.3);
		dos.writeInt(2);
		
		dos.flush();
		
		// 근간이 되는 스트림과 보조 스트림을 자원해제할 때에는
		// 순서대로 닫히게 된다. ( 1. 보조스트림 해제 -> 2. 근간 스트림 해제 )
		dos.close();
		fos.close();
		
//		=======================================================
		
		// 2. 읽어낼 때
		
		// 읽을 때도 입력한 순서대로 파일의 처음부터 읽어내게 된다.
		
		FileInputStream fis = new FileInputStream("C:/Temp/primitive.dat");
		DataInputStream dis = new DataInputStream(fis);
		
		for (int i=0; i<2; i++) {
			
			String name = dis.readUTF();
			double score = dis.readDouble();
			int order = dis.readInt();
			System.out.println( name + " : " + score + " : " + order);
			
		} // for
		
//		======================================================
		
		// 출력 :
//		홍길동 : 95.5 : 1
//		김자바 : 90.3 : 2
		
//		======================================================
		
		dis.close();
		fis.close();
		
	} // main

} // end class

더보기

06. BufferedInputStream

package bufferedstream;

import java.io.BufferedInputStream;
import java.io.FileInputStream;

public class BufferedInputStreamExample { // 성능 향상 보조 스트림
	
	public static void main(String [] args) throws Exception {
		
		long start = 0;
		long end = 0;
		
//		===================================================================
		
		// 1. 성능향상 보조 스트림을 사용하지 않고, 직접 바이트 기반의 입력 스트림으로
		// 파일을 읽어내었을 때의 실행소요시간 측정
		
		FileInputStream fis1 = new FileInputStream("C:\\Users\\Junhyun\\Desktop\\kh 자바 자료\\PPT\\10장(예외처리).ppt");
		
		start = System.currentTimeMillis();
		while(fis1.read() != -1 ) { ;; }
		
		end = System.currentTimeMillis();
		System.out.println("사용하지 않았을 때 : " + ( end - start ));
		fis1.close();
		
//		===================================================================
		
		// 2. 성능향상 보조 스트림을 연결해서 동일 파일을 읽어내었을 때의 소요 시간 측정
		
		FileInputStream fis2 = new FileInputStream("C:\\Users\\Junhyun\\Desktop\\kh 자바 자료\\PPT\\10장(예외처리).ppt");
		
		// 성능향상보조 스트림 연결 (****)
		BufferedInputStream bis = new BufferedInputStream(fis2);
		
		start = System.currentTimeMillis();
		while(bis.read() != -1 ) { ;; }
		
		end = System.currentTimeMillis();
		System.out.println("사용했을 때 : " + ( end - start ));
		
		bis.close(); // 버퍼도 닫아야 한다.
		fis2.close();
		
		// 출력 : 버퍼를 사용했을 때 더 짧게 걸린다.
//		사용하지 않았을 때 : 9335
//		사용했을 때 : 36
		
	} // main

} // end class

더보기

07. 파일 및 디렉토리의 생성

package file;

import java.io.File;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Date;

public class FileExample {
	
	public static void main (String[] args) throws Exception { // 파일 및 디렉토리의 생성(***)
		
		// 객체 생성
		
		File dir = new File("C:/Temp/Dir");
		File file1 = new File("C:/Temp/file1.txt");
		File file2 = new File("C:/Temp/file2.txt");
		File file3 = new File(new URI("file:///C:/Temp/file3.txt") ); // 지시자
		
		// 파일이나 디렉토리가 없으면, 새로 생성하게 된다.
		
//		file:///C:/Temp/file3.txt [ file:///는 URI를 통해 로컬에 있는 파일이나 디렉토리를 다룰때 꼭 붙여야 하는 규약이다. ]
		// 그러나 이렇게 사용하면 코드의 길이가 길어지기에 로컬에서는 그냥 위의 코드를 사용하는 것이 좋다.
		
		 System.out.println("1. dir : " + dir );
		 // 출력 : 1. dir : C:\Temp\Dir
		 
		 System.out.println("2. file1 : " + file1);
		 // 출력 : 2. file1 : C:\Temp\file1.txt
		
//		=========================================================
		 
		 // 파일과 디렉토리의 존재 여부 확인 및 생성
		
		if(dir.exists() == false) { dir.mkdirs(); } // 지정된 경로에 필요한 모든 디렉토리를 생성하게 된다. (**)
		if( file1.exists() == false ) { file1.createNewFile(); }
		if( file2.exists() == false ) { file2.createNewFile(); }
		if( file3.exists() == false ) { file3.createNewFile(); }
		
		// 출력 결과 :
		// dir라는 이름의 파일과 file1 file2 file3라는 이름의 txt파일이 생성되었다.
		
//		=========================================================
		
		// 도스 창 출력과 같이 포멧팅하기
		
		File temp = new File("C:/Temp");
		// 지정된 위치에 지정된 파일이나 디렉토리가 없다면 생성하게 된다.
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a HH:mm");
		System.out.println("3. sdf : " + sdf);
		// 출력 : 3. sdf : java.text.SimpleDateFormat@a76d63bb
		// 날짜를 포멧팅하는 클래스이다.
		
		System.out.println();
		
		File [] contents = temp.listFiles();  // (****)
		// C:/Temp에 있는 파일 및 디렉토리 리스트를 가지고 와서 배열로 만든다.
		
		System.out.println(" 날짜      시간         형태          크기      이름 ");
		System.out.println("---------------------------------------------------------");
		
		for ( File file : contents ) { // 파일타입 원소를 contents배열에서 1개씩 가지고 온다.
			
			System.out.print(sdf.format(new Date(file.lastModified())));
			// file.lastModified은 파일의 최종 수정 시각을 long타입의 (00:00:00 GMT, January 1, 1970)로 표시한다.
			
			if(file.isDirectory()) { // 뽑아낸 원소가 디렉토리이면...
				
				System.out.print("\t<DIR>\t\t\t" + file.getName());
				// 디렉토리는 주머니 역할을 할 뿐이지, 사이즈가 없다.
				
			} else { // 뽑이낸 원소가 파일이면...
				
				System.out.print("\t\t\t" + file.length() + "\t" + file.getName());
				
			}// if-else
			
			System.out.println();
			
		} // enhanced for
		
//		=========================================================
		
		// 출력 : 
		
//		 날짜      시간         형태          크기      이름 
//		 ---------------------------------------------------------
//		 2020-04-22 오후 15:39	<DIR>			2020
//		 2021-10-19 오전 00:11	<DIR>			AUtempR
//		 2022-04-04 오전 10:20	<DIR>			Dir
//		 2022-04-04 오전 10:20			0	file1.txt
//		 2022-04-04 오전 10:20			0	file2.txt
//		 2022-04-04 오전 10:20			0	file3.txt
//		 2022-04-01 오전 11:32			24	TTT.txt
//		 2022-04-01 오전 10:12			6	TTT2.txt
		
//		=========================================================
		
	} // main

} // end class

더보기

08. FileInputStream

package file;


import java.io.File;
import java.io.FileInputStream;

import lombok.Cleanup;

public class FileInputStreamExample {

	public static void main(String[] args) { 
		
		try {
			
			@Cleanup
			FileInputStream fis =
					// Path Separator ( 경로 구분자) - 운영체제마다 다르다.
					new FileInputStream("C:\\app\\workspace\\JSE\\project1\\src\\file\\FileInputStreamExample.java");
			// 해당 주소에 있는 자바 클래스에 있는 코드가 그대로 콘솔창에 출력된다.
			
			System.out.println("1. " + File.separator); // 1. \
			System.out.println("2. " + File.pathSeparator); // 2. ;
			
			int data; // 데이터를 바이트 기반으로 읽어 들인다.
			
			int [] datas;
			
			while( ( data = fis.read()) != -1 ) { // 탈출 조건식 : EOF
				System.out.write(data); // FileInputStream // System.out : PrintStream < InputStream ( 여기의 write 메소드 호출 )
			} // while
			
//			fis.close(); // 운영체제에 자원 반납
			
		}catch( Exception e) { 
			
			e.printStackTrace();
			
		} // try-catch
		
	} // main
	
} // end class

더보기

09. FileInputStream

package file;


import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;

import lombok.Cleanup;

public class FileInputStreamExample3 {

	public static void main(String[] args) { // String buffer 버전
		
		try {
			
			Charset cs = Charset.forName("UTF-8"); // Charset 생성
			
			@Cleanup
			FileInputStream fis =
					// Path Separator ( 경로 구분자) - 운영체제마다 다르다.
					new FileInputStream("C:\\app\\workspace\\JSE\\project1\\src\\file\\FileInputStreamExample.java");
			// 해당 주소에 있는 자바 클래스에 있는 코드가 그대로 콘솔창에 출력된다.
			
			InputStreamReader is = new InputStreamReader(fis, cs); // 일단 fis생성쪽에서는 불가능해서 한 단계 더 걸쳤어요ㅠㅠ
			
			int data; // 데이터를 바이트 기반으로 읽어 들인다.
			
			// 버퍼 생성
			StringBuffer sb = new StringBuffer();
			
			while( ( data = is.read()) != -1 ) { // 탈출 조건식 : EOF
				sb.append((char) data); 
			} // while
			
			String source = sb.toString();
			System.out.println(source);
			
		}catch( Exception e) { 
			
			e.printStackTrace();
			
		} // try-catch
		
	} // main
	
} // end class

더보기

10. FileOutputStream

package file;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import lombok.Cleanup;

public class FileOutputStreamExample {
	
	public static void main(String[] args) { // 파일 복사하기 ( 사진을 복사 ) 
		
		String originalFileName = "C:/Temp/wow.jpg"; // 복사할 대상
		String targetFileName = "C:/Temp/peakpx.jpg"; // 복사해서 생성할 대상
		
		try {
			
			@Cleanup FileInputStream fis = new FileInputStream(originalFileName); // For source file
			@Cleanup FileOutputStream fos = new FileOutputStream(targetFileName); // For target file
		
			int readByteNo;
		
			byte [] readByte = new byte [100]; // 바가지 생성
		
			while ( ( readByteNo = fis.read(readByte)) != -1 ) { // 바가지를 이용해서 한번에 100바이트를 읽는다.
			
				fos.write(readByte,0,readByteNo); 
				// 바가지에 읽은 바이트를 한번에 출력 버퍼에 넣는다.
				// 어디에서부터 어디까지 얼마나 읽은지 지정
			
			} // while
		
			fos.flush();
		
			System.out.println("복사가 잘 되었습니다.");
			
		} catch ( Exception e ) {
			e.printStackTrace();
		} // try - catch
		
	} // main

} // end class

더보기

11. FileReader

package file;

import java.io.FileReader;

import lombok.Cleanup;

public class FileReaderExample { // 문자 기반으로 읽어내자
	
	public static void main(String [] args) {
		
		try { 
			
			@Cleanup FileReader fr 
				= new FileReader("C:\\app\\workspace\\JSE\\project1\\src\\file\\FileInputStreamExample.java");
		
			int readCharNo;
		
			char [ ] cbuf = new char [100]; // 사이즈 100의 바가지 준비
		
			while( (readCharNo = fr.read(cbuf)) != -1 ) { 
			
				String data = new String(cbuf,0,readCharNo);
			
				System.out.print(data);
			
			} // while
			
		} catch ( Exception e) {
			e.printStackTrace();
		} // try - catch
		
	} // main

} // end class

더보기

12. FileWriter

package file;

import java.io.File;
import java.io.FileWriter;

import lombok.Cleanup;

public class FileWriterExample {
	
	public static void main (String[] args) {
		
		try {
			
			File file = new File("C:/Temp/file.txt");
			
			@Cleanup
			FileWriter fw = new FileWriter(file, true); // 파일타입의 파일이라는 객체에 추가한다는 의미이다. 
			
			fw.write("FileWriter는 한글로 된 " + "\r\n" );
			fw.write("문자열을 바로 출력할 수 있다. " + "\r\n");
			
			fw.flush();
			
		} catch ( Exception e ) {
			e.printStackTrace();
		} // try catch
		
	} // main

} // end class

더보기

13. format

package file;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class TTT { // 날짜 포멧팅하기 (*****)
	
	public static void main (String [] args) { 
		
		// 1. 현재의 날짜와 시간 정보를 가지고 온다. ( 구버전 )
		Date now = new Date();
		System.out.println("1. now ( 구버전 ) : " + now);
		// 출력 : 1. now ( 구버전 ) : Mon Apr 04 10:34:08 KST 2022
		
//		===============================================================
		
		// 2. 우리나라에 익숙한 날짜 및 시간형식으로 바꾸기 : 2022/04/04 - 10:35:54
		
		String pattern = "yyyy/MM/dd a HH:mm:ss"; // 몇 자리로 표시할지를 규정하고 있다.
		// ss.SSS로 작성하게 된다면, 밀리세컨드 단위로 포멧팅되게 된다.
		
		DateFormat df = new SimpleDateFormat(pattern); // 다형성 1
		// DateFormat은 추상 클래스이기에 바로 객체를 생성할 수 없어서 자식 클래스 중 SimpleDateFormat를 활용한다.
		
//		public SimpleDateFormat(String pattern)
		// String pattern은 포켓팅한 날짜의 형식을 넣어야 한다.
		
		System.out.println( "2. df.format(now) [ 우리나라 버전 ] : " + df.format(now) ); // 다형성 2
//		출력 : 2. df.format(now) [ 우리나라 버전 ] : 2022/04/04 오전 11:06:39
		
	} // main

} // end class
728x90
댓글
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
최근에 올라온 글
Total
Today
Yesterday
공지사항