본문 바로가기
수업시간 JAVA/이론

복습 파일 output친구들

by SEOKIHOUSE 2023. 5. 2.

1)OutputStream

package practice0502Output;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class OutputStreamTest {

	public static void main(String[] args) {
		InputStream is = System.in;
		OutputStream out = System.out;
		System.out.print("데이터 입력");
		int input;
		try {
			//입력스트림 객체의 read메소드로 1바이트씩 읽어 들인다
			input = is.read();
			System.out.println("실제 입력된 데이터: " +input);
			//출력스트림 객체의 write메소드로 1바이트씩 문자로 캐스팅해서 출력
			System.out.print("출력데이터 :");
			out.write((char)input);
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}


 
2)OutputStreamWriter -2바이트 처리한대
package practice0502Output;

import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class OutputWriterTest {

	public static void main(String[] args) {
		// 10개의 문자를 기억할 수 있는 배열 선언
		char[] arr = new char[10];
		// 키보드로 입력스트림 리더 객체에 할당하고, 콘솔을 출력 스트림 라이터 객체에 할당
		InputStreamReader isr = new InputStreamReader(System.in);
		OutputStreamWriter osw = new OutputStreamWriter(System.out);
		System.out.print("데이터 입력");

		try {
			// 10개의 문자를 읽어 배열에 저장
			int input = isr.read(arr);
			System.out.print("실제 입력된 글자: " + input);
			// 배열 내의 10개 문자를 출력
			osw.write(arr);
			osw.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}	

}

3)FileOutputStream
package practice0502Output;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {

	public static void main(String[] args) throws FileNotFoundException {
		FileInputStream fis ;
		try {
			fis = new FileInputStream("sample.txt");
			FileOutputStream fos = new FileOutputStream("b.txt");
			int inputData = 0;
			while ((inputData = fis.read()) != -1) {
				fos.write(inputData);
			}
			fos.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}​


4)FileWriter

package practice0502Output;

import java.io.FileReader;
import java.io.FileWriter;

public class FileWriterTest {

	public static void main(String[] args) {
		try {
			FileReader fr = new FileReader("sample.txt");
			FileWriter fw = new FileWriter("b.txt",true);
			
			int inputData = 0;
			while((inputData = fr.read()) != -1) {
				//2바이트씩 읽고 기록하되 기존 파일의 데이터 뒤에 덧붙여 기록
				fw.write(inputData);
			}
			fr.close();
			fw.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}

}

5)BufferedOutputStream

package practice0502Output;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;

public class BufferedOutputStreamTest {

	public static void main(String[] args) {
		// 파일을 인수로 FileOutputStream 객체를 생성하고
		// 그 객체를 인수로 BufferedOutputStream 객체를 생성한다
		try {
			FileOutputStream fos = new FileOutputStream("s.txt");
			BufferedOutputStream bos = new BufferedOutputStream(fos);
			
			//a~z 문자를 기록한다
			//실제 파일에 기록되는 것이 아니라 버퍼에 기록된다
			for(int i ='a'; i<='z'; i++) {
				bos.write(i);
			}
			//버퍼에 기록된 데이터를 실제 파일에 기록한다
			bos.flush(); //버퍼 비우는거
			
			fos.close();
			bos.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}


6)BufferedWriter

package practice0502Output;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.StringTokenizer;

public class BufferedWriterTest {
	public static void main(String[] args) {
		try {
			FileReader fr = new FileReader("sample.txt");
			BufferedReader br = new BufferedReader(fr);
			FileWriter fw = new FileWriter("out.txt");
			BufferedWriter bw = new BufferedWriter(fw);

			// 버퍼에서 파일을 라인단위로 읽는다.
			String line = br.readLine();
			while (line != null) {
				// 읽은 라인을 공백을 기준으로 토큰으로 구분하는 객체를 생성한다. (공백이 기준이므로 단어 단위가 토큰이 된다)
				StringTokenizer st = new StringTokenizer(line, " ");
				// line : 우리는 자바 언어를 학습합니다.
				// st : [우리는, 자바, 언어를, 학습합니다.]
				while (st.hasMoreTokens()) {
					// 읽을 라인 내에 '자바'라는 단어가 있으면 출력 버퍼에 기록하고, 버퍼의 내용을 파일에 기록한다.
					if (st.nextToken().equals("자바")) {
						bw.write(line);
						bw.flush();
						bw.newLine();
						break;
					}
				}
				line = br.readLine(); // line 값을 바꿔줘야 해서 반복문 안에 한번 더 들어간다.
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


7)DataOutputStream

package practice0502Output;

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

//데이터를 입출력할 때 int, float와 같은 자바의 기본 데이터형을 유지하면서 입출력 할 수 있다
//파일에 기록될 때는 이진 데이터로 기록되기 때문에 파일을 열어봐도 알 수 없는 문자가
//표시되나, 기본형으로 데이터를 다룰 수 있다는 점이 특징
//네트워크 프로그래밍에서 사용된다
public class DataIoTest {
	public static void main(String[] args) {
		File file = new File("temp.txt");
		try {
			FileOutputStream fos = new FileOutputStream(file);
			DataOutputStream dos = new DataOutputStream(fos);
			
			//데이터의 기본형을 유지하면서 파일에 데이터가 기록된다
			dos.writeBoolean(true);
			dos.writeChar('j');
			dos.writeInt(1234);
			dos.writeFloat(3.14F);
			dos.writeDouble(123.424);
			dos.writeUTF("java");
			
			//temp.txt파일을 입력파일로 갖는 dis객체를 생성
			FileInputStream fis = new FileInputStream(file);
			DataInputStream dis = new DataInputStream(fis);
			
			//데이터의 기본형을 유지하면서 파일에서 데이터를 읽어 출력
			System.out.println(dis.readBoolean());
			System.out.println(dis.readChar());
			System.out.println(dis.readInt());
			System.out.println(dis.readFloat());
			System.out.println(dis.readDouble());
			System.out.println(dis.readUTF());
			
		}catch(Exception e ) {
			e.printStackTrace();
		}
	}
}

 

 


8)ObjectOutputStream

package practice0502Output;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class PersonInfo implements Serializable {
	String name;
	String city;
	int age;

	public PersonInfo(String name, String city, int age) {
		this.name = name;
		this.city = city;
		this.age = age;
	}

	public String toString() {
		return name + " : " + city + " : " + age;
	}
}

public class SerialTest {

	public static void main(String[] args) {
		try {
			// 직렬화된 객체를 2진수로 기록할 파일을 지정하여
			// 객체를 기록할 수 있는 ObjectOutputStream 객체를 생성한다
			FileOutputStream fos = new FileOutputStream("PersonInfo.txt");
			ObjectOutputStream oos = new ObjectOutputStream(fos);

			// 직렬화된 객체 2개 생성
			PersonInfo p1 = new PersonInfo("짱구","LA", 52);
			PersonInfo p2 = new PersonInfo("흰둥이","흰둥이집", 10);
			
			//직렬화된 객체를 파일에 2진수로 기록한다
			oos.writeObject(p1);
			oos.writeObject(p2);
			oos.close();
			System.out.println("객체가 파일에 직렬화되어 기록되었다");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

ObjectInputStream

package practice0502Output;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class DeSerialTest {
	public static void main(String[] args) {
		try {
			//직렬화된 객체의 2진 데이터가 기록된 파일을 저장하여
			//객체를 읽을 수 있는 ObjectInPutStream 객체를 생성
			FileInputStream fis = new FileInputStream("PersonInfo.txt");
			ObjectInputStream in = new ObjectInputStream(fis);
			
			//readObject메소드로 직렬화된 객체의
			//2진 데이터를 읽어서 객체 타입으로 캐스팅
			PersonInfo p1 = (PersonInfo)in.readObject();
			PersonInfo p2 = (PersonInfo)in.readObject();
			System.out.println(p1);
			System.out.println(p2);
			in.close();
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
}

 

 

 

'수업시간 JAVA > 이론' 카테고리의 다른 글

Thread/Process 개념  (0) 2023.05.08
InetAddress/URL/ServerSocket  (0) 2023.05.02
복습 파일 Input친구들  (0) 2023.05.02
Map  (0) 2023.04.26
제네릭  (0) 2023.04.18