Bonjour
Je voudrai tester si un fichier es utilisé par un autre processus.
J'ai essayémais ça retourne true même si le fichier est ouvert.
Code : Sélectionner tout - Visualiser dans une fenêtre à part canRead() et canWrite()
thanks
Bonjour
Je voudrai tester si un fichier es utilisé par un autre processus.
J'ai essayémais ça retourne true même si le fichier est ouvert.
Code : Sélectionner tout - Visualiser dans une fenêtre à part canRead() et canWrite()
thanks
Avec la classe File, tu ne peux pas. Ce que tu peux faire est créer un FileInputStream ou FileOutputStream, et faire un close().
Met un try/catch autour, et si une exception est lancée, c'est que close() a échoué, donc ton fichier est utilisé en lecture ou en écriture.
"Et tu comprendras pourquoi mon nom est l'Eternel, quand sur toi s'abattra la colère du Tout-puissant."
Salut,
Attention car cela peut être dangereux !Envoyé par Rayndell
Même si tu n'écrit rien dedans, le simple fait d'ouvrir un FileOutputStream effacera le contenu du fichier...
De plus, un même fichier peut être utilisé par plusieurs programme en même temps... donc tu n'obtiendras pas forcément d'exception...
@ k6971 Que veux-tu faire exactement ?
a++
J'ai un traitement qui lance un exceutable via Process.exec() et ce traitement a pour but de me rapatrier un fichier csv depuis la machine qui lance le traitement et cree ce fichier csv dans un nouveau dossier dont le nom est la date de lancement donnée en paramétre.
Et comme je dois parser ce fichier pour le mettre en base , dés fois il met du temps à se constituer(probléme réseau etc) et mon traitement plante.
J'ai fait un petit test du stylemais file.canRead() ne fait que tester si j'ai les droits de lecture de la mê façon que file.canWrite().
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 do { try { Thread.sleep(10000); } catch (InterruptedException e) { e.getMessage(); } try { file= new File(fileToUse); fileInputStream = new FileInputStream(fileToUse); } catch (FileNotFoundException e1) { e1.getMessage(); comments.add("Le fichier "+fileToUse+" n'a pas été chargé => probléme fichier non trouvé"); } } while (!file.canRead());
La seule chose que je veux savoir c'est est ce que ce ficheir est libre d'acés c'est à dire si aucun process ne l'a en cours et le mettre comme condition de mon do while.
Pourquoi ne pas tout simplement attendre la fin du process avec la méthode waitFor() ?
a++
donc j'ai rajouté le waitFor() sur l'execution de mon process.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 try { process = Runtime.getRuntime().exec(shellCommand); process.waitFor(); } catch (IOException ioe) { externalVarDB.getIOException(ioe); comments.add("the file APPTMP.csv was not executed => execution problem"); }catch (InterruptedException e) { comments.add("there is a problem of process execution"); }
Attention à bien fermer les flux du process si tu ne les utilises pas :
Sinon tu pourrais avoir des cas d'interblocages (il y a plein d'info là dessus sur le forum)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 process = Runtime.getRuntime().exec(shellCommand); process.getOutputStream().close(); // close stdin process.getInputStream().close(); // close stdout process.getErrorStream().close(); // close stderr process.waitFor();
a++
c'est pour ça que j'ai un temps d'arrêt asez long .
thanks
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager