자바에서 입력과 출력을 위해 주로 FileInputStream과 FileOutputStream을 사용합니다.
FileInputstream은 read()메소드가 있는데 이것은 크게 두가지 형태로 사용됩니다.
read();
read(byte[]);
이런 두가지 형태인데요.
read()는 1바이트씩 읽고 read(byte[])는 배열의 크기만큼 읽습니다.
import java.io.FileInputStream;
public class MainClass {
public static void main(String[] args) {
// read()
InputStream inputStream = null;
try {
inputStream = new FileInputStream("C:\\java\\hello.txt");
int data = 0;
while(true) {
try {
data = inputStream.read();
} catch (IOException e) {
e.printStackTrace();
}
if(data == -1) break;
System.out.println("data : " + data);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(inputStream != null) inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
ㅈInputStream의 경우를 보면 inputStream = new FileInputStream("C:\\java\\hello.txt"); 부분에서
C아래 java 폴더 아래 hello.txt파일에서 읽어오겠다는 의미입니다.
해당 파일에는 제가 Hello Java라는 글자를 작성해서 저장해두었습니다.
우선 실행을 한번 해볼까요?
data와 이상한 숫자들이 출력이 됐는데 이 숫자는 문자가 ASCII코드로 변환되어 출력이 된 것입니다.
코드를 해석해보면 무한으로 도는 while문이 있습니다.
data라는 변수에 읽어온 것을 data에 저장하게 됩니다.
그런데 data가 -1이면 빠져나오게 되는 부분이 있기 때문에 더이상 읽을 부분이 없으면 무한으로 도는 반복문이지만 빠져나오게 됩니다.
import java.io.FileInputStream;
public class MainClass {
public static void main(String[] args) {
// read()
InputStream inputStream = null;
try {
inputStream = new FileInputStream("C:\\java\\hello.txt");
int data = 0;
byte[] bs = new byte[3];
while(true) {
try {
data = inputStream.read(bs);
} catch (IOException e) {
e.printStackTrace();
}
if(data == -1) break;
System.out.println("data : " + data);
for(int i = 0; i < bs.length; i++){
System.out.println("bs[" + i + "] : " + bs[i]);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
if(inputStream != null) inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
위의 코드의 출력 결과입니다.
총 10간으로 구분을 했는데요 Hello Java는 9글자인데 왜 10칸으로 구분할까요??
띄어쓰기도 문자로 구분을 하기 때문입니다.
마지막에 a만 읽어온 data : 1의 부분에는 bs[0]은 97인데 bs[1]과 bs[2]는 왜 97, 119로 출력이 될까요??
이전에 읽었던 부분이 삭제되지 않고 그래로 저장되어 남아 있기 때문입니다.
'Java 관련 > Java' 카테고리의 다른 글
[Java] 복사 Copy(FileInputStream / FIleOutputStream) (0) | 2022.08.03 |
---|---|
[Java] FileOutputStream (0) | 2022.08.02 |
[Java] Static(스태틱) (0) | 2022.07.31 |
[Java] import(임포트) (2) | 2022.07.30 |
[Java] 패키지(package) (0) | 2022.07.29 |