yoni
[20][IO] IO(입출력), File 클래스 다루기, 파일 이동, 디렉토리 조작, 파일 목록 본문
[20][IO] IO(입출력), File 클래스 다루기, 파일 이동, 디렉토리 조작, 파일 목록
yoni-1117 2018. 12. 2. 17:15[01] IO(Input Output) Stream
- 프로그램이 가지고 있는 또는 가지고 있지 않은 데이터를 외부(다른 프로그램)로
보내거나 가져오는 동작을 말합니다.
- Program에서 출력 ---------------> 모니터, 디스크 장치, 네트워크, USB, Bluetooth
출력 스트림 System File Socket File Socket
- 키보드, 디스크 장치, 네트워크, USB, Bluetooth ---------------> Program
입력 File Socket File Socket 입력 스트림
- 입출력 Stream은 FIFO(First In First Out, 지하철 표를내고 들어가는
출입구와 비슷한 구조입니다.(Queue 구조)
- 데이터 송수신시 네트워크는 1KB, 4 KB등 데이터를 모아서 전송합니다.
그 이유는 전송되는 데이터에대한 메타(구조) 데이터도 전송되기때문에 효율이 낮은 경우
5바이트 전송에 메타데이터는 50 바이트가 전송될 수도 있습니다.
- 스트림은 단방향 구조입니다. 따라서 오로지 출발지와 목적지를 지정하면
한곳으로만 데이터가 전송됩니다.
서로 네트워크가 연결되면 Pipeline이 설정되어 보내고 받는 2개의 객체(통로)가 만들어짐.
예) 파일 쓰기 객체, 파일 읽기 객체 / 전송 객체, 수신 객체
- 스트림은 전송하려는 데이터가 많을 경우 지연시간이 발생합니다.
전철의 지연 운행과 비슷한 동작을 함.
. 전송 제어: 고속 장치와 저속장치가 있는 경우 송수신 장치가 저속으로
송수신되어 데이터 유실이 발생되지 않도록 함.
예) LAN에서 드라이버를 설치하기 때문에 전력에 따라 전송되는 차이가 있어도
데이터 유실을 방지함
- 한글 입출력을 위해서는 문자(Reader, Writer) 스트림을 사용해야 합니다.
바이트 단위 처리 2바이트 문자단위
(한글 처리 불가능) (한글 조합 기능)
-----------------------------------------------------------------------------------------
InputStream 기본 입력 스트림 Reader(*) 한글 입출
OutputStream 기본 출력 스트림 Writer(*) 한글 출력
FileInputStream 파일 입력 스트림 FileReader(*) 한글 파일 입력
FileOutputStream 파일 출력 스트림 FileWriter(*) 한글 파일 출력
BufferedInputStream 버퍼(Memory) 입력 BufferedReader(*) 한글 메모리에 입력
BufferedOutputStream 버퍼(Memory) 출력 BufferedWriter(*) 한글 메모리에 출력
DataInputStream 데이터 타입 지원 입력
DataOutputStream 데이터 타입 지원 출력
ObjectInputStream Class 타입단위 입력 제공
ObjectOutputStream Class 타입단위 출력 제공
- URL: http://soldeskit3.cafe24.com/pds/read.jsp?pdsgrpno=10&pdsno=7853&col=&word=¤tPage=0&visible=
- 자료실에서 견본 이미지를 다운받습니다. 'C:/홈 폴더/swiss' 폴더에 저장합니다.
1) File
- 파일, 디렉토리에 대한 정보를 제공하고 조작(생성, 이름 변경, 삭제, 크기등)
할 수 있는 클래스.
- Windows는 대소문자를 구분하지 않으나 Linux/Unix는 철저 구분함으로
대소 문자를 구분하여 처리합니다.
- 파일 생성시 대상 폴더가 미리 생성되어 있어야합니다.
실습용 'C:/홈 폴더/io' 폴더를 미리 생성합니다.
[실행 화면]
-----------------------------------------------------------------------------------
[02] 폴더 생성 및 이름 변경 및 삭제
- mkdir(): 부모 폴더 아래 최하위 폴더 하나만 생성
- mkdirs(): 경로상에 명시된 부모 폴더를 포함하여 모든 폴더를 생성
- src.renameTo(dest): 폴더가 존재하면 폴더명을 변경하지 않음,
커서가 변경할 폴더안에 있으면 Rock이 잠겨 변경 불가능함.
- delete(): 폴더나 파일 즉시 삭제, 하위 폴더가 있으면 삭제 안됨.
- deleteOnExit(): 프로그램(JVM) 종료시 삭제, 임시 폴더의 사용
[실행 화면]
2. 폴더 생성: true ← 최초 한번만 true
4. 폴더 삭제: false
4. 폴더 삭제: false
4. 폴더 삭제: true
5. 파일 목록
sw06.jpg (210382)
▷ oop3.Folder.java
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
[과제] 아래의 메소드를 이용하여 파일 단위가 출력되도록 해주세요.
1. Math.ceil(): 가장 가까운 1의자리수로 소수점을 반올림.
[실행 화면]
-----------------------------------------------------------------------------------
2. 큰 정수의 처리
- 21억이 넘어가는 수는 Long 형식으로 처리해야함.
▷ IntTest.java
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
3. 파일 단위의 출력
[실행 화면]
.....
[실행 화면]
.....
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
.....
package oop3;
import java.io.File;
public class Tool {
/**
* 수를 전달받아 자료의 단위를 적용합니다.
* @param size
* @return 1000 > 1000 Byte
*/
public String unit(long size){
String str = "";
if (size < 1024){ // 1 KB 이하
str = size + " Byte";
}else if (size < 1024 * 1024){ // 1 MB 이하
str = (int)(Math.ceil(size/1024.0)) + " KB";
}else if (size < 1024 * 1024 * 1024){ // 1 GB 이하
str = (int)(Math.ceil(size/1024.0/1024.0)) + " MB";
}else if (size < 1024L * 1024 * 1024 * 1024){ // 1 TB 이하
str = (int)(Math.ceil(size/1024.0/1024.0/1024.0)) + " GB";
}else if (size < 1024L* 1024 * 1024 * 1024 * 1024){ // 1 PT 이하
str = (int)(Math.ceil(size/1024.0/1024.0/1024.0/1024.0)) + " TB";
}else if (size < 1024L* 1024 * 1024 * 1024 * 1024 * 1024){ // 1 EX 이하
str = (int)(Math.ceil(size/1024.0/1024.0/1024.0/1024.0/1024.0)) + " PT";
}
return str;
}
/**
* 문자열을 전달받아 파일 확장자 추출
* @param path
* @return
*/
public String getExt1(String path) {
int point = path.lastIndexOf(".");
String ext = path.substring(point+1);
return ext;
}
/**
* 문자열을 전달받아 파일 객체를 만든후 확장자 추출
* @param path
* @return
*/
public String getExt2(String path) {
File file2 = new File(path);
// 파일 확장자만 산출
int point = file2.getName().lastIndexOf(".");
String ext = file2.getName().substring(point+1);
return ext;
}
/**
* 문자열을 전달받아 파일 객체를 만든후 파일 존재 확인후 확장자 추출
* @param path
* @return
*/
public String getExt3(String path) {
// File file = new File("."); // .: 현재 폴더
// System.out.println("path: " + file.getAbsolutePath()); // eclipse project 경로
// File file2 = new File(path);
File file2 = new File("C:/201812_java/swiss/" + path);
int point = 0;
String ext = "";
if (file2.exists()) {
// 파일 확장자만 산출
point = file2.getName().lastIndexOf(".");
ext = file2.getName().substring(point+1);
}
return ext;
}
public boolean isImage(String path) {
boolean sw = false; // 스위치 변수
String name = path.toLowerCase();
if (name.endsWith(".jpg") || name.endsWith(".png") || name.endsWith(".gif")) {
sw = true;
}
return sw;
}
}
-------------------------------------------------------------------------------
//[출력부분]
package oop3;
import java.io.File;
public class IOExam {
public static void main(String[] args) {
File swiss = new File("C:/201812_java/swiss");
File[] files = swiss.listFiles(); // 파일 목록 추출
Tool tool = new Tool();
for (int i=0; i < files.length; i++) {
File file = files[i];
System.out.println(file.getName() + "(" + tool.unit(file.length()) + ")");
}
System.out.println("-----------------------------------");
String ext = tool.getExt1("C:/201812_java/swiss/sw06.jpg");
System.out.println("1. ext: " + ext);
ext = tool.getExt2("sw06.jpg");
System.out.println("2. ext: " + ext);
ext = tool.getExt3("sw06.jpg");
System.out.println("3. ext: " + ext);
System.out.println("4. 이미지 검사: " + tool.isImage("sw06.jpg"));
}
}
---------------------------------------------------
//[결과]
sw02_x.jpg(206 KB)
sw03.jpg(71 KB)
sw04.jpg(402 KB)
sw05.jpg(145 KB)
sw06.jpg(3 MB)
sw07.jpg(296 KB)
sw08.jpg(503 KB)
sw09.jpg(272 KB)
sw10.jpg(2 MB)
sw11.jpg(998 KB)
sw12.jpg(115 KB)
sw13.jpg(537 KB)
sw14.jpg(181 KB)
sw15.jpg(179 KB)
sw16.jpg(187 KB)
sw17.jpg(214 KB)
sw18.jpg(510 KB)
sw19.jpg(156 KB)
sw20.jpg(215 KB)
sw21.jpg(99 KB)
sw22.jpg(167 KB)
sw23.jpg(129 KB)
sw24.jpg(224 KB)
sw25.jpg(166 KB)
sw26.jpg(218 KB)
sw27.jpg(277 KB)
sw28.jpg(185 KB)
sw29.jpg(175 KB)
sw30.jpg(162 KB)
sw31.jpg(2 MB)
sw32.jpg(272 KB)
sw33.jpg(361 KB)
sw34.jpg(144 KB)
sw35.jpg(470 KB)
sw36.jpg(465 KB)
sw37.jpg(199 KB)
-----------------------------------
1. ext: jpg
2. ext: jpg
3. ext: jpg
4. 이미지 검사: true
'java of educational by contents' 카테고리의 다른 글
[22][IO] Text 파일 복사, Image(Binary 파일) 파일 복사 (0) | 2018.12.08 |
---|---|
[21][IO] Call By Reference, 메소드로 객체의 전달, 메소드로부터 객체 받기 ★ (0) | 2018.12.08 |
[19][OOP] Amateras UML 툴 설치, 상속(Inheritance), 사용자(개발자) 정의 Exception (0) | 2018.12.02 |
[18][OOP] 예외처리(Exception), throws 문 (0) | 2018.12.02 |
[17][OOP] 자바 시스템에서 제공하는 Package Import, String, DecimalFormat, Date, SimpleDateFormat, Random class (0) | 2018.12.02 |