OVH Cloud OVH Cloud

BufferedWriter : probleme d'ecriture

19 réponses
Avatar
Danious
Bonjour,
ayant recemment cree un jeu du serpent que j'ai mis en ligne a
l'adresse http://perso.wanadoo.fr/danious/serpent.html , j'ai voulu
mettre en place un systeme qui permet a tout joueur qui fait une partie
d'enregistrer son score apres avoir entre son nom lorsque le jeu est
fini. J'utilise pour cela les instructions (classiques) suivantes :

File scores=new File("scores.html");
FileWriter out=new FileWriter(scores,true);/*true : pour ecrire a la
fin*/
BufferedWriter b=new BufferedWriter(out);
String s=getNomEtScore();/*cette fonction permet d'octenir la chaine
a ecrire dans le fichier html*/
b.write(s+" <br> "); /*br : pour une nouvelle ligne dans le fichier
html*/
b.newLine();/*pas obligatoire*/
b.flush();/*vide le tampon*/
b.close();

IMPORTANT : ces instructions marchent parfaitement chez moi
mais quand je mets ce code en ligne (avec un fichier scores.html vide
dans le meme dossier que les classes de mon jeu du serpent) et que je
fais une partie en ligne, rien n'est ajoute au fichier scores.html du
site alors que les instructions sont les memes que celles qui marchent
dans mon dossier en local...
Apparemment c'est parce qu'il n'arrive pas a trouver le fichier
scores.html qui, pourtant, est bien place dans le meme dossier que les
classes. (ca ne marche pas non plus en ligne avec ./scores.html alors
que ca marche en local)

Je ne comprends vraiment pas ce qui cloche.

merci d'avance pour vos solutions

Danious

10 réponses

1 2
Avatar
Hervé AGNOUX
Danious wrote:

Apparemment c'est parce qu'il n'arrive pas a trouver le fichier
scores.html qui, pourtant, est bien place dans le meme dossier que les
classes. (ca ne marche pas non plus en ligne avec ./scores.html alors
que ca marche en local)

Je ne comprends vraiment pas ce qui cloche.



C'est parce que les applets n'ont pas le droit d'écrire sur le disque dur du
poste naviguateur.

Pour résoudre ce problème il faut, soit utiliser une base de données (par
exemple) sur le poste serveur, soit signer l'applet et demander au visiteur
l'autorisation d'utiliser son poste.

--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
Danious
Merci pour ta reponse.
Etant donne que c'est une page perso de wanadoo, je ne peux pas y creer
une base de donnees a moins de payer 9€ par mois (l'arnaque), donc je
vais plutot signer l'applet. J'ai trouve plusieurs tutoriaux ou sites
qui en parlent mais ils n'ont pas l'air tres complets (a moins que ce
soit vraiment facile a faire) en tout cas j'essayerai de signer moi
meme l'applet prochainement.

Si quelqu'un, justement, connais un site efficace qui en parle et qu'il
a deja teste personnellement, je suis preneur...

Danious
Avatar
Shorty
C'est assez simple de signer une applet avec un certificat autosigné.
En gros c'est juste une commande keytool pour générer le certificat
et une commande jarsigner pour signer le jar de ton applet.

Tu peux déjà voir :
http://java.sun.com/developer/technicalArticles/Security/Signed/
Avatar
damien guerin
Tu veux écrire sur le serveur ou sur la machine cliente??? Car c'est
pas pareil. Normalement c'est sans souci d'écrire sur le serveur...
Par contre sur le client, tu peux peut etre utiliser les cookies non?

Pour info, chez moi, ton jeu ne fonctionne pas, impossible de controler
le serpent...! Les touches HAUT BAS GAUCHE DROIT ne réponde pas à
l'applet...!
Avatar
Danious
Les touches HAUT BAS GAUCHE DROIT
ne réponde pas à
l'applet...!


pour jouer au serpent, il faut d'abord cliquer dans le cadre du jeu
pour que l'applet ait le "focus" sur le clavier.
J'aurai pu ajouter l'instruction requestFocus() dans le code pour que
le focus soit automatiquement active des que l'applet est lancee (c'est
a dire des que tu arrives sur la page) mais si je fais ca, il est alors
impossible de cliquer autre part car c'est l'applet qui a la priorite
sur tout (c'est a dire qu'il serait impossible de cliquer sur le lien
"menu principal" par exemple)

Si ca ne marche toujours pas en cliquant sur l'applet, il faudrait que
tu me tiennes au courant et a ce moment la j'ajouterai un traitement
pour d'autres touches (genre t,g,f,h en plus de haut,bas droite gauche)
car c'est possible que les constantes du style VK_UP (pour la touche
"haut") ne marchent pas chez tout le monde.

Tu veux écrire sur le serveur ou sur la
machine cliente???


Bonne question !
En fait, dans le code actuel, il n'y a qu'une instruction qui ecrit
dans un fichier du repertoire courant avec une simple instruction
write() d'un BufferedWriter associe a un fichier du repertoire courant.
Etant donne qu'en principe les classes sont copiees chez le client et
sont executees depuis chez lui, je pense que mon instruction va ecrire
chez lui. Evidemment, ce que je voulais faire, moi, c'est plutot que ca
ecrive sur le serveur, pour que les joueurs puissent voir leurs scores
affiches directement en ligne sur mon site.

Mais dans ce cas, comment je peux faire ca?

Danious

Avatar
damien guerin
Bon, désolé, après avoir cliquer, ça marche, on peut diriger le
serpent ;)
Si tu souhaites écrire sur le serveur, il n'y pas besoin de
certificat... Ta méthode devrait fonctionner, tu dois pouvoir écrire
dans le serveur...Tu devrais essayer d'écrire via un chemin en absolu,
ou bien faire afficher le répertoire courant, je pense que le pb vient
de là... Mais sinon, y a toujours la possibilité de passer par un
script perl ou php que ton applet appelerai mais ce n'est pas très
académique. Non, franchement, tu dois pouvoir le faire directement en
java.
Tiens moi nous au courant.
Avatar
vc.spam
Salut,

Pour écrire sur le serveur, il te faut des droits en écriture sur le
fichier. Le plus simple c'est peut-être d'utiliser l'adresse FTP du
fichier (regardes la classe java.net.URLConnection). Bref, tu utilises
la connexion dont tu te sers pour la MAJ de ton site. Par contre, en
décompilant l'applet, on aura l'accès complet à ton site perso
:-(...
Après, il faut penser au accès multi client. Quand deux personnes
modifient simultanéments... Il faudra gèrer ça...

A+

Vincent
Avatar
Bernard Koninckx
Les privilèges sur les fichiers en UNIX, LINUX sont si mes souvenirs sont
bons:
R : lecture
W : écriture
X : exécution

U : User
G : Group
O : Others
A : All

Il lui suffirait donc de mettre son flag en écriture et lecture pour les
Others et All ... C'est pas très catholique, m'enfin. C'est vrai aussi que
n'importe quel plaisantin peut flinguer son fichier puisqu'il sera
accessible par tous.

Je me trompe ???

Bernard

a écrit dans le message de
news:
Salut,

Pour écrire sur le serveur, il te faut des droits en écriture sur le
fichier. Le plus simple c'est peut-être d'utiliser l'adresse FTP du
fichier (regardes la classe java.net.URLConnection). Bref, tu utilises
la connexion dont tu te sers pour la MAJ de ton site. Par contre, en
décompilant l'applet, on aura l'accès complet à ton site perso
:-(...
Après, il faut penser au accès multi client. Quand deux personnes
modifient simultanéments... Il faudra gèrer ça...

A+

Vincent
Avatar
Ice
Bonjour Danious !

Après maintes réflexion, j'en conclue que la réponse la plus
plausible est celle de

Pour un accès général (et un enregistrement) de tous les scores, il
faut que ces données soient stockées sur le serveur. La seul et
unique solution est de soit se connecter à ton site avec le protocole
HTTP et recuperer le fichier, y inscrire le code et le renvoyer
(methode PUT du protocole) ou alors un accès ftp.

Mais je suis en train de voir une autre solution, plutot pas mal, mais
je crois que ton serveur qeb ne doit pas pouvoir effectuer cela, c'est
en fait, avec des .war et des applications tournants cotés serveur.
Mais bon, tu voie, au moins quelles solutions s'offrent à toi.

Cordialement votre,

Ice. XD
Avatar
damien guerin
Accessible par tous???
Faudra que tu me montres comment faire alors...
Il y a quand même une connexion (sécurisé) à faire sur la machine
avant de pouvoir écrire.

D'idéal c'est évident il faut un serveur SQL mais ne pouvant en
avoir, l'écriture dans un fichier est la meilleure solution à mon
sens. Le mieux c'est de le coupler avec php ou jsp. Java écrit dans un
fichier "score.ini" (données brutes du style toto:score1, etc...) et
à la consultation des scores par le client via "scores.php", php ouvre
score.ini, effectue le classement et génère le html adéquat. Le tour
est joué. Bien sur java peut écrire directement le score.html mais
c'est vrai que c'est pas très propre et ça devient vite bordélique.

Vlà.
1 2