入力と出力
5388 ワード
ストリーム(stream)
このとき,データが行き交う道路をストリーム(stream)と呼ぶ.
I/O基本クラス
InputStream, OutputStream
I/O用の基本クラス.1 Byte単位でデータを転送する基本クラスです
プログラムにオブジェクトを入力するときにInputStreamを使用します.
出力先はプログラム出力時にOutputStreamを使用します.
InputStream、OutputStreamの階層構造
InputStreamのサブクラス
OutputStreamのサブクラス
FileInputStream, FileOutputStream
ファイル内のデータの読み取り/書き込みに使用されるクラス
オブジェクトの書式設定
ファイルオブジェクト名=new FileInputStream(「取得するファイルパス」)
ファイルオブジェクト名=new FileOutputStream("出力するファイルパス");//ファイルがない場合は、新しいファイルを作成して新しいファイルに出力します.
FileInputStreamのメソッド-読み込み
// 파일에 "Hello Java" 라고 저장되어 있다고 가정하자.
// CASE1
data1 = inputstream.read(); // 1바이트 단위로 파일에서 읽어옴
print(data1); // "H" 출력
// CASE2
byte[] bs2 = new byte[3];
data2 = inputstream.read(bs2); // 3바이트 단위로 읽어옴
print(data2) "Hel" 출력
FileOutputStreamのメソッド-write
write(byte[ ] b);//すべて書き込み:ファイルに出力するコンテンツを配列ごとにグループ化し、一括して書き込みます.
write( byte[ ] , int off , int len );//off(始点)、len(長さ)-アレイの始点offからファイルの特定の長さlenに出力
// CASE1
String data2 = "Hello Java";
byte[] arr = data1.getBytes();
outputstream.write(arr); // "Hello Java" 를 파일에 쓴다
// CASE2
String data2 = "MY World Java";
byte[] arr = data2.getBytes();
outputstream.write(arr,1,5); // "Y Wor" 을 파일에 쓴다
例-read()メソッドで1バイト読み出しInputStream inputstream = null;
try{
inputStream = new FileInputStream("C:\\java\\pjt_ex\\hello.txt");
int data = 0;
while(true){
try{
data = inputStream.read(); // 1바이트씩 계속 읽어옴
}catch(IOException e){ // 더이상 파일에서 읽어올게 없는데
// 읽어오려고 하면 애러가 발생 하므로
e.printStackTrace(); // 애러 매시지 출력함
}
// 파일에 끝에는 -1 이 담겨져 있음
if (data == -1) break; // 파일의 끝이라면 while 문을 break한다
System.out.println("data:" + data);
}
} catch (FileNotFoundException e) { // 해당하는 파일이 없으면
e.printStackTrace(); // 애러 매시지 출력함
} finally{
try{
// 파일 스트림 객체는 마지막에 close() 로 종료시켜 줘야함
if(inputStream != null) inputstream.close();
} catch(IOException e) {
e.printStackTrace();
}
}
例-読み込み()メソッド指定した配列サイズ単位で読み込みInputStream inputstream = null;
try{
inputStream = new FileInputStream("C:\\java\\pjt_ex\\hello.txt");
int data = 0;
byte[] bs = new byte[3]; // 3 바이트 배열 단위로 파일에서 묶음으로 읽어오기 위해 선언한 배열
while(true){
try{
data = inputStream.read(bs); // 선언한 배열을 read() 의 인자로 넘겨줌.
// 이제 3바이트 단위로 파일에서 읽어올거임.
}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();
}
}
例-Output Stream()OutputStream outputstream = null;
try{
outputStream = new FileInputStream("C:\\java\\pjt_ex\\hello.txt");
String data = "Hello java World!";
byte[] arr = data.getBytes(); // getBytes() : 바이트 단위로 전환
try{
outputStream.write(arr,0,5); // "Hello" 를 파일에 출력한다.
}catch(IOException e){
e.printStackTrace();
}
} catch (FileNotFoundException e){
e.printStackTrace();
} finally{
try{
if(inputStream != null) inputstream.close();
} catch(IOException e) {
e.printStackTrace();
}
}
DataInputStream, DataOutputStream
バイトのI/Oを改善することで、文字列の処理をより容易にすることができます.
DataOutputStream
DataInputStream
String str1 = "Hello java world!";
OutputStream outputStream = null;
DataOutputStream dataOutputStream = null;
try{
// FileOutputStream 객체인 outputSteam 을 이용해 바이너리 타입으로 데이터를 파일에 출력
outputStream = new FileOutputStream("C:\\java\\pjt_ex\\hello.txt");
// outputStreem 을 인자로 주어서 바이트 타입을 본래 타입(문자열) 로 변경해서 출력
dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF(str); //
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (dataOutputStream != null) dataOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
try{
if (outputStream != null) outputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
BufferedReader, BufferedWriter
Reference
この問題について(入力と出力), 我々は、より多くの情報をここで見つけました https://velog.io/@msung99/입력과-출력テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol