1、下载安装NCBI后,在NCBI_HOME/blast-release/下新建目录db
2、添加环境变量BLASTDB=NCBI_HOME/blast_release/db
3、下载swissport数据库(或其它数据库)到db文件夹
PS1:在java程序中调用blast命令,出现了很奇特的情况:
String blastcmd1 = "cmd /c blastp -db swissprot -query inputfile.fa -out outputfile.txt -evalue 10 -threshold 1.0E-9 -outfmt \"10 sacc\";
String blastcmd2 = "cmd /c psiblast -db swissprot -query inputfile.fa -num_iterations 3 -evalue 0.001 -out_ascii_pssm pssmOutFile.txt";
Process process = Runtime.getRuntime().exec(blastcmd1);语句能正常运行;可
Process process = Runtime.getRuntime().exec(blastcmd2);语句执行时则系统一直显示在运行,没有结果出来,psiblast程序被挂起,可如果把blastcmd2字符串改为:"cmd /c start psiblast -db ....."则可以在一个新的命令行窗口运行并得到结果,不过此时process.waitFor()并不会等待psiblast命令执行完就返回0.
该如何解决。---2016/6/26
PS2: 终于解决了以上问题。经查阅网络资源,发现之所以psiblast程序会被挂起的原因是psiblast的输出流有太多内容,导致线程挂起。
修改后程序如下:
String blastcmd = "cmd /c psiblast -db swissprot -query inputfile.fa -num_iterations 3 -evalue 0.01 -out_ascii_pssm pssmOutFile.txt";
Process process = Runtime.getRuntime().exec(blastcmd);
//read the InputStream or OutputStream of Dos command line
BufferedReader breader = new BufferedReader( new InputStreamReader(process.getInputStream()));
while(( s = breader.readLine()) != null)
System.out.println(s);
breader.close();
int exitValue = process.waitFor();
if (exitValue == 0) {.............}
(感谢小胖的博客: http://blog.163.com/he_junwei/blog/static/19793764620134204431408)--2016/7/2