A voir également:
- Tableau de String dans un fichier en Java
- Tableau croisé dynamique - Guide
- Fichier rar - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
4 réponses
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
23 avril 2008 à 09:53
23 avril 2008 à 09:53
Bonjour,
Si tu me mets ton code d'enregistrement (ce que tu as déjà fait donc) je peux t'aider à résoudre ton problème.
En attendant, si ça peut t'aider, vu ton message d'erreur j'imagine que tu tente d'écrire directement ton tableau de String dans ton fichier alors que la méthode writeUtf ne prend en paramètre qu'une simple String.
Pour résoudre ton problème il faut que tu parcours ton tableau, et pour chaque entrée du tableau (c'est à dire chaque String), tu enregistre ton élément dans le fichier via writeUtf.
Attention toutefois, j'imagine que tu veux pouvoir ensuite relire ton fichier, donc pense à séparer tes chaines de caractères par un élément séparateur dans ton fichier (par exemple un ';').
Si tu me mets ton code d'enregistrement (ce que tu as déjà fait donc) je peux t'aider à résoudre ton problème.
En attendant, si ça peut t'aider, vu ton message d'erreur j'imagine que tu tente d'écrire directement ton tableau de String dans ton fichier alors que la méthode writeUtf ne prend en paramètre qu'une simple String.
Pour résoudre ton problème il faut que tu parcours ton tableau, et pour chaque entrée du tableau (c'est à dire chaque String), tu enregistre ton élément dans le fichier via writeUtf.
Attention toutefois, j'imagine que tu veux pouvoir ensuite relire ton fichier, donc pense à séparer tes chaines de caractères par un élément séparateur dans ton fichier (par exemple un ';').
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
24 avril 2008 à 10:04
24 avril 2008 à 10:04
Qu'est ce que tu as exactement comme exception pour l'instant ?
Remplace ta gestion d'exception en ajoutant de quoi connaitre le vrai message d'erreur :
Remplace :
Par :
Pour le moment je ne vois pas trop ce qui n'irait pas, si tu peux me donner le libellé exact (en anglais) de l'exception que tu as ça m'aidera beaucoup.
Remplace ta gestion d'exception en ajoutant de quoi connaitre le vrai message d'erreur :
Remplace :
System.out.println("Problème I/O");
Par :
System.out.println("Problème I/O : "+e.getMessage);
Pour le moment je ne vois pas trop ce qui n'irait pas, si tu peux me donner le libellé exact (en anglais) de l'exception que tu as ça m'aidera beaucoup.
Bon j'ai réécrit le code et je n'ai plus de pb pour enregistrer le tableau mais cette fois il y a un pb d'entrée sortie :
package definitions;
import java.util.Scanner;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Menu {
public void menu() {
int choix;
String fichier,description;
Scanner sc = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
System.out.println("______________________________");
System.out.println("1-Aide");
System.out.println("2-Nouveau fichier");
System.out.println("3-Test");
System.out.println("4-Quitter");
System.out.println("______________________________");
choix = sc.nextInt();
if(choix==1) {
aide();
menu();
}
else if (choix==2) {
System.out.print("Fichier : ");
fichier=scan.nextLine();
System.out.println("description : ");
description=scan.nextLine();
new_file(fichier,description);
menu();
}
else if (choix==3) {
System.out.print("Fichier : ");
fichier=scan.nextLine();
test(fichier);
menu();
}
}
public void aide() {
System.out.println("Pour faire un nouveau fichier de test, tapez 2, entrez le nom du fichier et la notion, puis enfin la definission. Pour stopper la boucle, tapez quit.");
System.out.println("Pour lancer un test, tapez 3 et entrez le nom du fichier correspondant. Des questions vous seront posees indefiniment jusqu'a ce que vous tapiez quit.");
System.out.println("Pour quitter le programme, tapez 4.");
}
public void new_file(String path, String description) {
Scanner entrée= new Scanner(System.in);
Scanner entnb = new Scanner(System.in);
String question[]= new String [100];
String reponse[]=new String [100];
int i=0,yn=0;
try
{
// Suite d'instructions accédant au fichier et
// ne s'occupant pas de la gestion des erreurs
// Tentative d'ouvrir un fichier
OutputStream flotFichier = new FileOutputStream (path);
DataOutputStream flot = new DataOutputStream (flotFichier);
while(yn ==0) {
System.out.print("Voulez-vous quitter ?(1 pour oui et 0 pour non) : ");
yn = entnb.nextInt();
if(yn==0){
System.out.print("Entrer question : ");
question[i] = entrée.nextLine();
}
if(yn==0){
System.out.print("Entrer reponse : ");
reponse[i] = entrée.nextLine();
}
i++;
}
while(i!=10) {
System.out.print("Quelle chaine voulez vous lire ?");
i = entrée.nextInt();
System.out.println(question[i]); //les chaines sont bien enregistrées ds les variables
System.out.println(reponse[i]);
}
// Ecriture dans le fichier
flot.writeUTF(description);
for(i=0;question[i]!=null && reponse[i]!=null;i++) {
flot.writeUTF(question[i]);
flot.writeUTF(reponse[i]);
}
flot.close();
}
catch (FileNotFoundException e)
{
// Exception déclenchée si le fichier n'existe pas
}
catch (IOException e){
System.out.println("Problème I/O");
// Exception déclenchée si un autre problème survient
// pendant l'accès au fichier
}
}
public void test(String path) {
Scanner entrée= new Scanner(System.in);
Scanner entnb = new Scanner(System.in);
String description;
String question[]= new String [100];
String reponse[]=new String [100];
int i,yn;
try
{
// Suite d'instructions accédant au fichier et
// ne s'occupant pas de la gestion des erreurs
// Tentative d'ouvrir un fichier
InputStream flotFichier = new FileInputStream (path);
DataInputStream flot = new DataInputStream (flotFichier);
description=flot.readUTF();
question[0]=flot.readUTF();
reponse[0]=flot.readUTF();
for(i=1;i<100;i++) {
if(question[i-1]!=null && reponse[i-1]!=null){
question[i]=flot.readUTF();
reponse[i]=flot.readUTF();
}
}
flot.close();
System.out.print("Tester ?(1 pour oui et 0 pour non) ");
yn=entnb.nextInt();
if(yn==1) {
System.out.println("______________________________");
System.out.println(description);
System.out.println("Vous vous testeriez");
System.out.println(question[0]);
System.out.println(reponse[0]);
System.out.println(question[1]);
System.out.println(reponse[1]);
System.out.println(question[2]);
System.out.println(reponse[2]);
System.out.println(question[3]);
System.out.println(reponse[3]);
}
else{
System.out.println("Vous quiteriez");
}
}
catch (FileNotFoundException e)
{
// Exception déclenchée si le fichier n'existe pas
}
catch (IOException e){
System.out.println("Problème I/O"+e.getMessage());
// Exception déclenchée si un autre problème survient
// pendant l'accès au fichier ou la fermeture du fichier.
}
}
}
Quand j'éxécute je rentre le fichier ke g enregistré et il apparait Problème I/O null.
ça veut dire que le tableau n'a donc pas été enregistré correctement mais je comprends pas pourquoi... Meme la description n'est pas affichée. je l'ai réécrit en ne lisant que la première case du tableau : ça fonctionnait parfaitement, ensuite je l'ai réécrit en lisant les deux premières cases(ki ont bien sur été enregistrées) : il affiche le résultat de la première et marque null pour la deuxième, pareil avec trois cases lues...
J'en déduit que le programme n'a enregistrer QUE la première case du tableau, même en l'ayant parcouru. C'est incompréhensible non ?
package definitions;
import java.util.Scanner;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Menu {
public void menu() {
int choix;
String fichier,description;
Scanner sc = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
System.out.println("______________________________");
System.out.println("1-Aide");
System.out.println("2-Nouveau fichier");
System.out.println("3-Test");
System.out.println("4-Quitter");
System.out.println("______________________________");
choix = sc.nextInt();
if(choix==1) {
aide();
menu();
}
else if (choix==2) {
System.out.print("Fichier : ");
fichier=scan.nextLine();
System.out.println("description : ");
description=scan.nextLine();
new_file(fichier,description);
menu();
}
else if (choix==3) {
System.out.print("Fichier : ");
fichier=scan.nextLine();
test(fichier);
menu();
}
}
public void aide() {
System.out.println("Pour faire un nouveau fichier de test, tapez 2, entrez le nom du fichier et la notion, puis enfin la definission. Pour stopper la boucle, tapez quit.");
System.out.println("Pour lancer un test, tapez 3 et entrez le nom du fichier correspondant. Des questions vous seront posees indefiniment jusqu'a ce que vous tapiez quit.");
System.out.println("Pour quitter le programme, tapez 4.");
}
public void new_file(String path, String description) {
Scanner entrée= new Scanner(System.in);
Scanner entnb = new Scanner(System.in);
String question[]= new String [100];
String reponse[]=new String [100];
int i=0,yn=0;
try
{
// Suite d'instructions accédant au fichier et
// ne s'occupant pas de la gestion des erreurs
// Tentative d'ouvrir un fichier
OutputStream flotFichier = new FileOutputStream (path);
DataOutputStream flot = new DataOutputStream (flotFichier);
while(yn ==0) {
System.out.print("Voulez-vous quitter ?(1 pour oui et 0 pour non) : ");
yn = entnb.nextInt();
if(yn==0){
System.out.print("Entrer question : ");
question[i] = entrée.nextLine();
}
if(yn==0){
System.out.print("Entrer reponse : ");
reponse[i] = entrée.nextLine();
}
i++;
}
while(i!=10) {
System.out.print("Quelle chaine voulez vous lire ?");
i = entrée.nextInt();
System.out.println(question[i]); //les chaines sont bien enregistrées ds les variables
System.out.println(reponse[i]);
}
// Ecriture dans le fichier
flot.writeUTF(description);
for(i=0;question[i]!=null && reponse[i]!=null;i++) {
flot.writeUTF(question[i]);
flot.writeUTF(reponse[i]);
}
flot.close();
}
catch (FileNotFoundException e)
{
// Exception déclenchée si le fichier n'existe pas
}
catch (IOException e){
System.out.println("Problème I/O");
// Exception déclenchée si un autre problème survient
// pendant l'accès au fichier
}
}
public void test(String path) {
Scanner entrée= new Scanner(System.in);
Scanner entnb = new Scanner(System.in);
String description;
String question[]= new String [100];
String reponse[]=new String [100];
int i,yn;
try
{
// Suite d'instructions accédant au fichier et
// ne s'occupant pas de la gestion des erreurs
// Tentative d'ouvrir un fichier
InputStream flotFichier = new FileInputStream (path);
DataInputStream flot = new DataInputStream (flotFichier);
description=flot.readUTF();
question[0]=flot.readUTF();
reponse[0]=flot.readUTF();
for(i=1;i<100;i++) {
if(question[i-1]!=null && reponse[i-1]!=null){
question[i]=flot.readUTF();
reponse[i]=flot.readUTF();
}
}
flot.close();
System.out.print("Tester ?(1 pour oui et 0 pour non) ");
yn=entnb.nextInt();
if(yn==1) {
System.out.println("______________________________");
System.out.println(description);
System.out.println("Vous vous testeriez");
System.out.println(question[0]);
System.out.println(reponse[0]);
System.out.println(question[1]);
System.out.println(reponse[1]);
System.out.println(question[2]);
System.out.println(reponse[2]);
System.out.println(question[3]);
System.out.println(reponse[3]);
}
else{
System.out.println("Vous quiteriez");
}
}
catch (FileNotFoundException e)
{
// Exception déclenchée si le fichier n'existe pas
}
catch (IOException e){
System.out.println("Problème I/O"+e.getMessage());
// Exception déclenchée si un autre problème survient
// pendant l'accès au fichier ou la fermeture du fichier.
}
}
}
Quand j'éxécute je rentre le fichier ke g enregistré et il apparait Problème I/O null.
ça veut dire que le tableau n'a donc pas été enregistré correctement mais je comprends pas pourquoi... Meme la description n'est pas affichée. je l'ai réécrit en ne lisant que la première case du tableau : ça fonctionnait parfaitement, ensuite je l'ai réécrit en lisant les deux premières cases(ki ont bien sur été enregistrées) : il affiche le résultat de la première et marque null pour la deuxième, pareil avec trois cases lues...
J'en déduit que le programme n'a enregistrer QUE la première case du tableau, même en l'ayant parcouru. C'est incompréhensible non ?
kij_82
Messages postés
4089
Date d'inscription
jeudi 7 avril 2005
Statut
Contributeur
Dernière intervention
30 septembre 2013
857
25 avril 2008 à 10:30
25 avril 2008 à 10:30
C'est toujours compréhensible, qu'est ce que tu peux penser de ce comportement ? Ben tout simplement à chaque fois, la derniere case est mal enregistrée.
Typiquement il doit y avoir un problème d'indexage quelque part dans ton programme.
Sinon si tu veux savoir exactement ou arrive l'erreur null, dans le traitement de l'erreur (exception) met ceci :
Tu aura alors toutes les lignes de ton programme par où ce dernier est passé. Plus la ligne arrive en premier et plus il s'agit de l'endroit où le programme a échoué. Ainsi tu peux savoir sur quelle instruction le programme à planter, et ensuite remonter petit à petit pour comprendre pourquoi il a planté.
Dans ton cas, une NullPointerException veut dire que tu as une données null dont tu essaye de te servir (enregistrer, lire, etc.)
Typiquement il doit y avoir un problème d'indexage quelque part dans ton programme.
Sinon si tu veux savoir exactement ou arrive l'erreur null, dans le traitement de l'erreur (exception) met ceci :
e.printStackTrace();
Tu aura alors toutes les lignes de ton programme par où ce dernier est passé. Plus la ligne arrive en premier et plus il s'agit de l'endroit où le programme a échoué. Ainsi tu peux savoir sur quelle instruction le programme à planter, et ensuite remonter petit à petit pour comprendre pourquoi il a planté.
Dans ton cas, une NullPointerException veut dire que tu as une données null dont tu essaye de te servir (enregistrer, lire, etc.)
23 avril 2008 à 21:41
package definitions;
import java.util.Scanner;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Menu {
public void menu() {
int choix;
String fichier,description;
Scanner sc = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
System.out.println("______________________________");
System.out.println("1-Aide");
System.out.println("2-Nouveau fichier");
System.out.println("3-Test");
System.out.println("4-Quitter");
System.out.println("______________________________");
choix = sc.nextInt();
if(choix==1) {
aide();
menu();
}
else if (choix==2) {
System.out.print("Fichier : ");
fichier=scan.nextLine();
System.out.println("description : ");
description=scan.nextLine();
new_file(fichier,description);
menu();
}
else if (choix==3) {
System.out.print("Fichier : ");
fichier=scan.nextLine();
test(fichier);
menu();
}
}
public void aide() {
System.out.println("Pour faire un nouveau fichier de test, tapez 2, entrez le nom du fichier et la notion, puis enfin la definission. Pour stopper la boucle, tapez quit.");
System.out.println("Pour lancer un test, tapez 3 et entrez le nom du fichier correspondant. Des questions vous seront posees indefiniment jusqu'a ce que vous tapiez quit.");
System.out.println("Pour quitter le programme, tapez 4.");
}
public void new_file(String path, String description) {
Scanner entrée= new Scanner(System.in);
Scanner entnb = new Scanner(System.in);
String question[]= new String [100];
String reponse[]=new String [100];
int i=0, nbq=-1,yn=0;
try
{
// Suite d'instructions accédant au fichier et
// ne s'occupant pas de la gestion des erreurs
// Tentative d'ouvrir un fichier
OutputStream flotFichier = new FileOutputStream (path);
DataOutputStream flot = new DataOutputStream (flotFichier);
while(yn ==0) {
System.out.print("Voulez-vous quitter ?(1 pour oui et 0 pour non) : ");
yn = entnb.nextInt();
if(yn==0){
System.out.print("Entrer question : ");
question[i] = entrée.nextLine();
}
if(yn==0){
System.out.print("Entrer reponse : ");
reponse[i] = entrée.nextLine();
nbq++;
}
System.out.println("Enregistre dans t["+nbq+"]");
i++;
}
while(i!=10) {
System.out.print("Quelle chaine voulez vous lire ?");
i = entrée.nextInt();
System.out.println(question[i]); //les chaines sont bien enregistrées ds les variables
System.out.println(reponse[i]);
}
// Ecriture dans le fichier
flot.writeUTF(description);
for(i=0;question[i]!=null && reponse[i]!=null;i++) {
flot.writeUTF(question[i]);
flot.writeUTF(reponse[i]);
flot.writeInt(nbq);
}
flot.close();
}
catch (FileNotFoundException e)
{
// Exception déclenchée si le fichier n'existe pas
}
catch (IOException e){
System.out.println("Problème I/O");
// Exception déclenchée si un autre problème survient
// pendant l'accès au fichier
}
}
public void test(String path) {
Scanner entrée= new Scanner(System.in);
Scanner entnb = new Scanner(System.in);
String description,question,reponse;
int i,yn,nbq;
try
{
// Suite d'instructions accédant au fichier et
// ne s'occupant pas de la gestion des erreurs
// Tentative d'ouvrir un fichier
InputStream flotFichier = new FileInputStream (path);
DataInputStream flot = new DataInputStream (flotFichier);
description=flot.readUTF();
question=flot.readUTF();
reponse=flot.readUTF();
nbq=flot.readInt();
flot.close();
System.out.print("Tester ?(1 pour oui et 0 pour non) ");
yn=entnb.nextInt();
if(yn==1) {
System.out.println("Vous vous testeriez");
System.out.println(question[2]); //The type of the expression must be an array type but it resolved to String
System.out.println(nbq);
}
else{
System.out.println("Vous quiteriez");
}
}
catch (FileNotFoundException e)
{
// Exception déclenchée si le fichier n'existe pas
}
catch (IOException e){
System.out.println("Problème I/O");
// Exception déclenchée si un autre problème survient
// pendant l'accès au fichier
}
}
}