6
votes

Java: Variable de chaîne de passage dans un nouveau fichier ();

Je développe une application de bureau qui lit des éléments XML spécifiques utilisant XPath et les affiche dans des champs de texte dans un jframe .

Jusqu'à présent, le programme a couru en douceur jusqu'à ce que j'ai décidé de passer un < code> chaîne variable dans le fichier classe. xxx

si je définis le xmlfile avec un chemin statique (c'est-à-dire écrire manuellement), le programme fonctionne comme prévu. Cependant, au lieu d'écrire un chemin statique, si je passe le chemin comme une variable de chaîne apath , il n'imprime pas les résultats attendus.

J'ai fait un peu de googling mais j'ai omis de trouver quoi que ce soit de concret.


5 commentaires

Quelle est la valeur de la variable apath ? Que vous attendez-vous à imprimer et qu'est-ce qu'il imite à la place. Il n'y a pas de chaînes statiques et dynamiques. Une chaîne est une chaîne. Ce qui est important, c'est ce que les caractères contiennent la chaîne.


Valeur @jbnizet de APATH = 'C: \\ Documents et paramètres \\ \ tanzim.hasan \\ Mes documents \\ xcbl.xml' Il est capturé dans une autre classe à l'aide de fichier.getaBsolutepath (); et ensuite en utilisant 'path.replaceall ()' Les caractères d'échappement du barreau arrière sont ajoutés. Je m'attends au document doc = docbuilder.parse (xmlfile); Pour recevoir un chemin de fichier valide afin que le fichier puisse analyser à l'aide du documentBuilderFactory. Cependant, il ne fonctionne que si je saisis manuellement le chemin - fichier xmlfile = nouveau fichier ("C: \\ Documents et paramètres \\ \\ tanzim.hasan \\ Mes documents \\ xcbl.xml");


@Tall - J'ai trouvé une erreur possible, qui ne fonctionne à nouveau que si je saisis manuellement le chemin du fichier. document doc = docbuilder.parse (xmlfile); si xmlfile est remplacé par le chemin de fichier réel qu'il fonctionne. Cependant, quand il est changé de XMLFILE à APATH échoue à nouveau. FYI, l'échec n'affiche aucune erreur d'erreurs, il affiche simplement un écran vide où les données sont attendues.


Vous ne devriez pas avoir de double backslashes dans votre chaîne. Vous n'en avez besoin que d'une chaîne littéral car les backslashes doivent être échappées, mais la chaîne elle-même ne doit contenir que des barres obliques simples.


@Jbnizet Merci pour la clarification et ce que vous avez indiqué a du sens. Cependant (malheureusement), il n'a toujours pas fonctionné. Je supprime le path path.replaceall () dans la classe précédente, alors maintenant au lieu d'un littéral à chaîne, la chaîne contient le chemin de fichier simplifié. En outre, j'ai modifié la ligne à document doc = docbuilder.parse (xmlfile); à inclure system.out.println ("@ doc" + doc); La sortie est - @Doc [#document: NULL] . Des pensées?


3 Réponses :


1
votes

Utilisez simplement les méthodes d'objet intégrées: xxx pré>

Vous pouvez également utiliser: p> xxx pré>

aussi, si vous avez des problèmes d'esprit HeLe fichier non existant, vérifiez d'abord ensuite: P>

File file = new File (aPath);
if(file.exists()) {
  //Do your work
}


3 commentaires

Bonjour Jason, merci pour l'info. Cependant, je n'ai inséré que les instructions PrintLN pour vérifier les valeurs réelles reçues par les variables locales. Le problème principal que j'ai d'avoir est que document doc = docbuilder.parse (xmlfile); ne reçoit pas de chemin de fichier valide pour analyser (ou je suppose donc). Des pensées?


Vérifiez si le chemin existe en premier. Ajout d'exemple pour répondre. 1 seconde.


Bonjour Jason, pas de chance malheureusement. Toujours le même problème que ci-dessus. Je sais que le fichier existe dans le chemin de fichier, sinon la relevé de capture filme un message d'erreur JOPTIONPANE. Merci pour ton aide



1
votes

Si vous utilisez remplailleL () code> comme ceci chemin.replaceall (" \\ "," / ") code> pour supprimer Les backslashes, il échouera parce que la méthode remplacement () code> attend un regex em> comme premier paramètre et une seule barre oblique inverse (codé comme "\\" code " >) est une non valide forte> regex. Pour le faire fonctionner en utilisant remplacement () code>, vous auriez besoin de double-échapper à la barre oblique inverse (une fois pour la chaîne, à nouveau pour la regex) comme ceci chemin.replaceall ("\\\\" , "/")<_>.

HOEver, vous n'avez pas besoin d'une regex! Au lieu de cela, utilisez le texte brut basé sur remplacer () code> méthode comme ceci: p> xxx pré>

Notez que les noms "remplacer" et "remplacer" sont trompeur: "Remplacer" remplace toujours les événements tous les em> tous les em> ... Le Moron qui a décidé du nom "RetourSeall" aurait dû choisir "RechangeEgex" ou quelque chose de similaire P>

Edit h3>

Essayez: P>

path = path.replace("\\\\", "/");


2 commentaires

Merci beaucoup pour l'éxplication. J'ai changé de chemin.replaceAll () à path2.replace ("\\", "/"). La sortie lorsqu'elle atteint System.out.println ("chemin de fichier avant d'essayer et de saisir:" + FilePath); est - chemin de fichier avant d'essayer et de voir: C: / Documents et paramètres /tanzim.hasan/my documents / xcbl.xml , ce qui est parfait parce que c'est où le fichier est.


Cependant, le programme n'a pas réussi à imprimer les résultats sur le JFRAME. Je ne peux pas comprendre ce qui est si différent entre écrire fichier xmlfile = nouveau fichier ("C: \\ documents et paramètres \\ \\ tanzim.hasan \\ mes documents \\ xcbl.xml"); et Écriture fichier xmlfile = nouveau fichier (APATH); Les deux contiennent une chaîne qui identifie un fichier appelé xcbl.xml . Arrgghh!



0
votes

Il est trop tard pour répondre à cela, mais ... Supprimer "" de mon fichier de configuration aidé Je veux dire xxx

pas ceci xxx


0 commentaires