IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Exception in thread "main" java.io.FileNotFoundException: C:\tables.csv (Accès refusé)


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut Exception in thread "main" java.io.FileNotFoundException: C:\tables.csv (Accès refusé)
    bonjour à tous,

    comme l'indique le titre, j'essaye de faire un export en CSV et l'erreur suivante apparait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Exception in thread "main" java.io.FileNotFoundException: C:\tables.csv (Accès refusé)
    	at java.io.FileOutputStream.open(Native Method)
    	at java.io.FileOutputStream.<init>(Unknown Source)
    	at java.io.FileOutputStream.<init>(Unknown Source)
    	at java.io.FileWriter.<init>(Unknown Source)
    	at connexionbase.Main.main(Main.java:47)
    j'ai pourtant le contrôle total sur le dossier de destination. je n'y comprend rien...

    un peu d'aide svp

    merci

  2. #2
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    Citation Envoyé par fandreoli Voir le message
    j'ai pourtant le contrôle total sur le dossier de destination. je n'y comprend rien...
    La j'ai un doute...

    Ouvre le Notepad (ou autre), tape un texte et essaye de sauver le fichier dans c:\test.csv pour voir ?

    Ou alors essaye un autre emplacement ou tu es certains d'avoir les droit d'écriture.
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Il y a pas grand chose à faire sauf prendre acte du message d'erreur.
    Un éventuel soupçon puisque je vois que tu bosses avec du CSV, si tu as ton fichier ouvert dans Excel ou Libreoffice pendant que tu essaies de le lire avec ton programme java, ça te donnera ce genre d'erreur car ces logiciels "lock" le fichier pendant l'édition ce qui empêche leur ouverture.

    Si tu es sûr que c'est pas un souci avec les permissions, ça peut quasiment être que ça, c'est à dire l'utilisation du fichier par un autre logiciel.

  4. #4
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Salut,

    Il s'agit surement comme l'a dit skip, d'un fichier locké.
    Soit il est déjà ouvert avec ta sessions Windows normale, ou alors ton code l'a ouvert et pas fermé depuis ?


    Bonne courage !
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    merci pour vos réponses

    donc, j'ai changé de répertoire pour y écrire mon fichier en CSV mais rien ne change. j'ai testé avec un petit fichier texte et là aucun problème pour écrire dans le répertoire.

    pour info, je veux créer un fichier CSV non le lire.

  6. #6
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 074
    Points : 7 978
    Points
    7 978
    Par défaut
    En effet, le lock du fichier est possible aussi, bien vu les gars
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Et tu arrive a créer un fichier texte via ton code java ?
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  8. #8
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Je ne suis pas un expert en windows, mais si j'essaie depuis l'explorateur de créer un fichier sur mon disque système à la racine ("C:"), j'ai la popup qui me demande l'élévation de droit.

    Tu as bien échappé le "\" dans ton code lorsque tu as fourni le chemin ? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File myCsvfile = new File("C:\\tonfichier.csv");
    Sinon essayer de créer dans ton home directory (mes documents), à part ça je vois pas.

  9. #9
    Membre éclairé Avatar de Sennad
    Homme Profil pro
    Développeur Java
    Inscrit en
    Août 2014
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2014
    Messages : 180
    Points : 703
    Points
    703
    Par défaut
    Ah bah oui ca à l'air d'être ça !
    Dans le message de l'exception il y a le chemin d'accès, et le backslash ("\") n'est pas échappé.
    -----------------------------------------------------------------------------------------
    Don't play with fire if u don't wanna get burn ! Clinton - Fearon
    ____________________________________________________Pensez au

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    merci à tous pour vos réponses.

    le backslash ce n'était pas ça car dans mon code il était bien échappé.

    en fait s'était beaucoup plus simple que ça, je n'indiquais pas le nom du fichier que je voulais créer

    du coup ça marche le fichier est bien créé mais seulement avec la derniere ligne de mon arrayList. donc nouveau problème. voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    PreparedStatement s1 = connection.prepareStatement("SELECT table_name nom,column_name colonne,data_type type FROM user_tab_columns");
              		ResultSet r1 = s1.executeQuery();
              		while(r1.next()) {
     
              			System.out.println(
              					r1.getString("nom")+";"+ r1.getString("colonne")+";" + r1.getString("type"));
     
     
              			String csv = "C:\\Users\\Public\\csv\\tables.xls";
              			CSVWriter writer = new CSVWriter(new FileWriter(csv));
     
              			List<String[]> data = new ArrayList<String[]>();
              			data.add(new String[] {r1.getString("nom")});
              			data.add(new String[] {r1.getString("colonne")});
              			data.add(new String[] {r1.getString("type")});
     
              			writer.writeAll(data);
     
              			writer.close();
    puis-je profiter encore un peu de vos lumières svp ?

    merci

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Peut-être devrais-tu ouvrir le fichier avant la boucle ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Et aussi ne pas utiliser writeAll qui sert à écrire tout le fichier d'une traite.
    C'est writeNext(String[]) pour écrire une ligne à la fois.

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    heu, hummmm, oui effectivement

    mais j'ai beau tourner mon code dans tous les sens je n'arrive pas à avoir le résultat attendu. Je fait du Java dans le cadre d'un stage pendant ma formation, et avec seulement 2 semaines sur java j'avoue être un peu à la rue. je dois rendre ce projet jeudi et je n'ai plus que ça à faire. quelqu'un pourrait-il m'aider un peu svp ?

    merci beaucoup

  14. #14
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Tu dois pas être trop loin, de tête ça doit ressembler à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ResultSet r1 = s1.executeQuery();
     
    CSVWriter writer = new CSVWriter(new FileWriter("C:\\Users\\Public\\csv\\tables.xls"));
    while(r1.next()) {
     
          writer.writeNext( new String[] { r1.getString("nom") , r1.getString("colonne") ,r1.getString("type"))  });
     }
    writer.close();
    La gestion d'erreur est omise ici, parce que je pars du principe que tu bosses sur une simple routine one-shot.
    Un fichier on l'ouvre au début, on écrit dedans tout ce qu'on a besoin d'y écrire, et à la fin on le ferme.

    Donc dans l'ordre
    • tu fais ta requete (executeStatement)
    • tu ouvres ton fichier (création du writer)
    • tu boucles le résultat de ta requete pour écrire les lignes (le while { })
    • fin de la boucle, tu as plus rien à écrire, tu appelles close (appel à close())

  15. #15
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    génial !!!

    effectivement j'étais pas si loin

    un grand merci à toi !!!

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    Par contre j'ai un soucis sur un autre morceau de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Scanner sct = new Scanner(System.in);
              		System.out.println("veuillez entrer le type de fichier SVP");
              		String reponse = sct.nextLine();
     
              		PreparedStatement s2 = connection.prepareStatement("SELECT DISTINCT NAME, TYPE,LINE,TEXT FROM ALL_SOURCE WHERE NAME LIKE 'XX%' AND TYPE = ? ORDER BY name ASC, line ASC");
              		s2 .setString(1, reponse.toUpperCase());
              		ResultSet r2 = s2.executeQuery();
              		Scanner fich = new Scanner(System.in);
              		System.out.println("veuillez entrer le nom de fichier SVP");
              		String nomfich = fich.nextLine();
              		String csv2 = "C:\\Users\\freddy\\Desktop\\csv\\"+nomfich+".xls";
          			CSVWriter writer2 = new CSVWriter(new FileWriter(csv2));
              		while(r2.next()) {
     
              			System.out.println(
              					r2.getString("name")+";"+ r2.getString("type")+";" + r2.getString("line")+";" + r2.getString("text"));
              			writer2.writeNext( new String[] { r2.getString("name") , r2.getString("type") , r2.getString("line") , r2.getString("text")});
              		}
              		writer2.close();
    quand je lance, la console me sort bien toutes les lignes alors que sur le csv je n'ai qu'une ligne.
    je m'explique. voila ce que j'obtient sur la console
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    XX_AJ_CLIENT_PROCEDURE;PROCEDURE;1;procedure XX_aj_client_PROCEDURE is
     
    XX_AJ_CLIENT_PROCEDURE;PROCEDURE;2;begin
     
    XX_AJ_CLIENT_PROCEDURE;PROCEDURE;3;insert into clients(idcli,nprcli,ccocli) --ajout id, nom/prenom,code postal
     
    XX_AJ_CLIENT_PROCEDURE;PROCEDURE;4;values(aj_client_seq.nextval,upper('&nom'),'&cp');
     
    XX_AJ_CLIENT_PROCEDURE;PROCEDURE;5;end;
    et sur le csv je n'ai que la première ligne et pas les 4 autres (que je souhaite aussi évidemment)

  17. #17
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    C'est pas logique... Je vois pas trop ce qui peut foirer, à part ta requête SQL qui retourne moins de ligne que prévu ou peut être ou une exception.
    Essaie ceci dans un main tout seul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CSVWriter csv= new CSVWriter(new FileWriter("C:\\temp\\text.txt"));
    csv.writeNext( new String[] { "1", "2", "3"});
    csv.writeNext( new String[] { "4", "5", "6"});
    csv.writeNext( new String[] { "7", "8", "9"});
    csv.close()
    Ensuite ouvre le fichier dans un simple éditeur de texte. Tu dois avoir 3 lignes?

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 43
    Points : 31
    Points
    31
    Par défaut
    c'est bon j'ai trouvé.

    ça fonctionne en rajoutant une tabulation.

    encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [JDIC]Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    Par kedare dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 06/05/2006, 22h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo