자바 IO 흐름 의 노드 흐름 과 문자 흐름 에 관 한 지식 총화
file 은 파일 과 디 렉 터 리 경로 이름 의 추상 적 인 표현 입 니 다.
1.1 File 의 사용법
사용법:
File file = new File(" ");
//
File file = new File("L:\\FileTestDemo\\AAA\\aaa.txt");
메모:windows 에서 경로 명 은 하나의\
를 사용 할 수 없습니다.하나의\
는 전의 문자 로 사용 할 수 있 습 니 다\\
,//
또는/
1.2 File 의 일반적인 방법1.boolean createNewFile()
이 이름 을 가 진 파일 이 존재 하지 않 을 때 추상 적 인 경로 이름 으로 새 빈 파일 을 원자 방식 으로 만 듭 니 다.메모:폴 더 를 만 들 수 없습니다.파일 만 만 들 수 있 습 니 다.
System.out.println(file.createNewFile()); //true or false
2.boolean delete()이 추상 적 인 경로 이름 이 표시 하 는 파일 이나 디 렉 터 리 를 삭제 합 니 다.
System.out.println(file.delete());
3.boolean exists()이 추상 적 인 경로 이름 이 표시 하 는 파일 이나 디 렉 터 리 가 존재 하 는 지 테스트 합 니 다.
if(!file.exists()){
System.out.println(" , "+ file.createNewFile());
}
4.String getName()이 추상 적 인 경로 이름 이 표시 하 는 파일 이나 디 렉 터 리 의 이름 을 되 돌려 줍 니 다.
System.out.println(file.getName());
5.long lastModified()이 추상 적 인 경로 이름 을 수정 한 파일 의 시간 을 되 돌려 줍 니 다.
System.out.println(new SimpleDateFormat().format(new Date(file.lastModified())));
IO 흐름File 클래스:
파일 외부 내용 만 조작 할 수 있 고 파일 내부 내용 의 읽 기와 쓰 기 를 조작 할 수 없습니다.
흐름:
데 이 터 는 선 입 선 출 순서 로 전송 되 고 흐름 은 파이프 이 며 데 이 터 를 전송 하 는 것 이다.
IO 흐름:
자바 는 io 패 키 지 를 제공 하여 여러 가지 종 류 를 제공 하 였 으 며,많은 기능 을 제공 하여 데이터 의 읽 기와 쓰 기 를 실현 할 수 있 습 니 다.
2.1 흐름 의 개념
데이터 소스 는 물탱크 와 같 고 흐름 은 수도관 에서 흐 르 는 물 과 같 으 며 프로그램 은 우리 의 최종 사용자 입 니 다.흐름 은 추상 적 이 고 동태 적 인 개념 으로 연속 적 이 고 동태 적 인 데이터 집합 이다.
2.2 흐름 의 분류
흐름 에 따라 입력 흐름(InputStream 과 Reader)과 출력 흐름(OutputStream 과 Writer)으로 나 눌 수 있 습 니 다.
동작 단위 에 따라 바이트 흐름(InputStream 과 OutputStream)과 문자 흐름(Reader 와 Writer)으로 나 눌 수 있 습 니 다.
기능 에 따라 노드 흐름(데이터 원본 이나 목적지 에서 데 이 터 를 직접 읽 고 쓸 수 있 음)과 기능 흐름(처리 흐름 의 흐름 이다.다른 흐름 에 대한 처 리 를 통 해 프로그램의 성능 을 향상 시킨다)
2.3 IO 조작 절차
모든 조작 을 하기 전에 먼저 목적(읽 기 또는 쓰기)을 명 확 히 하고 원본(읽 기)을 찾 아 목적 지 를 정확하게 찾 아야 한다(쓰기).
1.연결 만 들 기:이 단 계 는 흐름 을 얻 기 위해 서 입 니 다.만약 에 파일 이 라면 파일 을 메모리 형성 대상 으로 추상 화해 야 합 니 다.후기 에 도 다른 데이터 소스 일 수 있 습 니 다.
2.흐름 선택:읽 기와 쓰기,데이터 유닛 과 기능 측면 에서 고려 합 니 다.입력|출력,바이트|문자,결점 흐름|처리 흐름.
3.실행 동작:읽 을 것 은 읽 고 쓸 것 은 쓴다.한꺼번에 완성 하 는 게 좋 을 것 같 아서 순환 이 필요 해 요.
4.자원 방출:프로그램 에서 열 린 파일 IO 자원 은 메모리 에 있 는 자원 에 속 하지 않 습 니 다.쓰레기 수 거 는 회수 할 수 없습니다.닫 기 를 표시 해 야 합 니 다.
2.4 기본 입력 흐름(InputStream 과 Reader)
int read()->반환 값 은 이번에 읽 은 내용(한 바이트 의 값,한 문자 의 값)입 니 다.
int read(by te[]car)->읽 은 바이트 를 car 배열 에 임시 저장 하고 실제 읽 은 바이트 수 를 되 돌려 줍 니 다.
int reade(char[]car)->읽 은 문 자 를 car 배열 에 임시 저장 하고 실제 읽 은 문자 수 를 되 돌려 줍 니 다.
어떤 방식 으로 든 read(),read([])에서 파일 을 읽 습 니 다.-1 은 파일 끝 에 읽 는 것 을 의미 합 니 다.
문자->텍스트 만 조작 할 수 있 습 니 다.직접 읽 을 수 있 는 것 은 문자 입 니 다.
바이트->임의의 데이터,하지만 동작 이 문자 라면 변환 이 필요 합 니 다(번 거 로 움)
단일 바이트 읽 기
InputStream 을 예 로 들 면 Reader 는 마찬가지 입 니 다.
public class IOTest {
public static void main(String[] args) throws IOException {
// ,
InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");
// read(), read([]) , -1,
// result -1
int result = -1;
while((result = is.read()) != -1){
System.out.println((char)result);
}
//
is.close();
}
}
다 중 바이트 읽 기
public class IOTest {
public static void main(String[] args) throws IOException {
// ,
InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");
//
byte[] car = new byte[1024];
int len = -1;
// result -1
while ((len = is.read(car)) != -1){
System.out.println(new String(car,0,len));
}
//
is.close();
}
}
2.5 기본 출력 흐름(Output Stream 과 Writer)OutputStream 을 예 로 들 면 Writer 는 마찬가지 입 니 다.
메모:출력 흐름 을 닫 기 전에 캐 시 영역 데 이 터 를 비 워 야 합 니 다.
flush()는 일반적으로 IO 에 사 용 됩 니 다.즉,버퍼 데 이 터 를 비 우 는 것 입 니 다.즉,읽 기와 쓰기 흐름 을 사용 할 때 사실은 데 이 터 는 메모리 에 먼저 읽 힌 다음 에 데이터 로 파일 에 쓰 는 것 입 니 다.데 이 터 를 다 읽 었 을 때 데 이 터 를 다 썼 다 는 것 은 아 닙 니 다.메모리 라 는 버퍼 에 남 을 수도 있 기 때 문 입 니 다.이 럴 때 close()방법 을 사용 하여 읽 기와 쓰기 흐름 을 닫 으 면 이 부분의 데 이 터 를 잃 어 버 리 므 로 읽 기와 쓰기 흐름 을 닫 기 전에 flush()를 사용 하고 데 이 터 를 비 워 야 합 니 다.
단일 바이트 쓰기
public class OutputStream01 {
public static void main(String[] args) throws IOException {
,
OutputStream os = new FileOutputStream("L:\\FileTestDemo\\abc.txt",true);
//
os.write('a');
//
os.flush();
//
os.close();
}
}
다 중 바이트 입력
public class OutputStream02 {
public static void main(String[] args) throws IOException {
//
OutputStream os = new FileOutputStream("L:\\FileTestDemo\\abc.txt");
//
String str = "
" +
" ?
" +
"\t\t\t , sir";
//
byte[] arr = str.getBytes();
//
os.write(arr);
//
os.flush();
//
os.close();
}
}
2.6 입 출력 공동 사용InputStream 과 OutputStream 을 예 로 들 면
public class In_Out {
public static void main(String[] args){
//
InputStream is = null;
OutputStream os = null;
try {
//
is = new FileInputStream("L:\\FileTestDemo\\aaa.txt");
os = new FileOutputStream("L:\\FileTestDemo\\abc\\bbb.txt");
//
byte[] arr = new byte[1024];
int len = -1;
while ((len = is.read(arr)) != -1){
//write(byte[] b, int off, int len) off len
os.write(arr,0,len);
}
//
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
// ,
//
if(os != null){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//
if(is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
2.7 이상 처리IO 흐름 을 사용 할 때 컴 파일 시 이상 이 발생 할 수 있 으 며,이상 을 던 지 거나 이상 을 캡 처 하여 처리 할 수 있 습 니 다.
이상 을 던지다
public class IOTest {
public static void main(String[] args) throws IOException {
// (FileNotFoundException)
// (throw)
InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");
}
}
캡 처 이상
public class IOTest {
public static void main(String[] args){
// try...carch...
try {
InputStream is = new FileInputStream("L:\\FileTestDemo\\123.txt");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
2.8 바이트 흐름 과 문자 흐름 의 차이바이트 흐름 과 문자 흐름 의 차이 점:
1.읽 고 쓰 는 바이트 수가 다르다.
2.문자 흐름 은 블록 읽 기와 쓰기 이 고 바이트 흐름 은 바이트 읽 기와 쓰기 이다.
3.문자 흐름 에 캐 시 가 있 고 바이트 흐름 이 없습니다.
자바 흐름 은 처리 에 있어 서 문자 흐름 과 바이트 흐름 으로 나 뉜 다.문자 흐름 처리 부 서 는 2 개의 바이트 의 유 니 코드 문자 로 문자,문자 배열 또는 문자열 을 각각 조작 하고 바이트 흐름 처리 부 서 는 1 개의 바이트 로 바이트 와 바이트 배열 을 조작 합 니 다.
문자 흐름 과 바이트 흐름 은 하나의 속성 범위 가 작고 하나의 속성 범위 가 넓 으 며 문자 흐름 은 문자 라 는 유형 만 있 을 수 있 습 니 다.그러나 바이트 흐름 에 서 는 문자 일 수 있 고 바 이 너 리 파일 일 수 있 으 며 오디 오 일 수 있 으 며 여러 가지 유형 일 수 있 습 니 다.바이트 형식 에 맞 으 면 바이트 흐름 을 연결 할 수 있 고 문자 흐름 은 문자 만 연결 할 수 있 습 니 다.
자바 IO 흐름 의 노드 흐름 과 문자 흐름 에 관 한 지식 을 정리 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 노드 흐름 과 문자 흐름 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.