IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

mode d'ouverture fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut mode d'ouverture fichier
    Bonjour,

    Je souhaite créer un fichier qui aurait comme mode write-only. Or, je ne vois nul par dans la doc comment faire cela. En c/c++, on spécifie le mode d'ouverture dans un paramètre, en Java je ne vois pas comment faire cela.
    Merci pour votre aide,
    JULIEN

    [ Sujet déplacé depuis le forum J2EE par Viena ]
    Les Règles du Forum

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il suffit d'utiliser la classe FileOutputStream...

    a++

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Aucun élément dans la classe que tu m'as conseillé pour créer un fichier qui ne soit lisible par aucune appli si ce n'est la mienne pendant que j'écris dedans...

  4. #4
    Membre éclairé
    Inscrit en
    Juillet 2003
    Messages
    407
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 407
    Par défaut
    est ce que tu peux montrer ton besoin ??
    c pas clair ce que tu veux faire ,

    sinon , crée un fichier temporaire et sauvegarde le sous n'importe quel nom et qd tu t'assure que tu as tout écrit , renomme le
    (beh , c juste un intuition , j sais pas ce que tu veux faire)

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Je suis conscient qu'il y a des moyens tels que créer mon fichier dans un autre repertoire et le renommer, mais ce n'est pas très propre quoi.
    Tout ce que je veux, c'est avoir l'équivalent du c/c++ où l'on peut créer un fichier en mode d'accès "a" (il y a aussi a+, r, r+, w, w+).
    En résumé, je veux créer un fichier et ne le rendre accessible, même à la lecture, uniquement quand j'ai fini d'écrire dans ce fichier, à savoir après mon close. Comment se fait-il qu'un truc a priori aussi basic ne soit pas possible en Java?
    Merci pour vote aide,
    JULIEN

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par jmclej
    Tout ce que je veux, c'est avoir l'équivalent du c/c++ où l'on peut créer un fichier en mode d'accès "a" (il y a aussi a+, r, r+, w, w+).
    Si je ne me trompe pas tu parles de fopen(), et d'après la doc :
    a : Ouvre le fichier en écriture. Le fichier est créé s'il n'existait pas. Le pointeur de flux est placé à la fin du fichier.
    Donc "a" signifie accès en écriture avec ajout à la fin du fichier, et c'est bien ce que fair FileOutputStream lorsque tu utilises le constructeur avec paramètre append à true...


    Citation Envoyé par jmclej
    En résumé, je veux créer un fichier et ne le rendre accessible, même à la lecture, uniquement quand j'ai fini d'écrire dans ce fichier, à savoir après mon close. Comment se fait-il qu'un truc a priori aussi basic ne soit pas possible en Java?
    Accéssible à qui ? Aux autres programmes... Sache que l'option "a" de fopen() ne bloque pas l'accès en lecture au fichier depuis les autres applications...


    Si c'est malgré tout c'est bien ce que tu veux faire, il te faut utiliser le FileLock obtenu depuis le FileChannel de ton OuputStream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    FileOutputStream fos = new FileOutputStream(filename, true);
    FileLock lock = fos.getChannel().lock();
    try {
     
    	// ecriture du fichier
     
     
    } finally {
    	lock.release();
    }
    Mais le lock dépend du système d'exploitation et peut différer d'une plateforme à l'autre...

    a++

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Salut,
    Je parle bien du fopen.
    En effet, le "a" décrit bien ce que tu dis, mais la description du "a+" dit que cela ouvre également le fichier en lecture, ce qui laisse supposer qu'avec le "a" le fichier n'était donc bien pas en mode lecture.
    Mais en effet, le FileLock semble faire ce que je veux. Et je ne comprends pas pourquoi il est platform-dependant, c'est nul. Enfin je dis ça mais je me doute qu'il doit bien y avoir une raison valable, enfin j'espère.
    Finalement le moyen le plus sûr semble donc bien être de passer par un fichier temporaire et de le renommer, je trouve ça un peu dommage mais bon. Pourquoi n'existe-t-il pas un mode d'accès décrivant chaque situation : R; R/W; W; Read-only; Read-only/Write; Write-only, etc.... ?
    Merci en tout cas pour vos aides.
    JULIEN

  8. #8
    Membre éclairé

    Inscrit en
    Mai 2002
    Messages
    328
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Mai 2002
    Messages : 328
    Par défaut
    La notion de flux est utilisée en Java pour répondre aux problèmes de mode d'accès.

    Toine

    PS : as-tu fait des tests pour t'assurer que le mode 'a' bloquait la lecture pour d'autres applis ?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    961
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 961
    Par défaut
    La philosophie de Java est différente de celle du C. C'est quelque chose qu'il faut bien comprendre avant d'essayer de faire quoi que ce soit.

    En Java, on utilise la notion de flux de données pour les entrées-sorties. Flux entrant ou flux sortant, qui peuvent être le clavier, l'écran, un fichier, la sortie d'une servlet, un buffer, la sortie où l'entrée standard sous Unix, etc...

    C'est un avantage. On peut facilement programmer une méthode qui prend en paramètre un flux. Peut importe ensuite si ce flux donne sur la sortie d'une servlet, un buffer en mémoire, ou un fichier. C'est quelque chose qui m'a été très utile pour la génération de documents pdf dans plusieurs contextes.

    Sachant celà, écrire à la fin d'un fichier, c'est écrire dans un flux sortant qui pointe vers un fichier. On utilise donc la classe FileOutputStream. La classe FileLock permet d'éviter les accès conccurents.

    L'API de ces classes vous donnera tous les détails. Si vous n'êtes pas convaincu de la supérioté de ces flux sur un simple fopen... Alors vous êtes un petit veinard car vous n'avez jamais eu à écrire une classe qui puisse être utilisée pour générer dynamiquement un pdf dont vous ignorez la destination!

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 909
    Billets dans le blog
    54
    Par défaut
    Bah meme en ISO C++ les chose semblent avoir change.
    Avant la standardisation STL/96 il y avait bien ios::share pour indiquer le partage du fichier (si mes souvenirs sont bons) ; or dans les libs STL recentes je ne vois rien de base (pour locker un fichier ou au contraire permettre de le partager) :

    std::ios_base::openmode ne contient que les membres suivants :

    The type is a bitmask type T3 that describes an object that can store the opening mode for several iostreams objects. The distinct flag values (elements) are:

    app, to seek to the end of a stream before each insertion.

    ate, to seek to the end of a stream when its controlling object is first created.

    binary, to read a file as a binary stream, rather than as a text stream.

    in, to permit extraction from a stream.

    out, to permit insertion to a stream.

    trunc, to delete contents of an existing file when its controlling object is created.
    Il doit donc falloir utiliser des lock ou des trucs proprietaires.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2003] Mode d'ouverture d'un fichier Excel
    Par ChChatou dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/05/2011, 15h44
  2. [XL-2003] Fichiers csv et mode d'ouverture
    Par crashtib dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/09/2010, 13h12
  3. Ouverture fichier en mode normal + Chemin d'accès au fichier à ouvrir
    Par rberniga dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/07/2010, 03h24
  4. mode d'ouverture d'un fichier
    Par siempre dans le forum C
    Réponses: 4
    Dernier message: 25/08/2009, 16h19
  5. Modes d'ouvertures des fichiers
    Par Invité dans le forum Bibliothèque standard
    Réponses: 6
    Dernier message: 02/08/2008, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo