[Applet] Ecrire dans un fichier temporaire

Résolu
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 - 4 mai 2010 à 12:00
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre 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 !

35 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mai 2010 à 14:38
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
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 mai 2010 à 14:12
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
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 mai 2010 à 11:07
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
3
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mai 2010 à 13:25
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
4 mai 2010 à 14:02
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 !
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
4 mai 2010 à 16:09
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 !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mai 2010 à 16:14
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
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
4 mai 2010 à 16:31
Tout de suite, ça balance sur Microsoft ! =)


*************************
Here we go !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mai 2010 à 16:49
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
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
4 mai 2010 à 17:20
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 !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
4 mai 2010 à 17:24
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
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
10 mai 2010 à 12:02
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 !
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
11 mai 2010 à 09:14
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 !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 mai 2010 à 09:19
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
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
11 mai 2010 à 09:22
Oui, elle est signée et j'ai même passer l'étape d'acceptation par l'utilisateur.


*************************
Here we go !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 mai 2010 à 09:47
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
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
11 mai 2010 à 10:10
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 !
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
11 mai 2010 à 10:14
Salut,

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

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
11 mai 2010 à 10:55
C'est toujours le même souci... désolé !


*************************
Here we go !
0
pikapote Messages postés 66 Date d'inscription lundi 13 mars 2006 Statut Membre Dernière intervention 11 mars 2014 1
11 mai 2010 à 11:33
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 !
0
Rejoignez-nous