티스토리 뷰
1. 파일(file)
(1) File 객체
파일 또는 폴더를 가리키는 객체. 실제 파일의 존재여부와는 상관없음. 객체를 생성했는데 실제 파일이 없을수도 있음. 그런 경우, 파일 내용을 사용하려는 시점에서 FileNotFoundException 발생.
(2) File 객체 생성과 존재 확인
(2-1) 현재 작업 경로 확인 System.getProperty()
System.out.println(System.getProperty("user.dir"));
└개인 - D:\java\java_work\test0209Practice
(2-2) 폴더 생성(디렉토리 만들기) mkdir()
File abcDir = new File("D:\\java\\java_work\\test0209Practice\\abc");
if(!abcDir.exists())
abcDir.mkdir();
└지정한 경로(D:\java\java_work\test0209Practice\abc)에 폴더 객체 생성한 것이지 실제 폴더를 만든 것은 아님. → if문을 통해서 실제 폴더 생성. abc 폴더가 존재하지 않는다면 abc 폴더를 만들어라.
(2-3) 파일 생성 createNewFile()
File newFile = new File("D:\\java\\java_work\\test0209Practice\\abc\\newFile.txt"); //객체생성
if(!newFile.exists())
newFile.createNewFile(); //실제 파일 생성 //예외던지기
└지정한 경로에 파일 객체 생성(실제 파일 만든 것 아님) if문을 통해서 newFile.txt파일 생성. 설정한 경로에 가면 파일이 생성된 것을 확인할 수 있다.
└예외가 발생하는 이유는 지정한 경로에 abc 폴더가 없을 수 있기 때문에.
(2-4) 경로 접근 방법
-절대 경로 : 드라이브명부터 특정 위치까지 경로 전부 표기
-상대 경로 : 현재 작업폴더(test0209Practice) 위치 기준으로 경로 표기
//절대 경로
File newFile1 = new File("D:\\java\\java_work\\test0209Practice\\abc\\newFile11.txt");
//상대 경로
File newFile2 = new File("abc\\newFile22.txt");
(2-5) 경로 접근 시 사용하는 기호(구분자) 역슬래시(\), 슬래시(/), File.separator
//윈도우
File newFile2 = new File("D:\\java\\java_work\\test0209Practice\\abc\\newFile.txt");
//맥
File newFile3 = new File("D:/java/java_work/test0209Practice/abc/newFile.txt");
//공통
File newFile4 = new File("D:"+File.separator+"java"+File.separator+"java_work"+File.separator
+"test0209Practice"+File.separator+"abc"+File.separator+"newFile.txt");
└윈도우에서는 역슬래시(\), 슬래시(/) 모두 사용 가능. 다만, 역슬래시(\)의 경우 쌍따옴표(" ") 안에서 사용하면 제어문자로 인식하기 때문에 \\ 사용.
(3) File class Method
폴더 | |||
isDirectory() | getParent() | mkdir() | mkdirs() |
폴더 여부 참/거짓 리턴 |
부모 폴더의 이름 문자열 리턴 |
해당 경로에 폴더 생성 | 경로상에 존재하지 않는 모든 폴더 생성 |
파일 | |||
isFile() | getName() | list() | listFiles() |
파일 여부 참/거짓 리턴 |
파일 이름 문자열 리턴 |
경로 내의 폴더와 파일 이름을 문자열 배열로 리턴 |
경로 내의 폴더와 파일 이름을 파일 객체 배열로 리턴 |
String getAbsolutePath() | exists() | ||
파일의 절대적 경로 리턴 | 파일 또는 폴더의 존재 여부 참/거짓 리턴 |
_메소드 사용 예시)
package aa;
import java.io.File;
import java.io.IOException;
public class FileTest {
public static void main(String[] args) throws IOException {
//file 생성
File newFile = new File("D:\\java\\java_work\\test0209Practice\\abc\\newFile.txt");
if(!newFile.exists())
newFile.createNewFile(); //예외던지기
File newFile2 = new File("D:\\java\\java_work\\test0209Practice\\abc\\newFile22.txt");
System.out.println("-----구분선-----");
System.out.println(newFile.exists()); //true
System.out.println(newFile.isFile()); //true
System.out.println(newFile.getName()); //newFile.txt
System.out.println(newFile.getAbsolutePath()); //D:\java\java_work\test0209Practice\abc\newFile.txt
System.out.println("-----구분선-----");
System.out.println(newFile2.exists()); //false
System.out.println(newFile2.isFile()); //false
System.out.println(newFile2.getName()); //newFile22.txt
System.out.println(newFile2.getAbsolutePath()); //D:\java\java_work\test0209Practice\abc\newFile22.txt
}
}
└newFile은 실제 파일 생성(if문)했으나 newFile2는 객체만 생성한 상태.
_메소드 사용 예시2)
package aa;
import java.io.File;
public class FileTest02 {
public static void main(String[] args) {
File file = new File("D:/java/java_work");
File[] fname = file.listFiles(); //경로 내의 폴더/파일을 파일 객체 배열로 리턴
for(File f:fname) {
System.out.println(f.isDirectory()?"폴더: ":"파일 :"+f.getName());
}
}
}
java_work에 있는 파일/폴더를 배열 객체(fname)으로 받고 반복문으로 출력. 삼항연산자 이용
2. 문자셋(Charset)
아스키(ASCII) | 유니코드(Unicode) |
영문 알파벳, 숫자, 특수기호, 제어코드로 구성 한글이나 한자 등을 모두 표현하기 어려움 EUC-KR, EUC-JP, EUC-CN |
하나의 문자셋에 국가별 모든 문자셋 통합 |
EUC-KR | MS949 |
한글 웹페이지 표준 문자셋(국가 표준) KS완성형 + ASCII 한글 2,350자 표현 가능 ASCII 대응 문자 1byte |
비표준. EUC-KR 하위호환 Windows 한글완성형 표기 KS완성형 + ASCII + 누락된 8,822자 ASCII 대응 문자 1byte |
UTF-16 | UTF-8 |
고정 길이 문자 인코딩 방식(2byte) 자바에서 char 자료형 저장 방식(char 2byte) |
가변 길이 문자 인코딩 방식(1 ~ 4byte) 시스템 기본 인코딩 방식 아스키(1byte), 한글(3byte) |
└UTF-8 : 웹서버(Apache, IIS, NginX 등), 데이터베이스(MySQL 등), 리눅스, Mac 시스템의 기본 인코딩 방식
└UTF-16 : 저장 문자열 앞에 Little Endian/Big Endian 방식의 구분을 위한 2byte Bom(Byte Order Mark) 코드 삽입.
"abc".getBytes("UTF-16"); → FE FF 00 61 00 62 00 63 → 8 byte. FE FF가 BOM |
*DB에선 한글을 3Byte 저장. 인코딩할 때, 한글이 깨질 수도 있음.
*UTF-8과 EUC-KR, MS949는 호환 안 됨. EUC-KR과 MS949는 하위 호환.
*보통은 웹, DB 호환을 위해서 UTF-8을 설정해서 쓴다.
(1) 문자셋 지정
-case 1 : 문자열을 byte[]로 변환. String 클래스 인스턴스 메소드 getBytes 이용
byte[] 변수 = "문자".getBytes(); //설정된 default 문자셋
byte[] 변수 = "문자".getBytes("MS949"); //매개변수에 입력한 문자셋
-case 2 : byte[]을 문자열로 변환. String 생성자 이용
_예시)
package aa;
import java.io.UnsupportedEncodingException;
public class CharSetTest {
public static void main(String[] args) throws UnsupportedEncodingException {
//현재 이클립스 문자셋 MS949
//English //예외던지기
byte[] b1 = "a".getBytes("EUC-KR"); //EUC-KR 셋으로 변환
byte[] b2 = "a".getBytes("MS949"); //MS949 셋으로 변환
System.out.println(b1.length); //1
System.out.println(b2.length); //1
//한글
byte[] b3 = "가".getBytes("EUC-KR"); //EUC-KR 셋으로 변환
byte[] b4 = "나".getBytes("MS949"); //MS949 셋으로 변환
System.out.println(b3.length); //2
System.out.println(b4.length); //2
byte[] b5 = "봵".getBytes("EUC-KR");
byte[] b6 = "봵".getBytes("MS949");
System.out.println(b5.length); //1
System.out.println(b6.length); //2
System.out.println(new String(b5, "EUC-KR")); //?
System.out.println(new String(b6, "MS949")); //봵
//utf
byte[] b7 = "a".getBytes("UTF-16");
byte[] b8 = "a".getBytes("UTF-8");
System.out.println(b7.length); // 4 //bom이 붙어서
System.out.println(b8.length); // 1
byte[] b9 = "가나다".getBytes("UTF-16");
byte[] b10 = "가나다".getBytes("UTF-8");
System.out.println(b9.length); // 8 //bom이 붙음. 하나당 2byte
System.out.println(b10.length); // 9 //하나당 3byte
}
}
_예제)
package aa;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
public class CharSetTest02 {
public static void main(String[] args) throws UnsupportedEncodingException {
//현재 이클립스 문자셋 MS949
//문자열을 지정한 문자셋 형식으로 byte배열로 변환
//1. 디폴트 문자셋
byte[] array1 = "안녕하세요".getBytes();
//2.
byte[] array2 = "안녕하세요".getBytes(Charset.defaultCharset());
//3. 문자셋 설정
byte[] array3 = "안녕하세요".getBytes(Charset.forName("UTF-8"));
//4. 문자셋 설정_가장 많이 쓰는 방식
byte[] array4 = "안녕하세요".getBytes("MS949");
System.out.println(array1.length); //10
System.out.println(array2.length); //10
System.out.println(array3.length); //15
System.out.println(array4.length); //10
System.out.println(new String(array1)); //안녕하세요
System.out.println(new String(array2, Charset.defaultCharset())); //안녕하세요
System.out.println(new String(array3, Charset.forName("UTF-8"))); //안녕하세요
System.out.println(new String(array4, "MS949")); //안녕하세요
}
}
└설정할 때 문자셋과 출력할 때 문자셋이 다르면 깨진다. UTF-8과 MS949
'수업 > └Java' 카테고리의 다른 글
[CH17]람다식 (0) | 2022.02.10 |
---|---|
[CH16_3]Java IO(Input/Output) - char 단위 입출력 (0) | 2022.02.09 |
[CH14_1]컬렉션 프레임워크 : List<E> (0) | 2022.02.08 |
[CH12]Thread (0) | 2022.02.07 |
[실습문제6_1]Person, Customer, Test (0) | 2022.02.04 |
- Total
- Today
- Yesterday
- html input type
- initialized
- 외부구성요소
- JavaScript
- caption-side
- selcetor
- A%B
- input type 종류
- text formatting
- 입력양식
- 기본선택자
- CascadingStyleSheet
- improt
- html layout
- scanner
- BAEKJOON
- Java
- empty-cell
- html atrribute
- 변수
- html pre
- html
- ScriptTag
- border-spacing
- html base tag
- html a tag
- css
- 스크립태그
- 미디어 태그
- typeof
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |