Bonjour
Voici mon problème. Dans une servlet, je rassemble des nombres correspondant au préfixe de fichiers à partir d'un SGBD dans un ArrayList.
Puis, je parcours cet ArrayList et j'effectue les opérations nécessaires de concaténations pour avoir mes noms de fichiers. En même temps, lorsque j'ai le nom d'un fichier, j'appelle une méthode qui va lancer un processus externe qui traitera ce fichier (Blast, pour ceux qui connaissent).
Seulement, Blast ne traite pas les 4 premiers fichiers de ma liste Le programme m'envoit cette erreur :
Or, ce fichier existe et ses droits ne sont pas différents des autres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 [blastall] FATAL ERROR: blast: Unable to open input file /home/gldavid/Blaster/7167fb7ba4806e855959d04f94048092/7167fb7ba4806e855959d04f940480921155290747/3058.txt
Voici la partie "main" de ma servlet:
Et la méthode blast():
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 String cluster = "/home/gldavid/Blaster/"+id_user+"/"; java.util.Iterator i = numamplicons.iterator(); int retour=0; while(i.hasNext()){ Long l = (Long)i.next(); java.io.File clusterfile = new java.io.File(cluster+id_job+"/"+l.longValue()+".txt"); retour = blast(clusterfile); if(retour==1){ pw.print("<br /><font color=\"#FF0000\"><b>Oops ! Mistakes !</b></font>"); break; } } if(retour==0) pw.print("Finished !");
Je précise que manuellement, Blast fonctionne avec ce fichier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public int blast(java.io.File file){ String tmp = file.getAbsolutePath(); String xml = file.getAbsolutePath().replace(".txt", ".html"); String cmd = "ssh gldavid@mycluster blastall -p blastn -d nt -i "+tmp+" -o "+xml+""; try{ java.lang.Process process = Runtime.getRuntime().exec(cmd); process.waitFor(); java.io.BufferedReader error = new java.io.BufferedReader(new java.io.InputStreamReader(process.getErrorStream())); String s = ""; if(error.ready()){ while((s=error.readLine())!=null){ pw.print("<font color=\"#FF0000\"><b>"+s+"</b></font><br />"); } return 1; } } catch(IOException ioe){ Blaster.this.pw.print("<font color=\"#FF0000\"><b>7 : "+ioe.getMessage()+"</b></font><br />"); Blaster.this.destroy(); } catch(InterruptedException ie){ Blaster.this.pw.print("<font color=\"#FF0000\"><b>8 : "+ie.getMessage()+"</b></font><br />"); Blaster.this.destroy(); } return 0; }
Merci d'avance de vos réponses !
@++
Partager