Bonjour,
dans le cadre de nom travail, je suis amené à créer une application qui doit ouvrir un grand nombre de fichiers en simultané. Lesdits fichiers ne doivent pas être refermé de suite après qu'une chose soit écrite dedans, car il est possible qu'une autre chose soit écrite dedans plus tard dans l'exécution du programme.
A l'heure actuelle mon appli se déroule comme ceci :
- ouverture de X fichiers (X pouvant être un nombre très grand) par exemple 100000 fichiers!
- un algorithme particluier écrit dans les divers fichiers (une boucle écrit un string dans un fichier à chaque itération, mais on ne peut pas savoir à l'avance quel fichier)
- fermeture des fichiers
Le problème que je rencontre se situe à l'ouverture des fichiers car sur de très grandes valeurs de X, la JVM me rapporte l'erreur suivante :
An IO error occured.
java.io.FileNotFoundException: ../../experience//8983.0-13983.0.basenum (Too many open files)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
at java.io.FileWriter.<init>(FileWriter.java:46)
at preprocessing.SimilarBiclusters.initFiles(SimilarBiclusters.java:133)
at preprocessing.SimilarBiclusters.start(SimilarBiclusters.java:36)
at mains.MainSimilarBiclusters.main(MainSimilarBiclusters.java:30) |
Je suppose que cela veux dire que j'ai trop de fichiers ouverts en même temps, mais je ne vois pas comment je pourrai faire autrement.
Donc si vous avez des idées, je suis preneur.
En d'autres termes, comment changer dans la JVM le nombre maximum de descripteurs ouverts,
cela dépend il de l'architecture ? 32bits vs 64bits ?
PS : j'ai fait quelques recherches sur le net sans résultats.
Merci par avance.