Récupérer un fichier texte d'un JAR [Résolu]

Signaler
Messages postés
8
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
29 mai 2008
-
Messages postés
8
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
29 mai 2008
-
Bonjour,
J'ai un petit problème pour récupérer un fichier texte qui se trouve dans un JAR(avec du code).
J'ai regardé pas mal de post, la plus part disaient que l'on peut déziper le .jar et récupérer le fichier... (ok mais ce n'est pas ce que je cherche à faire)
J'ai regardé les javadoc (mais quand on ne sais pas ce que l'on cherche ce n'est pas facile à utiliser...), j'ai vue des trucs du genre JarEntry ou JarInputStream mais je n'est pas très bien saisie leur fonctionnement (voir pas du tout).

Ce que j'aimerais faire c'est une copie d'un fichier texte qui est à l'intérieur du .jar et de l'éditer par la suite.

Pour l'instant j'arrive à lire le fichier texte mais pas à créer une copie de celui-ci...

Si vous avez des éléments pour me mettre sur la voie je suis preneur.

Merci d'avance.

6 réponses

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
35
Salut:

Utilises une des deux méthodes:

1. getResource()
2. getResourceAsStream()

Pour récupérer un InputStream à partir d'un fichier data.text situé près d'une classe X:

InputStream is = X.class.getResourceAsStream("data.txt");
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
98
Salut,

pour ce qui est de la base tu peux faire au plus simple :
int bytes= 0;
byte[] buffer = new byte[1024];
InputStream in = getClass().getResourceAsStream("/Rep.txt");
OutputStream out = new FileOutputStream("Rep.txt");

...
while ((bytes = in.read(buffer)) != -1) {
  out.write(buffer, 0, bytes);
}
....

maintenant reste la gestion de ton ArrayList (si il est nécessaire)....

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
8
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
29 mai 2008

Merci de t'as réponse.

J'ai déjà utilisé la méthode getResourceAsStream().
J'ai fais un truc un peu barbare à goût...

Avec cette méthode je lis tout le document et j'enregistre ligne par ligne dans une arrayList[ligne].
Une fois que j'ai mon arraylist je crée un nouveau document du même nom dans le dossier actuel en réécrivant le tout...

ça donne ça: ( pour les intéressé )

try{
InputStream in = getClass().getResourceAsStream("/Rep.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(in));
do{
line.add(numLigne,br.readLine());
numLigne++;
}while ( !line.get(numLigne-1).equals("fin"));
br.close();

OutputStream out = new FileOutputStream("Rep.txt");
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(out));
for(int i=0; i < numLigne; i++){
output.write(line.get(i));
output.write("\r\n");
}
output.flush();
output.close();
}catch(IOException ioe){
System.out.println("erreurEc1 : " + ioe );
}

Ya t'il un moyen plus propre ?
Messages postés
8
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
29 mai 2008

okay merci.

Si j'ai bien compris le principe de mettre un byte[], c'est que je vais récupérer les 1024 prochain caractères à partir de zéro et ça temps que la ligne n'est pas vide ?

M'enfin merci beaucoup de votre aide je vais mettre un "Résolu" parce que j'ai mon programme qui tourne même s'il n'est pas optimisé :p
Messages postés
5351
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
17 août 2020
98
Salut,

"

okay merci.
"
>> mais de rien

"Si j'ai bien compris le principe de mettre un byte[], c'est que je vais
récupérer les 1024 prochain caractères à partir de zéro et ça temps que
la ligne n'est pas vide ?
"
>>nan pas vraiment ici tu vas lire (au maximum 1024 (ou plus si tu changes)) tant qu'il y a des données à lire et au passage écrire dans le nouveau fichier...

maintenant si tu veux lire ligne par ligne utilise la classe Scanner (dispo depuis le jdk 1.5)

"M'enfin merci beaucoup de votre aide je vais mettre un "Résolu" parce
que j'ai mon programme qui tourne même s'il n'est pas optimisé :p"
>>tu peux toujours donner les routines que tu veux optimiser ou que tu trouves 'crade' histoire de voir si il y a moyen de faire quelque chose dessus.

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
Messages postés
8
Date d'inscription
dimanche 10 décembre 2000
Statut
Membre
Dernière intervention
29 mai 2008

Merci pour tout ! =)

A bientôt je pense :p

PS: je n'ai pas utilisé scanner parce que j'ai commencé mon projet en 1.4.0 (je ne comprenais pas pourquoi le scanner ne marché pas .. alors j'ai utilisé la vielle méthode :) )