Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 환경설정
- NestedFor
- 예외처리
- 생성자오버로드
- 컬렉션 타입
- Java
- 사용자예외클래스생성
- GRANT VIEW
- 예외미루기
- 정수형타입
- abstract
- 메소드오버로딩
- 한국건설관리시스템
- 집합_SET
- 어윈 사용법
- exception
- EnhancedFor
- cursor문
- 인터페이스
- 제네릭
- 자바
- 컬렉션프레임워크
- 다형성
- 참조형변수
- 객체 비교
- 추상메서드
- 자동차수리시스템
- 대덕인재개발원
- 오라클
- oracle
Archives
- Today
- Total
거니의 velog
230905_입출력 1 본문
입출력 명령어 배우기 전에 파일을 많이 다루므로 먼저 배우도록 한다.
파일과 디렉토리를 동시에 다룰 수 있는 클래스
파일 객체 생성. 파일 클래스의 생성자를 알아야 함.
크게 3가지 형태
1. 파일 객체 생성 시 파일 대상에 대한 파일 경로와 파일 이름 정보를 문자열로 줘야 한다.
2. 파일 경로와 파일 이름을 따로따로 주는 방법.
3. 경로를 문자열로 주느냐, 디렉토리 정보만 주는 방법.
[FileTest01.java]
package kr.or.ddit.basic;
import java.io.File;
public class FileTest01 {
public static void main(String[] args) {
// File객체 만들기 연습
// 1. new File(String 파일 또는 경로)
// ==> 디렉토리와 디렉토리 사이 또는 디렉토리와 파일명 사이의
// 구분 문자는 '/'를 사용하거나 '\'를 사용할 수 있다.
// File file1 = new File("d:/d_other/test.txt"); // 구분문자를 '/'로 사용.
File file1 = new File("d:\\d_other\\test.txt"); // 구분문자를 '\'로 사용.
System.out.println("파일명 : " + file1.getName()); // 파일명 : test.txt
System.out.println("디렉토리 여부 : " + file1.isDirectory()); // 디렉토리 여부 : false
System.out.println("파일 여부 : " + file1.isFile()); // 파일 여부 : true
System.out.println();
File file2 = new File("d:/d_other");
System.out.println("파일명 : " + file2.getName()); // 파일명 : d_other
System.out.println("디렉토리 여부 : " + file2.isDirectory()); // 디렉토리 여부 : true
System.out.println("파일 여부 : " + file2.isFile()); // 파일 여부 : false
System.out.println();
// 2. new File(File parent, String child)
// => 'parent' 디렉토리 안에 있는 'child' 파일을 갖는다.
File file3 = new File(file2, "test.txt");
System.out.println("파일명 : " + file1.getName()); // 파일명 : test.txt
System.out.println("디렉토리 여부 : " + file1.isDirectory()); // 디렉토리 여부 : false
System.out.println("파일 여부 : " + file1.isFile()); // 파일 여부 : true
System.out.println();
// 3. new File(String parent, String child)
// => 'parent' 디렉토리 안에 있는 'child' 파일을 갖는다.
File file4 = new File("d:/d_other", "test.txt");
System.out.println("파일명 : " + file4.getName()); // 파일명 : test.txt
System.out.println("디렉토리 여부 : " + file4.isDirectory()); // 디렉토리 여부 : false
System.out.println("파일 여부 : " + file4.isFile()); // 파일 여부 : true
System.out.println();
// 디렉토리(폴더) 만들기
/*
* - mkdir() ==> File 객체 전체의 경로 중 마지막 위치의 디렉토리를 만든다.
* ==> 반환값 : 만들기 성공(true), 만들기 실패(false)
* ==> 전체 경로 중 중간 부분의 경로가 모두 만들어져 있어야
* 마지막 위치의 디렉토리(폴더)를 만들 수 있다.
* - mkdirs() ==> 중간 부분의 경로가 없으면 중간 부분의 경로도 같이 만들어준다.
*/
File file5 = new File("d:/d_other/연습용");
System.out.println(file5.getName() + "의 존재 여부 : " + file5.exists()); // 연습용의 존재 여부 : false
if(!file5.exists()) {
if(file5.mkdir()) {
System.out.println(file5.getName() + " 만들기 성공!!!"); // 맨 처음 실행 : 연습용 만들기 성공!!!
}else {
System.out.println(file5.getName() + " 만들기 실패~~~"); // 나중에 실행 : 연습용 만들기 실패~~~
}
}
System.out.println();
File file6 = new File("d:/d_other/test/java/src");
System.out.println(file6.getName() + "의 존재 여부 : " + file6.exists()); // src의 존재 여부 : false
// if(file6.mkdir()) {
if(file6.mkdirs()) {
System.out.println(file6.getName() + " 만들기 성공!!!");
}else {
System.out.println(file6.getName() + " 만들기 실패~~~"); // src 만들기 실패~~~, d:/d_other/test/java 폴더가 실제로 있어야 그 안에 src 폴더를 만드는 것.
}
System.out.println();
}
}
[FileTest02.java]
package kr.or.ddit.basic;
import java.io.File;
public class FileTest02 {
public static void main(String[] args) {
File f1 = new File("d:/d_other/test.txt");
System.out.println(f1.getName() + "파일의 크기 : " + f1.length() + "bytes"); // test.txt파일의 크기 : 84bytes
System.out.println("path : " + f1.getPath()); // path : d:\d_other\test.txt
System.out.println("absolute path : " + f1.getAbsolutePath()); // absolute path : d:\d_other\test.txt
System.out.println();
// 이클립스에서 자바 프로그램이 실행되는 위치는 해당 프로그램이 위치하는
// 프로젝트를 말한다. (즉,'프로젝트 이름'에 해당하는 폴더가 된다.)
File f2 = new File("."); // 상대 경로.
System.out.println("path : " + f2.getPath()); // path : .
System.out.println("absolute path : " + f2.getAbsolutePath()); // absolute path : D:\A_TeachingMaterial\03_HighJava\workspace\javaIOTest\.
System.out.println();
if(f1.isFile()) {
System.out.println(f1.getName() + "은(는) 파일입니다."); // test.txt은(는) 파일입니다.
}else if(f1.isDirectory()) {
System.out.println(f1.getName() + "은(는) 디렉토리입니다.");
}else {
System.out.println(f1.getName() + "은(는) 뭘까용?");
}
System.out.println();
if(f2.isFile()) {
System.out.println(f2.getName() + "은(는) 파일입니다.");
}else if(f2.isDirectory()) {
System.out.println(f2.getName() + "은(는) 디렉토리입니다."); // .은(는) 디렉토리입니다.
}else {
System.out.println(f2.getName() + "은(는) 뭘까용?");
}
System.out.println();
// 현재 디스크에 존재하지 않는 파일 정보를 갖는 File 객체는
// 파일 또는 디렉토리 여부를 검사하지 못한다.
File f3 = new File("d:/d_other/sample.exe");
if(f3.isFile()) {
System.out.println(f3.getName() + "은(는) 파일입니다.");
}else if(f3.isDirectory()) {
System.out.println(f3.getName() + "은(는) 디렉토리입니다.");
}else {
System.out.println(f3.getName() + "은(는) 뭘까용?"); // sample.exe은(는) 뭘까용?
}
}
}
[FileTest03.java]
package kr.or.ddit.basic;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
public class FileTest03 {
public static void main(String[] args) {
FileTest03 test = new FileTest03();
// test.displayFileList(new File("d:/d_other"));
test.displayFileList(new File("d:/b_util"));
}
// 디렉토리를 매개변수로 받아서 해당 디렉토리에 있는
// 모든 파일과 디렉토리 목록을 출력하는 메서드
public void displayFileList(File dir) {
if(!dir.isDirectory()) {
System.out.println("디렉토리 (폴더)만 가능합니다...");
return;
}
System.out.println("[" + dir.getAbsolutePath() + "] 디렉토리 내용");
// 해당 디렉토리 안에 있는 모든 파일과 디렉토리 목록을 가져온다.
File[] files = dir.listFiles();
// String[] fileStrs = dir.list();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
// 가져온 파일과 디렉토리 목록 개수만큼 반복
for(int i=0; i<files.length; i++) {
String fileName = files[i].getName();
String attr = ""; // 파일의 속성(읽기, 쓰기, 히든, 디렉토리 구분)
long size = 0; // 파일 크기
if(files[i].isDirectory()) {
attr = "<DIR>";
} else {
size = files[i].length();
attr = files[i].canRead() ? "R" : "";
attr += files[i].canWrite() ? "W" : "";
attr += files[i].isHidden() ? "H" : "";
}
System.out.printf("%s %5s %d %s\n", df.format(new Date(files[i].lastModified())), attr, size, fileName);
}
}
}
[ByteArrayIOTest01.java]
package kr.or.ddit.basic;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class ByteArrayIOTest01 {
public static void main(String[] args) {
byte[] inSrc = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
byte[] outSrc = null;
// 입력용 스트림 객체 생성
ByteArrayInputStream bin = new ByteArrayInputStream(inSrc);
// 출력용 스트림 객체 생성
ByteArrayOutputStream bout = new ByteArrayOutputStream();
// 입력용 스트림을 이용하여 데이터를 읽어와서
// 출력용 스트림을 이용하여 출력하기
int data; // 읽어온 자료가 저장될 변수
// read()메서드 ==> 더 이상 읽어올 자료가 없으면 -1을 반환한다.
while( (data = bin.read()) != -1 ) { // 읽어오기
// 읽어온 자료를 처리하는 작업을 작성한다.
bout.write(data); // 출력하기
}
// 출력된 스트림값을 배열로 변환하기
outSrc = bout.toByteArray();
// 입출력 작업이 완료되면 사용했던 자원(스트림 객체)을 반납한다.
// ==> 이 때는 close()메서드를 사용한다.
try {
bin.close();
bout.close();
} catch (IOException e) {
// TODO: handle exception
}
System.out.println(" inSrc => " + Arrays.toString(inSrc)); // inSrc => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
System.out.println("outSrc => " + Arrays.toString(outSrc)); // outSrc => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
}
}
[ByteArrayIOTest02.java]
package kr.or.ddit.basic;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Arrays;
public class ByteArrayIOTest02 {
public static void main(String[] args) {
byte[] inSrc = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
byte[] outSrc = null;
byte[] temp = new byte[4];
// 스트림 객체 생성
ByteArrayInputStream bin = new ByteArrayInputStream(inSrc);
ByteArrayOutputStream bout = new ByteArrayOutputStream();
try {
// bin.available() ==> 읽어올 수 있는(남아 있는) 데이터의 개수 반환
while(bin.available() > 0) {
// bin.read(temp); // 배열 크기만큼 읽어오기
// bout.write(temp); // 배열의 데이터 출력하기
// read(byte[] 배열명) ==> 반환값 : 실제 읽어온 데이터 개수
int len = bin.read(temp);
// temp 배열의 내용 중 0번째 부터 len 개수만큼 출력한다.
bout.write(temp, 0, len);
System.out.println("반복문 안에서 temp => " + Arrays.toString(temp));
// 반복문 안에서 temp => [0, 1, 2, 3]
// 반복문 안에서 temp => [4, 5, 6, 7]
// 반복문 안에서 temp => [8, 9, 6, 7]
}
outSrc = bout.toByteArray();
System.out.println(" inSrc => " + Arrays.toString(inSrc)); // inSrc => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
System.out.println("outSrc => " + Arrays.toString(outSrc)); // outSrc => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 6, 7]
// 스트림 닫기
bin.close();
bout.close();
} catch (IOException e) {
// TODO: handle exception
}
}
}
[FileIOTest01.java]
package kr.or.ddit.basic;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
public class FileIOTest01 {
public static void main(String[] args) {
// 바이트 기반의 스트림을 이용하여 파일 내용 읽어와 출력하기
try {
// 파일 입력용 스트림 객체 생성
// 방법 1
// FileInputStream fin = new FileInputStream("d:/d_other/test.txt");
// 방법 2
File file = new File("d:/d_other/test.txt");
FileInputStream fin = new FileInputStream(file);
int c; // 읽어온 데이터가 저장될 변수
while( (c = fin.read()) != -1 ) {
// 읽어온 데이터를 화면에 출력하기
System.out.print((char)c);
}
// 작업 완료 후 스트림 닫기
fin.close();
} catch (IOException e) {
System.out.println("입출력 오류입니다.");
e.printStackTrace();
}
}
}
[FileIOTest02.java]
package kr.or.ddit.basic;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileIOTest02 {
public static void main(String[] args) {
// 바이트 기반 스트림을 이용한 파일로 출력하기 예제
try {
FileOutputStream fout = new FileOutputStream("d:/d_other/out.txt"); // 파일이 없으면 새로 생성함. 파일이 있으면 덮어쓰기함.
for(char ch='A'; ch<='Z'; ch++) {
fout.write(ch); // ch변수의 데이터를 파일로 출력한다.
}
System.out.println("출력 작업 완료!!!");
// 스트림 닫기
fout.close();
} catch (IOException e) {
// TODO: handle exception
}
}
}
[FileIOTest03.java]
package kr.or.ddit.basic;
import java.io.FileReader;
import java.io.IOException;
public class FileIOTest03 {
public static void main(String[] args) {
// 문자 기반 스트림을 이용한 파일 내용 읽어와 화면에 출력하기
try {
// 입력용 스트림 객체 생성
FileReader fr = new FileReader("d:/d_other/test.txt");
int c;
while( (c = fr.read()) != -1 ) {
System.out.print( (char)c );
}
// 스트림 닫기
fr.close();
} catch (IOException e) {
// TODO: handle exception
}
}
}
[FileIOTest04.java]
package kr.or.ddit.basic;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
public class FileIOTest04 {
public static void main(String[] args) {
// 사용자가 입력한 내용을 그대로 파일로 저장하기
try {
// System.in ==> 콘솔(표준 입출력 장치) 입력장치의
// 입력용 스트림 객체가 저장되어 있다. (바이트 기반 스트림)
// 입력용 바이트 기반 스트림을 문자 기반 스트림으로 변환하기
InputStreamReader isr = new InputStreamReader(System.in);
// 문자 기반의 파일 출력용 스트림 객체 생성
FileWriter fw = new FileWriter("d:/d_other/testChar.txt");
System.out.println("아무 내용이나 입력하세요. (입력의 끝은 Ctrl + Z키 입니다.)");
int c;
while( (c = isr.read()) != -1 ) { // 콘솔로 입력 받기
fw.write(c); // 입력 받은 데이터를 파일로 출력하기
}
// 스트림 닫기
isr.close();
fw.close();
} catch (IOException e) {
// TODO: handle exception
}
}
}
'대덕인재개발원_자바기반 애플리케이션' 카테고리의 다른 글
230907_입출력 3 (2) | 2023.09.07 |
---|---|
230906_입출력 2 (0) | 2023.09.06 |
230904_스레드 5 (0) | 2023.09.04 |
230901_스레드 4 (0) | 2023.09.01 |
230831_스레드 3 (0) | 2023.08.31 |