Coding/언어-JAVA

JAVA 파일입출력(File I/O) #Day9

꿀딴지- 2023. 8. 17. 14:04

스트림(Stream) : 데이터 입출력

데이터 입출력 채널(스트림)을 열어야 읽고쓰기가 가능해짐.

스트림은 단방향으로만 데이터를 전송할 수 있기 때문에 입력과 출력 각각의 stream이 필요

예외처리 반드시 필요(ex. 파일 입출력, 네트워크, 스레드)

 

파일 입출력 :

  • 바이트 스트림(1byte) : 문자, 이미지, 영상, 오디오 등 멀티미디어 가능하며 이진형태.
    • FileInputStream / FileOutputStream
    • BufferedInputStream / BufferedOutputStream
  • 문자 스트림(2byte) : 문자만 가능, 문자열의 코드값이 이진데이터로 저장됨
    • FileReader(유니코드로 변환) / FileWriter(인코딩으로 변환)
    • BufferedReader / BufferedWriter
    → Buffered~는 모아서 한번에 스트림을 보내기 때문에 입출력 속도가 개선됨(왠만하면 버퍼로 사용하기)

프로세스 입출력 : PipedInputStream / PipedOutputStream

String source = "./test.txt";
String target = "./test123.txt";
try {
  FileReader fileReader = new FileReader(source);
  FileWriter fileWriter = new FileWriter(target);

  char[] data = new char[100];

  while(true){
      int num = fileReader.read(data);
      if(num==-1) break;
      fileWriter.write(data);
  }
	fileReader.close();
  fileWriter.close();
} catch (IOException e) {
  System.out.println(e.getMessage());
}
try (BufferedReader br = new BufferedReader(new FileReader("goodjob.txt"))) {
    String line;
    while((line = br.readLine()) != null) {
        System.out.println(line);
    }
}catch (IOException e) {
    throw new RuntimeException(e);
}

 


파일 & 폴더 조회

파일

  • .createNewFile() :파일생성(존재하면 생성하지 않음)
String fileName = "test.txt";
File file = new File(fileName);
try{
	file.createNewFile();
	if(file.exists()){ 
		System.out.println("이름 : "+file.getName());
		System.out.println("절대경로 : "+file.getAbsolutePath());
		System.out.println("파일크기(Byte) : "+file.length());
}catch(IOException e){
	thorw new RuntimeException(e);
}

폴더(파일 클래스)

  • File.seperator : OS환경에 맞는 구분자 가져옴(ex. “A”+File.seperator +”B”)
  • .mkdir() : 폴더 생성, 상위폴더 없으면 생성 실패
  • .mkdirs() : 상위폴더까지 생성
String folderNmae = "A";
File folder = new file(folderName);
folder.mkdir();

folderName = "A/B/C";
folder = new file(folderName);
folder.mkdir(); //생성 실패, 상위폴더가 있어야 현재 폴더 생성가능
folder.mkdirs(); //상위폴더까지 전부 생성해줌.
  • .listFiles() : 현재 위치의 파일, 폴더 전부 조회
  • .isFile(), isDirectory()
String folder = "."; //현재 위치
FIle filesAndFolders = new File(folder); 
for(File file : filesAndFolders.listFiles()){
	if(file.isFile()){
		System.out.println("파일 " +file.getName());
	}else if(file.isDirectory()){

	}
}

파일/폴더 삭제

  • .delete() : 현재 파일/폴더만 삭제, 하위폴더가 있으면 삭제 실패
File file = new File("test.txt"); // 지울 파일 이름
file.delete(); // 삭제성공하면 true

File folder = new File("A");
folder.delete(); //하위 폴더가 있으면 삭제 실패함

File folder = new File("A/B/C");
folder.delete(); //C 폴더만 삭제 됨

// 하위 폴더까지 삭제하려면 메서드로 구현
deleteFolder(folder);
public static boolean deleteFolder(File folder){
	if(folder.isDirecotry(){
		for(File file : folder.listFiles()){
			deleteFolder(file);
		}
	}
	return folder.delete();
}

 

'Coding > 언어-JAVA' 카테고리의 다른 글

JAVA 메서드 활용  (0) 2023.08.17
JAVA 스레드(Thread) #Day10  (0) 2023.08.17
JAVA 사용자 입출력(Scanner, Printf)  (0) 2023.08.17
JAVA 스트림(Stream) #Day8  (0) 2023.08.16
JAVA 익명클래스, 람다 #Day8  (0) 2023.08.16