본문 바로가기

나는 엔지니어/JAVA

자바 스트림 객체


 스트림

 취급 데이터

 System.in.read

 

 정수 ( 1바이트 )

 InputStreamReader

 스트림 지정

 정수

 PrintStream  스트림 지정

 문자 / 스트림 객체

 FileOutputStream

 스트림 지정 

 바이트[] / 정수

 Scanner  스트림 지정

 문자 / 스트림 객체

 File

 경로 지정

 파일 스트림 생성 

 FileReader

 스트림 지정

 경로 / File 객체

 FileWriter  스트림 지정  경로 / File 객체
     




스트림 생성
File f = new File("src/stream/InputStreamTest.java");
System.in / System.out
직접 경로 지정
PrintStream ps = new PrintStream("test2.txt");
문자열로 인식한다.
Scanner s = new Scanner("src/stream/1.txt");
파일 스트림으로 인식한다.
Scanner s = new Scanner(new File("src/stream/1.txt"));







.read : 1바이트씩 읽어 들인다.

public static void main(String[] args) 

{

// TODO Auto-generated method stub

try 

{

while(true)

{

int b = System.in.read();

if(b == -1) break;

System.out.print((char)b);

}

catch (IOException e) 

{

// TODO Auto-generated catch block

e.printStackTrace();

}

System.out.print("exit stream");

}





.InputStreamReader : 2바이트씩 읽어 들인다.

public static void main(String[] args)

{

// TODO Auto-generated method stub

InputStreamReader ir = new InputStreamReader(System.in);

int b;

while(true)

{

try

{

b = ir.read(); <- Java IO 데코레이터 패턴의 확장 


if( b != -1 )

System.out.print((char)b);

else

break;

}

catch(IOException e)

{

;

}

}

}


.FileReader : 파일을 읽어 들인다.
public static void main(String[] args) 
{
// TODO Auto-generated method stub
try 
{
FileReader fr = new FileReader("src/stream/InputStreamTest.java");
int b;
while(true)
{
b = fr.read(); <- Java IO 데코레이터 패턴의 확장
if( b == -1)
break;
System.out.print((char)b);
}
catch (FileNotFoundException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

.FileOutputStream : 한 글자씩 읽어 와서 파일에 한글자씩 출력한다.
public static void main(String[] args) 
{
try 
{
FileReader fr = new FileReader("src/stream/InputStreamTest.java");
FileOutputStream fo = new FileOutputStream("test.txt");
int b;
while(true)
{
b = fr.read();  <- Java IO 데코레이터 패턴의 확장
if( b == -1)
break;
System.out.print((char)b);
fo.write((char)b); <- Java IO 데코레이터 패턴의 확장
}
catch (FileNotFoundException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

.FileWriter : Scanner을 이용해서 한줄씩 읽어와서 파일에 한 줄씩 출력한다. 
public static void main(String[] args) 
{
// TODO Auto-generated method stub
try 
{
File f = new File("src/stream/InputStreamTest.java");
Scanner s = new Scanner(f);
FileWriter fw = new FileWriter("test1.txt");
int i = 0;
while(s.hasNext())
fw.write(i + " " + s.nextLine() +"\n"); <- Java IO 데코레이터 패턴의 확장
i++;
}
fw.close(); 
catch (FileNotFoundException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}

. PrintStream  : Scanner을 이용해서 한줄씩 읽어와서 PrintStream 을 이용해 파일에 한 줄씩 출력한다. 
public static void main(String[] args) 
{
// TODO Auto-generated method stub
try 
{
File f = new File("src/stream/InputStreamTest.java");
Scanner s = new Scanner(f);
FileOutputStream fw = new FileOutputStream("test1.txt");
PrintStream ps = new PrintStream(fw);
int i = 0;
while(s.hasNext())
{
ps.println(i + " " + s.nextLine());
i++;
}
fw.close();
catch (FileNotFoundException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
catch (IOException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
 

샘플 ) 파일을 읽어서 ":" 문자를 구분자로 데이터를 취득하고 다른 파일에 출력한다.
    데이터와 데이터 사이에는 공백을 두고 구분한다.


public static void main(String[] args) 
{
// TODO Auto-generated method stub
try 
{
PrintStream ps = new PrintStream("test2.txt");
Scanner s = new Scanner(new File("src/stream/1.txt"));
ps.println("NEW FILE");
while(s.hasNext())
{
String data = s.nextLine();
// StringTokenizer stoken = new StringTokenizer(data, ":");
// while(stoken.hasMoreTokens())
// {
// ps.print(stoken.nextToken() + " ");
// }

for(String tokenString : data.split(":"))
{
ps.print(tokenString + " ");
}
}
catch (FileNotFoundException e) 
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}