자바 메모장 파일 생성, 읽기, 쓰기, 열기

Web Development assistant·2022년 1월 17일
0

# java

목록 보기
7/17
package Test;

import java.awt.Desktop;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MakeTxt {
	public static void main(String[] args) throws IOException {
		//절대경로
		String path = "c:\\upload";
		//업로드할 디렉토리
		File uploadDir = new File(path, getPath());
		
		//경로가 존재하지 않을 경우 생성
		if(uploadDir.exists() == false) {
			uploadDir.mkdirs();
		}
		
		try {
			//파일 객체 생성
			File uploadFile = new File(uploadDir, "testTxt.txt");
			
			//실제 파일을 설정한 디렉토리에 생성
			FileOutputStream fos = new FileOutputStream(uploadFile);
			
			//입력된 값을 담을 변수 생성
			int write = 0;
			System.out.println("글자를 입력해 주세요 : 종료(A)입력");
			
			//입력된 값이 대문자 A(65)라면 종료
			while((write = System.in.read()) !=65) {
				//콘솔에 값을 입력하면 실제 텍스트파일에 입력이 된다.
				fos.write(write);
			}
			//생성종료
			fos.close();
			
			System.out.println("생성하신 파일을 읽겠습니다......\n\n\n\n");
			
			//업로드한 파일을 읽는다.
			FileInputStream fis = new FileInputStream(uploadFile);
			
			//읽어온 파일의 버퍼사이즈를 가져온다.
			int bufSize = fis.available();
			
			//가져온 버퍼 사이즈를 배열로 생성
			byte[] buf =new byte[bufSize];
			
			//버퍼 배열을 읽는다.
			fis.read(buf);  //sysout결과 000... 버퍼사이즈만큼 '0'을 리턴해준다.
			System.out.println("====================================");
			
			System.out.println(new String(buf)); // @@@이부분 이해가 안감.
			System.out.println("====================================");
			
			//파일 읽기 종료
			fis.close();
			
			//메모장 파일을 열어 확인 시켜준다.
			Desktop.getDesktop().edit(uploadFile);
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	//날짜별로 경로를 생성
	public static String getPath() {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
		Date date = new Date();
        //File.separator ="os환경에 맞게 파일경로 분활을 변경해준다. ex) 리눅스 '/' , 윈도우 '\'
		return sdf.format(date).replace("/", File.separator);
	}
}

@@@ 이부분 이해 안감@@@
fis.read(buf); 을 사용해서 버퍼를 읽었다면, 내 생각에는 읽은 값을 저장하여 사용해야 하는데
뜬금없이 new String(buf)로 아스키코드를 문자열화 시킨다.
그렇다면 fis.read(buf);가 필요없나? 그건 또 아니다.
fis.read(buf);가 없으니 값을 읽어오질 못 한다.
다른건 완전 이해하였다만 저부분은 이해가 안간다...

0개의 댓글