Java IO 패키지 정리 1
자바 IO 패키지 예제 - git
자바 스레드 예제 - git
FileInputStream 예제 1
package sec02.exam01.inputStream_read;
import java.io.FileInputStream;
import java.io.InputStream;
public class ReadExam {
public static void main(String[] args) throws Exception{
/*
바이너리 기반 입력
FileInputStream 객체의 read() 메소드 이용해서 파일의 문자 읽기
*/
//while문
int whileCount = 0;
//인풋 스트림 구하기
InputStream is = new FileInputStream("/Users/k/Documents/workspace/chat/src/test.txt");
int readByte;
//다읽을때 까지 while 문 돌기 - 7번 돈다.
while(true) {
//읽은 문자값 (아스키 코드)97 98 99 ...
//입력 스트림으로 부터 1바이트 읽고 읽은 바이트를 리턴한다.
/*
read 메소드
입력 스트림으로 부터 1바이트 읽고 -> 4바이트 int 타입으로 리턴
4바이트중 끝의 1바이트에만 데이터가 들어가 있다.
*/
readByte = is.read();
//System.out.println(readByte);
//읽은값이 없으면
if(readByte == -1) {
break;
}else {
whileCount += 1;
}
//출력
//abcdefg
System.out.print((char)readByte);
}
System.out.print("읽은 개수 : " + whileCount);
//읽은 개수 : 8
is.close();
}
}
FileInputStream 예제 2
package sec02.exam01.inputStream_read;
import java.io.FileInputStream;
import java.io.InputStream;
public class ReadExam2 {
public static void main(String[] args) throws Exception{
/*
FileInputStream 객체의 read() 메소드 이용해서 파일의 문자 읽기
new byte[3]; 객체를 이용해서 인풋스트림에서 여러개의 문자를 읽는다.
is.read(바이트수 객체);
*/
//while문
int whileCount = 0;
//인풋 스트림 구하기
InputStream is = new FileInputStream("/Users/k/Documents/workspace/chat/src/test.txt");
System.out.println("is : " + is);
//is : java.io.FileInputStream@2f7c7260
int readByteNO;
//인풋 스트림에서 읽을 바이트 수 (3글자씩 읽게 한다.)
byte[] readBytes = new byte[3];
//전체 문자열 저장 변수
String data = "";
while(true) {
//인풋 스트림에서 readBytes 개수 만큼 읽기
//읽은 바이트 수! 를 리턴한다.
readByteNO = is.read(readBytes);
//읽은게 없으면 -1
if(readByteNO == -1) {
break;
}else {
whileCount += 1;
}
//readBytes 배열의 0 인덱스 위치부터 readCharNo length만큼 String객체로 생성
data += new String(readBytes, 0, readByteNO);
}
System.out.println(data);
System.out.print("읽은 개수 : " + whileCount);
//읽은 개수 : 3
//인풋 스트림을 마지막에는 닫아준다.
is.close();
}
}
FileInputStream 예제 3
package sec02.exam01.inputStream_read;
import java.io.FileInputStream;
import java.io.InputStream;
public class ReadExam3 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
InputStream is = new FileInputStream("/Users/k/Documents/workspace/chat/src/test.txt");
//총 4바이트만 읽겠다.
byte[] readBytes = new byte[4];
//위에서 읽은 바이트 중 2번째 index 부터 시작해서 1번째 문자값만 읽겠다.
//나머지는 0
is.read(readBytes, 2, 1);
for(int i = 0; i < readBytes.length; i++) {
System.out.print(readBytes[i]);
//0 0 97 0
}
is.close();
}
}
FileOutputStream 예제 1
package sec02.exam01.outputSteam_write;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Write1 {
public static void main(String[] args) throws Exception {
/*
바이너리 기반 출력
FileOutputStream 객체의 write() 메소드 이용해서 파일에 문자 쓰기
*/
OutputStream os = new FileOutputStream("/Users/k/Documents/workspace/chat/src/test2.txt");
//ABC 문자가 byte 타입 배열에 들어가 있다.
byte[] data = "ABC".getBytes();
//byte 배열의 개수만큼 돌면서 파일에 작성
for(int i = 0 ; i < data.length; i++) {
//출력 스트립으로 1바이트를 보낸다.
os.write(data[i]);
}
//버퍼에 잔류하는 모든 바이트를 출력한다.
os.flush();
//사용한 시스템 자원을 반납하고 출력 스트림을 닫는다.
os.close();
}
}
FileOutputStream 예제 2
package sec02.exam01.outputSteam_write;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Write2 {
public static void main(String[] args) throws Exception {
/*
FileOutputStream 객체의 write() 메소드 이용해서 파일에 문자 쓰기
*/
OutputStream os = new FileOutputStream("/Users/k/Documents/workspace/chat/src/test3.txt");
//ABC 문자가 byte 타입 배열에 들어가 있다.
byte[] data = "ABC".getBytes();
//파일에 작성
//바이트 배열의 모든 바이트를 출력 스트림으로 보낸다.
os.write(data);
os.flush();
os.close();
}
}
FileOutputStream 예제 3
package sec02.exam01.outputSteam_write;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class Write3 {
public static void main(String[] args) throws Exception {
/*
FileOutputStream 객체의 write() 메소드 이용해서 파일에 문자 쓰기
*/
OutputStream os = new FileOutputStream("/Users/k/Documents/workspace/chat/src/test4.txt");
//ABC 문자가 byte 타입 배열에 들어가 있다.
byte[] data = "ABC".getBytes();
//파일에 작성
os.write(data , 1, 2);
//BC 만 기록된다.
os.flush();
os.close();
}
}
FileReader 예제 1
package sec02.exam02.reader_read;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
public class Reader1 {
public static void main(String[] args) throws Exception {
// 문자기반 입력
// FileReader객체의 read() 메소드 이용해서 파일의 문자 읽기
Reader reader = new FileReader("/Users/k/Documents/workspace/chat/src/test.txt");
//4바이트 int
int readData;
while(true) {
//FileReader 객체에서 파일을 읽고 반환값으로 아스키 코드 값을 리턴한다.
//입력 스트림으로 부터 한개의 문자를 읽고 리턴한다.
//한개의 문자(2바이트)를 읽고 4바이트 int 타입으로 리턴한다.
readData = reader.read();
//읽은 문자가 없으면 -1 리턴
if(readData == -1) {break;}
System.out.print((char)readData);
//abcdefg
}
reader.close();
}
}
FileReader 예제 2
package sec02.exam02.reader_read;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.Reader;
public class Reader2 {
public static void main(String[] args) throws Exception {
// FileReader객체의 read() 메소드 이용해서 파일의 문자 읽기
Reader reader = new FileReader("/Users/k/Documents/workspace/chat/src/test.txt");
int readCharNo;
//2바이트 char 배열 생성
char[] charBuf = new char[2];
String data = "";
while(true) {
//FileReader 객체에서 파일을 읽고 반환값으로 아스키 코드 값을 리턴한다.
//입력 스트림으로 부터 읽은 문자들을 매개값으로
//주어진 문자 배열 cbuf[off] 부터 len 개 까지 저장한다.
//실제로 읽은 문자 수인 len 개를 리턴한다.
readCharNo = reader.read(charBuf);
//읽은 문자가 없으면 -1 리턴
if(readCharNo == -1) {break;}
//charBuf 배열의 0 인덱스 위치부터 readCharNo length만큼 String객체로 생성
data += new String(charBuf, 0, readCharNo);
}
System.out.print(data);
//abcdefg
reader.close();
}
}
FileReader 예제 3
package sec02.exam02.reader_read;
import java.io.FileReader;
import java.io.Reader;
public class Reader3 {
public static void main(String[] args) throws Exception {
// FileReader객체의 read() 메소드 이용해서 파일의 문자 읽기
Reader reader = new FileReader("/Users/k/Documents/workspace/chat/src/test.txt");
int readCharNo;
//4바이트 char 배열 생성
char[] charBuf = new char[4];
//FileReader 객체에서 읽은 문자열 중에서 4바이트 char 배열중 Index 1번 부터 2번째 까지만 읽기
readCharNo = reader.read(charBuf, 1, 2);
for(int i = 0 ; i < charBuf.length; i++) {
System.out.println(charBuf[i]);
}
/*
a
b
*/
reader.close();
}
}
FileWriter 예제 1
package sec02.exam02.writer_write;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Writer1 {
public static void main(String[] args) throws Exception {
//파일이 작성될 위치
Writer writer = new FileWriter("/Users/k/Documents/workspace/chat/src/test5.txt");
char[] data = "aaabbbbfccc".toCharArray();
//aaabbbbfccc 문자열 개수 만큼 돈다.
for(int i =0 ; i < data.length; i++) {
System.out.print(data[i]);
//aaabbbbfccc
//파일에 쓰기
writer.write(data[i]);
}
writer.flush();
writer.close();
}
}
FileWriter 예제 2
package sec02.exam02.writer_write;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Writer2 {
public static void main(String[] args) throws Exception {
//파일이 작성될 위치
Writer writer = new FileWriter("/Users/k/Documents/workspace/chat/src/test6.txt");
char[] data = "aaabbbbfccc".toCharArray();
System.out.print(data);
//aaabbbbfccc
//파일에 쓰기
writer.write(data);
writer.flush();
writer.close();
}
}
FileWriter 예제 3
package sec02.exam02.writer_write;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Writer3 {
public static void main(String[] args) throws Exception {
//파일이 작성될 위치
Writer writer = new FileWriter("/Users/k/Documents/workspace/chat/src/test7.txt");
char[] data = "aaabbbbfccc".toCharArray();
System.out.print(data);
//aaabbbbfccc
//파일에 쓰기
writer.write(data,1,2); //aa
writer.flush();
writer.close();
}
}
FileWriter 예제 4
package sec02.exam02.writer_write;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Writer4 {
public static void main(String[] args) throws Exception {
//파일이 작성될 위치
Writer writer = new FileWriter("/Users/k/Documents/workspace/chat/src/test7.txt");
//char[] data = "aaabbbbfccc".toCharArray();
String data = "fghjkl";
System.out.print(data);
//fghjkl
//파일에 쓰기
writer.write(data,3,2); //jk
writer.flush();
writer.close();
}
}
File 예제
package sec04.exam01.file;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileExample {
public static void main(String[] args) throws Exception {
/*
File 클래스
IO 패키지에서 제공하는 File 클래스는 파일 크기, 파일 속성, 파일 이름 등의
정보를 얻어내는 기능과 파일 생성 및 삭제 기능을 제공한다.
! 파일의 데이터를 읽고 쓰는 기능은 제공하지 않는다!
*/
// 파일 객체 생성
File dir = new File("/Users/k/Documents/workspace/chat/src/test");
File file1 = new File("/Users/k/Documents/workspace/chat/src/file1.txt");
File file2 = new File("/Users/k/Documents/workspace/chat/src/file2.txt");
File file3 = new File(new URI("file:///Users/k/Documents/workspace/chat/src/file3.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();}
//출력할 디렉토리 경로
File temp = new File("/Users/k/Documents/workspace/chat/src");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd a HH:mm");
//파일객체 경로에 존재하는 파일 및 디렉토리 출력
File[] contents = temp.listFiles();
System.out.println("날짜 시간 형태 크기 이름");
System.out.println("-------------------------------------------------------------------");
for(File file : contents) {
System.out.println(sdf.format(new Date(file.lastModified())));
//디렉토리면
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());
}
System.out.println();
}
}
}
FileInputStream 예제
package sec04.exam01.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class FileInputStreamExample {
public static void main(String[] args){
//파일로 부터 바이트 단위로 읽어 들일때 사용
//첫번째 방법
FileInputStream fis;
try {
fis = new FileInputStream("/Users/k/Documents/workspace/chat/src/test.txt");
int data;
while( (data = fis.read()) != -1 ) {
System.out.write(data);
//abcdefg
}
//파일 닫기
fis.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
FileOutputStream 예제
package sec04.exam01.file;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
public class FileOutputStreamExample {
public static void main(String[] args) throws Exception {
String originFileName = "/Users/k/Documents/workspace/chat/src/test/house.jpg";
String targetFileName = "/Users/k/Documents/workspace/chat/src/home.jpg";
//파일로 부터 바이트 단위로 읽어 들일때 사용
//두번째 방법
//읽을 파일 객체 준비
FileInputStream fis = new FileInputStream(originFileName);
//프로그램으로 부터 바이트 단위로 파일에 쓸때 사용
//쓸 파일 객체 준비
FileOutputStream fos = new FileOutputStream(targetFileName);
int readByteNo;
//읽을 바이트 수
byte[] readBytes = new byte[100];
//위의 바이트 수 만큼 읽는다.
//readByteNo = fis.read(readBytes);
//위의 바이트 수 만큼 읽는다.
//읽은 값이 있으면 파일을 쓴다.
while((readByteNo = fis.read(readBytes)) != -1) {
System.out.println("readByteNo : " + readByteNo);
//readByteNo : 100 ....
//readByteNo : 100 ....
fos.write(readBytes , 0 , readByteNo);
}
//파일 객체 닫기
fos.flush();
fos.close();
fis.close();
System.out.println("복사 성공");
}
}
FileReader 예제
package sec04.exam01.file;
import java.io.FileReader;
public class FileReaderExample {
public static void main(String[] args) throws Exception {
//텍스트 파일로부터 데이터를 읽어 들일 때 사용
//문자 단위로 읽기 때문에 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 읽을 수 없다.
FileReader fr = new FileReader("/Users/k/Documents/workspace/chat/src/test.txt");
int readCharNo;
char [] cbuf = new char[100];
while((readCharNo = fr.read(cbuf)) != -1) {
String data = new String(cbuf , 0, readCharNo);
System.out.print(data);
//abcdefg
}
fr.close();
}
}
FileWriter 예제
package sec04.exam01.file;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterExample {
public static void main(String[] args) throws Exception {
//프로그램으로 부터 텍스트 파일을 쓸 때 사용
//문자 단위로 쓰기 때문에 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 쓸 수 없다.
File file = new File("/Users/k/Documents/workspace/chat/src/test_KOR.txt");
FileWriter fw = new FileWriter(file,true);
fw.write("FileWriter는 한글로된 " + "\r\n");
fw.write("문자열을 바로 출력할 수 있다. " + "\r\n");
fw.flush();
fw.close();
System.out.println("파일에 저장완료");
}
}
참고
https://blog.naver.com/plateauh/222085091595
https://estindev.tistory.com/entry/%EC%9E%90%EB%B0%94-IO-%EC%A0%95%EB%A6%AC
https://willbfine.tistory.com/413?category=835334
'웹개발 > Java' 카테고리의 다른 글
자바의 변수와 메서드는 메모리에 어떻게 표시될까 2 (0) | 2022.10.06 |
---|---|
자바의 변수와 메서드는 메모리에 어떻게 표시될까 1 (1) | 2022.10.05 |
기계어부터 객체지향에 이르기까지 정리 (0) | 2022.10.04 |
Java IO 패키지 정리 3 - socket 통신 (0) | 2021.03.17 |
Java IO 패키지 정리 2 - 보조스트림 (0) | 2021.03.17 |