一个重要并且常用的I/O任务是将序列从文本文件读到内存中。SeqIOTools提供很多静态方法能够将文件读到Biojava中。
解决方案有很多。方案一更特别,方案二更通用。
方案一
[code lang="java"]
import java.io.*;
import java.util.*;
import org.biojava.bio.*;
import org.biojava.bio.seq.db.*;
import org.biojava.bio.seq.io.*;
import org.biojava.bio.symbol.*;
public class ReadFasta{
//第一个参数是文件名,第二个参数是字母表
public static void main(String[] args){
try{
// 创建文件输入
String filename = args[0];
BufferedInputStream is = new BufferedInputStream(new FileInputStream(filename));
// 获得正确的字母表
Alphabet alpha = AlphabetManager.alphabetForName(arg[1]);
// 从文件中获得代表所有序列的序列库
SequenceDB db = SeqIOTools.readFasta(is,alpha);
}
catch(BioException ex){
// 不是Fasta格式或者错误的字母表
ex.printStackTrace();
}
catch(NoSuchElementException ex){
// 没有Fasta序列
ex.printStackTrace();
}
catch(FileNotFoundException ex){
// 读文件出错
ex.printStackTrace();
}
}
}
[/code]
方案二
[code lang="java"]
import java.io.*;
import org.biojava.bio.*;
import org.biojava.bio.seq.*;
import org.biojava.bio.seq.io.*;
public class ReadFasta2{
//这个程序能读取SeqIOTools支持的所有文件
//第一个参数是文件名,第二个参数是文件格式(Fasta,genbank,etc),第三个参数是字母表
//注意大小写敏感
public static void main(String[] args){
try{
//准备一个缓冲
BufferedReader br = new BufferedReader(new FileReader(args[0]));
String format = args[1];
String alphabet = args[2];
// 获得一个序列遍历器
// SeqIOTools.fileToBiojava()返回一个对象。如果文件是比对的格式如MSF,则返回一个比对对象。
SequenceIterator iter = (SequenceIterator)SeqIOTools.fileToBiojava(format,alphabet,br);
}
catch(FileNotFoundException ex){
ex.printStackTrace();
}
catch(BioException ex){
ex.printStackTrace();
}
}
}
[/code]