Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
869 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Création de fichier multiples

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Création de fichier multiples

n°2056948
Toaster57
Posté le 15-02-2011 à 12:19:11  profilanswer
 

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.

mood
Publicité
Posté le 15-02-2011 à 12:19:11  profilanswer
 

n°2056949
flo850
moi je
Posté le 15-02-2011 à 12:28:35  profilanswer
 

Tu ne peux pas ouvrir le fichier juste en cas de besoin ?

n°2056960
Toaster57
Posté le 15-02-2011 à 13:20:51  profilanswer
 

C'est faisable mais question performance ca me ruine l'application, j'y avais déjà pensé...

n°2056976
rufo
Pas me confondre avec Lycos!
Posté le 15-02-2011 à 14:09:24  profilanswer
 

Je pense aussi que le nb de fichiers pouvant être ouvert en simultané dépend de l'OS (Linux ou Windows) et effectivement, s'il est 32 bits ou 64.
 
Comme le faisait remarquer flo850 (d'une manière indirecte), c'est pas normal d'avoir autant de fichiers à ouvrir en même temps, t'as donc un pb d'algo. Que ça ruine les perfs d'ouvrir fichier par fichier, c'est un peu étonnant mais bon, Java, c'est pas une bête de course non plus, du C serait peut-être plus approprié dans ton cas. C'est un peut comme vouloir faire du calcul matriciel sur de grosses matrices en php :/ C'est pas fait pour niveau perfs...
 
Après, si t'es obligé de faire ton dév en java, tu peux mettre en place le même genre de système que linux implémente pour écrire dans les fichiers. Il met d'abord les données en cache en ram puis effectue des écritures différées régulièrement pour vider le cache. Donc, en gros, tu crée un cache en mémoire qui représente tes fichiers comme s'ils étaient ouverts, tu mets les données à écrire dedans et de temps en temps, tu effectues des écritures ;) Ca devrait résoudre ton pb de perfs.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2056983
Toaster57
Posté le 15-02-2011 à 14:27:20  profilanswer
 

Merci pour la réponse, je vais voir pour implémenter ca dans mon application et je vous tiens au courant.
S'il y en a d'autre qui ont des pistes, n'hésitez pas.
 
Cordialement
Toaster

n°2056990
esox_ch
Posté le 15-02-2011 à 15:00:21  profilanswer
 

Sinon tu t'en sors pas en ayant seulement 1 ou 2 fichiers qui sont le "merge" de tous tes petits fichiers?
En utilisant des formats genre XML tu peux ensuite naviguer rapidement dans ton système. Une fois que t'as fait tout ton traitement, tu expédies tout ça dans une moulinette qui te recrée tes X fichiers, un par un


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2056994
rufo
Pas me confondre avec Lycos!
Posté le 15-02-2011 à 15:06:46  profilanswer
 

Pour pouvoir mieux t'aider, faudrait nous en dire plus sur ce que tu cherches à implémenter.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2056999
zapan666
Tout est relatif
Posté le 15-02-2011 à 15:15:57  profilanswer
 

flo850 a écrit :

Tu ne peux pas ouvrir le fichier juste en cas de besoin ?


 

Toaster57 a écrit :

C'est faisable mais question performance ca me ruine l'application, j'y avais déjà pensé...


fait un pool de fichier qui va manager le nombre de fichier ouvert  : il en ouvre toujours 100 au maximum. Quand tu as besoin d'ouvrir un nouveau fichier non gérer par le pool, le pool en ferme un autre...


---------------
my flick r - Just Tab it !
n°2057029
Toaster57
Posté le 15-02-2011 à 16:48:38  profilanswer
 

Merci à vous tous pour les réponses,  
au final j'ai travaillé tout en mémoire, les données sont stockées dans des structures appropriées en mémoire et écrite toutes en même temps à la fin une fois que l'algo est passé.
Le 1er post de rufo m'a bien mis sur la voie
 
Bien à vous
Toaster


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Création de fichier multiples

 

Sujets relatifs
dans quel fichier inclure mabibli.h[VBA Excel] Copie de données d'un fichier vers un autre
problème macro import fichier text excelCréation d'un logiciel de facturation pour PME
SPIP: afficher le fichier css selectionnéParser un fichier BibTex pour l'insérer dans une bdd MySQL
déterminer le nombre de lignes d'un fichier texte[Batch] Script de comptage du nombre d'occurrences dans un fichier
Bash - curl - Upload fichier via http[PHP]Envoyer une fichier à un utilisateur sans lui donner l'adresse
Plus de sujets relatifs à : Création de fichier multiples


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR