J'utilise le code Java pour télécharger des fichiers en utilisant FTP. Quand je compile et exécute le code tout fonctionne parfaitement, mais si je le lance en tant que service Windows en utilisant Java Service Launcher, il ne se connecte pas du tout au serveur FTP (il fait juste le reste du travail, c'est déplacer des fichiers archiver le dossier). Btw, existe-t-il un meilleur moyen de tester la sortie du processus enfant que d'écrire son résultat dans un fichier, plutôt que d'analyser le contenu du fichier? Voici le code:Le code Java pour le téléchargement FTP ne fonctionne pas correctement si lancé en tant que service Windows
Runtime runtime = Runtime.getRuntime();
String[] cmd = {"c:\\ftp\\putskripta.bat"};
Process p1 = runtime.exec(cmd);
p1.waitFor();
File izlaz = new File("C:\\ftp\\izlaz.txt");
int arrlen = 10000;
byte[] infile = new byte[arrlen];
FileInputStream fis = new FileInputStream(izlaz);
BufferedInputStream bis = new BufferedInputStream(fis);
DataInputStream dis = new DataInputStream(bis);
int filelength = dis.read(infile);
String filestring = new String(infile, 0, 10000);
CharSequence[] sekvenca = {"Invalid command", "Not connected"};
if (!filestring.contains(sekvenca[0]) && !filestring.contains(sekvenca[1]))
{
File uploads = new File("C:\\ftp\\Uploads");
File[] uploadfiles = uploads.listFiles();
int godina = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
int mjesec = Calendar.getInstance().get(Calendar.MONTH)+1;
int dan = Calendar.getInstance().get(Calendar.DAY_OF_MONTH);
for (int i = 0; i < uploadfiles.length; i++) {
if (uploadfiles[i].getName().startsWith("ARTST") || uploadfiles[i].getName().startsWith("BESTE") || uploadfiles[i].getName().startsWith("LAGER") || uploadfiles[i].getName().startsWith("AVISE") || uploadfiles[i].getName().startsWith("KUNDE") || uploadfiles[i].getName().startsWith("BORDE") || uploadfiles[i].getName().startsWith("ENTLA")) {
File destinacijaFoldera = new File("C:\\ftp\\MovedUploads\\" + godina + "\\" + mjesec + "\\" + dan);
File destinacijaFajla = new File("C:\\ftp\\MovedUploads\\" + godina + "\\" + mjesec + "\\" + dan + "\\" + uploadfiles[i].getName());
if (!destinacijaFoldera.isDirectory()) {
destinacijaFoldera.mkdirs();
}
File temp = new File(destinacijaFoldera, uploadfiles[i].getName() + "_" + String.valueOf(Calendar.getInstance().get(Calendar.HOUR_OF_DAY)) + String.valueOf(Calendar.getInstance().get(Calendar.MINUTE)) + String.valueOf(Calendar.getInstance().get(Calendar.SECOND)));
if (!destinacijaFajla.exists()) {
uploadfiles[i].renameTo(destinacijaFajla);
}
else{
uploadfiles[i].renameTo(temp);
}
uploadfiles[i].renameTo(new File(destinacijaFoldera, uploadfiles[i].getName()));
}
}
}
else {izlaz.delete(); throw new Exception("Neuspio pokusaj uploada");}
izlaz.delete();
Juste au cas où, voici le code pour "putskripta.bat"
@echo off
cd c:\ftp\Uploads
ftp -s:c:\ftp\putkomande.txt -i localhost > c:\ftp\izlaz.txt
Merci pour la réponse rapide: D Je n'utilise pas de code java pour me connecter au serveur ftp. Le code est dans le script batch. A côté de cela, j'ai créé un service de téléchargement supplémentaire à partir du serveur FTP, et cette application fonctionne bien comme un service. J'ai même essayé d'exécuter les 4 premières lignes de code seul (la partie de téléchargement) comme un service Windows et cela a fonctionné. Je suis assez confiant que le problème est dans le reste du code. Y a-t-il un problème avec les services Windows qui créent de nouveaux processus (im appelant le script batch comme un nouveau processus)? Cela pourrait-il être un problème? – Eedoh