[Applet] Ecrire dans un fichier temporaire [Résolu]

Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
- - Dernière réponse : pikapote
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
- 12 mai 2010 à 16:22
Bonjour tout le monde,

Je souhaiterais écrire dans un fichier temporaire.

Je m'explique...

J'utilise la bibliothèque itext pour créer un PDF à partir de deux fichiers :
1. Fichier .txt
2. Fichier .pdf (pour le design du fichier final)

Je dois créer un fichier PDF à partir de ces deux fichiers, sans l'enregistrer sur le serveur. Il faut donc que je puisse l'écrire dans la mémoire directement.

Je pense que cela se situe à ce niveau là de mon code (pour le moment je le fais en local) :

PdfSmartCopy copy = new PdfSmartCopy(document, new FileOutputStream(PATH));



Donc, je ne vois pas trop comment faire, étant donné qu'il me demandé un chemin de fichier.

Merci pour votre aide ...


Tout est bon dans l'cochon !
Afficher la suite 

Votre réponse

20/35 réponses

Meilleure réponse
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
3
Merci
Salut,

Oui ca j'ai bien compris, mais ce n'est pas aussi simple : une applet java est extrêmement limitée (pour des raisons évidentes de sécurité) si elle n'est pas signée : par exemple, tu ne peux pas accéder au disque dur de l'utilisateur, et donc, créer des fichiers...

Il te faut donc signer ton applet (fais une petite recherche sur le net pour savoir comment utiliser les outils du jdk java pour faire cà) afin de pouvoir créer ton fichier temporaire.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 96 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
3
Merci
Salut,

La classe File te permet de faire cà très simplement :
File temp = File.createTempFile("nom",".tmp");
temp.deleteOnExit(); // si tu veux que le fichier soit automatiquement supprimé à la fermeture du programme. (à tester avec une applet si ca fonctionne cependant)

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 96 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
3
Merci
Salut,

essaye ainsi alors :
String tempPath = System.getenv("TEMP");

// Extraction du fichier de lancement
String path = tempPath + File.separatorChar + "tonFichier.tmp";

File fichier = new File(path);
if (!fichier.exists()) {
fichier.createNewFile();
}

______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 96 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_DARKSIDIOUS
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Attention, pour pouvoir créer un fichier, il faut absolument que ton applet soit signée, sinon tu ne pourras pas.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
Comment ça ? J'aurais simplement voulu que mon applet puisse créer un fichier temporaire, et après, charge à l'utilisateur de savoir s'il veut simplement l'ouvrir ou l'enregistrer ...


Tout est bon dans l'cochon !
Commenter la réponse de pikapote
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
Je suis d'accord pour les questions de sécurité, mais je ne pensais pas qu'il fallait que l'applet soit également signée pour créer un fichier temporaire.

Je vais donc regarder dans cette direction ... Merci !


Tout est bon dans l'cochon !
Commenter la réponse de pikapote
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Et si, sinon java serait une aussi grosse passoire que la technologie ocx de microsoft...
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
Tout de suite, ça balance sur Microsoft ! =)


*************************
Here we go !
Commenter la réponse de pikapote
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

C'est pas ma faute si la technologie activeX est autant boudé pour la conception de site web moi

Non troll à part, l'applet java non signée est inoffensive pour un pc (à moins d'utiliser une faille de sécurité, il n'est pas possible de casser un PC en utilisant une applet java). Le fait de la signer permet à l'utilisateur de refuser son exécution s'il ne veut pas prendre de risque, mais au moins, il a la certitude que l'applet qu'il exécute correspond bien à l'applet qui est situé sur le serveur, et donc, que c'est bien le site qui la produit, et non un pirate qui a remplacé à la volée l'applet par une autre qui est vérolée.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
Oui, tout ça j'en suis conscient, même si je suis novice en développement.

Pour que tu puisses mieux me cerner, j'ai 2 ans d'ancienneté en informatique en tant que consultant. J'ai fait des études d'ingénieur en informatique, mais ce n'est pas le code qui me faisait exceller !!! =)

Pour des raisons privées, et pour un challenge intéressant surtout, je suis repassé au développement. Je ne pensais plus jamais retouché au Java de ma vie, il y a deux ans quand j'ai fini mes études. Et pourtant, me revoilà, non sans mal !!!

C'est une technologie intéressant grâce au fait qu'elle soit multi-plateforme, mais ce n'est pas inné pour moi de développer en Java... et développer tout court aussi d'ailleurs ! =)

Merci en tout cas pour ton aide. Je suis passé sur un autre sujet qui devrait me prendre un jour je pense, et je reviendrai à la charge sur mon applet par la suite. Je te solliciterai de nouveau si besoin.

Encore merci et bonne soirée !


*************************
Here we go !
Commenter la réponse de pikapote
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Java est bien plus simple (à mon avis à en croire certaines de mes expériences douloureuses) que certains autres langages (C++ par exemple ou javascript).
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
Bonjour, me revoilà !!! =)

