[Java] 2020.12.01. day_28 File class, File 조작, File Stream

2020. 12. 1. 17:10Web_Back-end/Java SE

○ 입력근원이 HDD에 존재하는 File일 때

- 입력근원이 HDD에 존재하는 File일 때
8bit Stream FileInputStream - 모든 파일을 읽어들일 수 있다(파일복사)
16bit Stream FileReader - 독자 포멧을 사용하지 않는 텍스트파일을 읽어들일 때

○ File

- File 클래스
- java.io 패키지에서 제공
파일의 정보를 얻을 때 사용
파일을 삭제하거나, 이름을 변경할 수 있다
사용법
1. 생성 File file = new File("경로"); //경로 : 절대경로
2. method 호출 파일이 존재 : file.exists() //boolean으로 반환
파일의 크기 : file.length() //byte단위로 반환
파일의 절대경로 : file.getAbsolutePath()
C:\dev\temp\java_read.txt
c:\dev\temp\java_read.txt
//대소문자 모두 가능
파일의 규범경로 : OS에서 파일에 접근할 수 있는 단하나의 유일한 경로
file.getCannonicalPath()
파일 경로 : file.getPath()
파일 디렉토리 : file.getParent()
파일명 : file.getName()
파일인지? : file.isFile()
폴더인지? : file.isDirectory() //폴더 : 파일을 저장한 파일
숨김파일? : file.isHidden()
실행가능 : file.canExecute()
읽기가능 : file.canRead()
쓰기가능 : file.canWrite()
조작
폴더생성
(파일은 생성할 수 없다 :
출력스트림 사용)
1. 파일클래스 생성
File file = new File("생성할 폴더명");
File file = new File("c:/dev/test");

2.디렉토리생성
file.mkdir(); //하위폴더가 없는 하나의 폴더를 생성
file.mkdirs(); //여러 폴더를 동시 생성
파일삭제 1. 삭제할 파일경로를 가진 File 클래스를 생성
File file = new File("삭제할파일의 경로");

2. 파일 삭제
file.delete();
파일명 변경 file.renameTo(변경할이름을 가진 파일객체)
   

◎ File Stream 사용

  File Stream 사용   
파일
- HDD 에 존재
FileInputStream | FileReader
JVM
- memory에 존재

java_read.txt


try{
  // 1. 읽어들일 파일에 스트림을 연결
  FileInputStream fis = new FileInputStream(new          File("c:/dev/temp/java_read.txt");

  // 2. 파일의 내용을 읽기
  fis.read(); //read() : 가장처음 1byte를 읽어들인다
}catch(FileNotFoundException fnfe){
  fnfe.printStackTrace();
}catch(IOException ie){
  ie.printStackTrace();
}
 
  read() : 가장처음 1byte를 읽어들인다
읽어들인 내용이 없다면 -1 반환
 

◎ File Reader 사용

  File Reader 사용   
파일
- HDD 에 존재
FileReader | ButterdReader

FileReader : HDD에 존재하는 파일과 연결
BufferdReader : 스트림으로 연결된 곳에서 줄 단위로 읽는 일
JVM
- memory에 존재

java_read.txt


try{
  // 1. 읽어들일 파일에 스트림을 연결
  FileReader fr = new FileReader(new           File("c:/dev/temp/java_read.txt");

 //2. 줄 단위로 읽어들이기 위한 스트림 연결
 BufferedReader br = new BufferedReader( fr );
 
 //3. 줄단위 (\n)로 읽기
 String str = br.readLine()
 //읽어들인 내용이 없다면 null이 나온다

 //4. 모든 줄 읽기
 String str = "";
 while( (str=br.readLine()) != null ){

 }
 

◎ 읽어들인 파일의 한글 Charset과 Java의 한글 Charset이 다를 때 처리

  읽어들인 파일의 한글 Charset과
Java의 한글 Charset이 다를 때 처리
 
파일
- HDD 에 존재
FileInputStream | BufferedReader |InputStreamReader

FileInputStream: HDD에 존재하는 파일과 연결
BufferedReader : 스트림으로 연결된 곳에서 줄 단위로 읽는 일

 + 

InputStreamReader : 
- 8bit, 16bit stream연결
- Charset을 변경하는 일 (encoding)
JVM
- memory에 존재

java_read.txt


try{
  // 1. 읽어들일 파일에 스트림을 연결
  FileInputStream fis = new FileInputStream(new   File("c:/dev/temp/java_read.txt");

 //2. 8bit, 16bit stream을 연결하면서,
 //Charset을 Encoding하는 기능 스트림을 사용
 //Encoding의 Charset은 원본파일의 Charset으로 설정
 InpuStreamReader isr = new InputStreamReader(fis"Charset");
 //Charset : ex) MS949, UTF-8 ,,,

 //3. 줄 단위로 읽어들이기 위한 스트림 연결
 BufferedReader br = new BufferedReader( isr );
 
 //4. 줄단위 (\n)로 읽기
 String str = br.readLine() 
 //읽어들인 내용이 없다면 null이 나온다

 //5. 모든 줄 읽기
 String str = "";
 while( (str=br.readLine()) != null ){

 }