Monday, January 15, 2007

Java for Bioinformatics, File I/O

스트림을 통한 입출력

exam) 파일 복사

FileInputStream input;
FileOutputStream output;

String file1=args[0];
String file2=args[1];

try{
input=new FileInputStream(file1);
output=new FileOutputStream(file2);

int b;

while((b=input.read())!=-1){
output.write(b);

}
input.close();
output.close();

}catch(IOException e){
//
e.printStackTrace();
}

버퍼를 이용한 파일 입출력

미리 일정량의 데이터를 읽어 메모리(버퍼)에 저장하는 방법을 사용하여
속도의 향상을 가져온다.

exam) 파일 복사

try{
FileInputStream input=new FileInputStream(args[0]);
FileOutputStream output=new FileOutputStream(args[1]);
BufferedInputStream bufferinput=new BufferedInputStream(input);
BufferedOutputStream bufferoutput=new BufferedOutputStream(output);

int b;

while((b=input.read())!=-1){
output.write(b);

}
input.close();
output.close();

}catch(){}


텍스트 파일 입출력을 위한 Reader/Writer

앞서의 Fileinoutstream or fileoutputstream이 byte단위로 데이터를 처리했던데
반해, 16 bit UNICODE 문자 단위로 처리한다. 한글의 경우 16bit로 표현되므로,
앞서의 경우처럼 byte(8bit)단위로 읽었을 때는 반쪽만 읽어 반환하여 문자가
깨지는 경우가 발생한다.

exam)


try{
FileReader read=new FileReader(args[0]);

int b;

while((b=read.read())!=-1){
System.out.println((char)b);

}
read.close();
}

exam2) 버퍼 이용

try{
FileReader read=new FileReader(args[0]);
BufferedReader r=new BufferedReader(read);

String line;

while((line=r.readLine())!=null){
System.out.println(line);

}
read.close();
r.close();
}

newLine() 메소드 // BufferedWrite 객체에 '\n'을 넣어준다.


Byte 스트림을 문자 스트림으로 변환

InputStreamReader를 통해 바이트 스트림이 문자 스트림으로,
OutputStreamWriter을 통해 문자 스트림이 바이트 스트림으로 변환된다.


try{
FileInputStream input=new FileInputStream(args[0]);
FileOutputStream output=new FileOutputStream(args[1]);

InputStreamReader reader=new InputStreamReader(input);
OutputStreamWriter writer=new OutputStreamWriter(output);

int b;

while((b=reader.read())!=-1){
writer.write(b);

}

}


FASTA file 읽기 예제

String name;
String seq;
StringBuffer seqbuf=new StringBuffer();

try{

BufferedReader read=new BufferedReader(new FileReader(args[0]));
while((line=read.readLine())!=null){
line=line.trim();
if(line.length()==0) continue;
if(line.charAt(0)=='>'){
name=line.substring(1); // >enzyme1 에서 위치 1 이후의 문자열 enzyme1을 반환
}else{
seqbuf.append(line);

}
read.close();
seq=seqbuf.toString();
}
}

인터넷 resourse 읽어들이기

java.net 패키지의 URLConnection 클래스 이용.

exam)

import java.net.*;
String urlstr="http://~~"

URL url=new URL(urlstr);
URLConnection c=url.openConnection();

BufferedReader re=new BufferedReader(new InputStreamReader(c.getInputStream());