Alors, j'ai bien réussi à signer mon applet. C'est cool ... Par contre, j'ai un élément que je n'ai toujours pas compris : comment écrire mon fichier en tant que fichier temporaire Internet.

Il faut bien que je passe un chemin de fichier avec son nom pour pouvoir le créer ? Or, je ne peux pas connaitre le chemin exact sur chaque poste des utilisateurs, de l'emplacement de leurs fichiers temporaires. Comment faire ...?

Merci d'avance pour vos réponses !


*************************
Here we go !
Commenter la réponse de pikapote
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
C'est encore moi !

Avant tout, merci pour ton aide, car j'ai réussi à faire tout ce que tu m'as dit... sauf écrire mon fichier temporaire =(

Voici le message de la console, si ça peut t'aider à comprendre pourquoi.
Reading certificates from 55998 http://192.168.20.201/site/iText-5.0.2.jar | C:\Users\cpot\AppData\LocalLow\Sun\Java\Deployment\cache\6.0\0\483cb00-4cc66bad.idx
java.lang.SecurityException: Unable to create temporary file
at java.io.File.checkAndCreate(Unknown Source)
at java.io.File.createTempFile(Unknown Source)
at java.io.File.createTempFile(Unknown Source)
at TPrintJ.lectureSource(TPrintJ.java:85)
at TPrintJ.start(TPrintJ.java:55)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception : java.lang.SecurityException: Unable to create temporary file


Je vais regarder de mon côté, mais n'hésite pas à me dire si tu as une idée. Merci d'avance.


*************************
Here we go !
Commenter la réponse de pikapote
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Est-ce que ton applet est signée lorsque tu as cette erreur ?
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
Oui, elle est signée et j'ai même passer l'étape d'acceptation par l'utilisateur.


*************************
Here we go !
Commenter la réponse de pikapote
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Vérifie les droits d'accès sur le dossier temp alors, sait-on jamais.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
J'ai beau mettre tous les droits sur le dossier temporaire (C:\Users\login\Temp), ça ne change rien ... :'(

Je ne vais jamais m'en sortir, c'est pas possible ! =) En tout cas merci pour ta patience et le temps que tu prends pour répondre aux questions des développeurs en herbe, comme moi ! =)


*************************
Here we go !
Commenter la réponse de pikapote
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Essaye de voir les droits sur c:\Windows\Temp également.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
C'est toujours le même souci... désolé !


*************************
Here we go !
Commenter la réponse de pikapote
Messages postés
66
Date d'inscription
lundi 13 mars 2006
Dernière intervention
11 mars 2014
0
Merci
Alors, j'ai toujours la même erreur. Je vais résumer ce que j'ai fait, et tu pourras voir s'il manque des étapes, ou non.


J'ai créé mon .jar
J'ai créé mon .keystore et signé mon .jar comme noté sur le net.
keytool -genkey -alias monAlias
jarsigner monJar.jar monAlias

Cette opération, je l'ai faite également pour le deuxième .jar que j'utilise, à savoir iText.

Pour les deux, le système m'a confirmé la création de la signature avec une date de validité de 6 mois.

----------

Ensuite, j'essaie d'écrire dans un fichier temporaire, car le but, à terme, est que l'utilisateur est le choix de faire ce qu'il veut après (soit par l'intermédiaire d'une pop-up "Ouvrir/Enregistrer/Annuler", soit en ouvrant directement le fichier avec un lecteur pdf).
String tempPath = System.getenv("TEMP");

// Extraction du fichier de lancement
String path = tempPath + File.separatorChar + "camarche.pdf";

file_temp = new File(path);
if (!file_temp.exists()) {
file_temp.createNewFile();
}
file_temp.deleteOnExit();

Bien entendu, tout ceci est dans le try catch qui convient.
Mon File file_temp est déclaré en variable globale (je ne sais pas si ça s'appelle exactement comme cela), pour des besoins au sein du programme.

-----------

Puis, je fais une copie du PDF d'origine, dans le but de réécrire au sein de celui-ci.

PdfSmartCopy copy = new PdfSmartCopy(document, new FileOutputStream(file_temp));

Toujours dans le try catch qui convient.

----------

Pour finir, j'ai vérifié les droits des répertoires suivants :
[list]
C:\Windows\Temp
C:\Users\cpot\AppData\Local\Temp
/list
Je les ai rendu "non lecture seule", et ajouter des droits pour le groupe "Tout le monde". Cependant, si le souci vient de cette action, ça risque d'être compliqué de notre côté à maintenir, car on ne peut connaître, à l'avance, les caractéristiques des postes clients.

-----------

Je ne sais pas si ça t'aidera à comprendre mon souci.

*************************
Here we go !
Commenter la réponse de pikapote

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.