cs_harleen
Messages postés22Date d'inscriptionlundi 10 novembre 2008StatutMembreDernière intervention20 juillet 2009
-
10 juil. 2009 à 09:15
cs_harleen
Messages postés22Date d'inscriptionlundi 10 novembre 2008StatutMembreDernière intervention20 juillet 2009
-
10 juil. 2009 à 16:31
Bonjour,
J'ai perdu une journée entière à chercher, googler, tester et je
commence maintenant à croire que j'ai fait le tour de toutes les
solutions possibles...
Je crée une appli qui permet à un utilisateur de traduire un fichier et
de sélectionner l'endroit où il souhaite avoir son fichier traduit :
C:\\..., Bureau...
Si l'utilisateur crée son fichier traduit à un endroit où il a suffisamment de droits, cela fonctionne parfaitement.
Seulement, dans le cas où l'utilisateur veut créer son fichier à un
endroit où il n'a pas les droits suffisants, j'ai plein de lignes
d'erreurs, me disant qu'il ne peut pas écrire ici, ce que je veux,
c'est afficher simplement un message d'erreur pour avertir
l'utilisateur qu'il ne peut pas écrire à cet endroit, et non pas à
chercher à lui accorder ou non quelconque droits...
j'ai tenté plusieurs solutions :
- faire un bloc
try{...}catch(FileNotFoundException){...}
, vu que c'était l'intitulé de l'exception affiché
- utiliser la méthode
canWrite
de la classe File, cette méthode retournant un boolean, afin de dire si le fichier peut être écrit ou non.
Je jugeais cette deuxième et troisième méthode meilleures, mais
dans le cas de la troisième méthode, lorsque j'appelle cette méthode à
partir de la méthode qui m'intéresse, j'ai toujours un false qui est
retourné...qu'il s'agisse d'endroits où l'utilisateur a les droits ou
non...
Je suis à l'écoute de toute idée ou aide de votre part,
cs_harleen
Messages postés22Date d'inscriptionlundi 10 novembre 2008StatutMembreDernière intervention20 juillet 2009 10 juil. 2009 à 09:40
salut et merci pour la rapidité de ta réponse,
Voici le code de ma méthode de traduction :
class TradSimpleListener implements ActionListener{
public void actionPerformed(ActionEvent arg0){
SimpleService();
}
private void SimpleService(){
//fichier d'entrée et de sortie en récupérant les contenus des zones de txt
inputFile = new File(txtlocalPath.getText());
outputFile = new File(txtSortie.getText());
//récupérer le contenu de la textBox et traduire
// System.setProperty("javax.xml.transform.TransformerFactory",
//"net.sf.saxon.TransformerFactoryImpl");
//on crée une fabrique de transformeurs
TransformerFactory factory = TransformerFactory.newInstance();
//fichier xsl de transformation
File fxsl = new File("transfo.xsl");
//fichier xml source de type source
Source xmlSource = new StreamSource(inputFile);
//nom du fichier de sortie de type Result :
//on choisit le constructeur avec File
Result sortie = new StreamResult(outputFile);
//transformer
Transformer transformer;
try {
//on récupère un transformeur à partir d'une fabrique de transformeurs
transformer = factory.newTransformer(new StreamSource(fxsl));
/*Utilisation d'un parser DOM ou SAX sans DTD ou xml schema pour la validation,
* s'il ya une erreur de parsing alors le fichier XML n'est pas bien formé càd NON XML.
*/
DocumentBuilderFactory fabrique = DocumentBuilderFactory.newInstance();
DocumentBuilder constructeur = fabrique.newDocumentBuilder();
// lecture du contenu du fichier d'entrée XML avec DOM
File xml = new File(inputFile.getName());
Document document = constructeur.parse(xml);
/*
//on vérifie que l'on peut bien écrire à cet endroit en appelant la méthode testEcriture
if(testEcriture(outputFile)==true){
System.out.println("bonjour");
}
else{
System.out.println("au revoir");
}
*/
//transformation en prenant en paramètre le fichier xml source et fait le fichier xml de sortie
transformer.transform(xmlSource, sortie );
//message informant que la traduction a bien été faite
message_erreur.setText("Traduction simple effectuée");
message_erreur.setForeground(Color.green);
}
catch(FileNotFoundException e){
System.out.println("hello");
}
catch (TransformerConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TransformerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch(SAXException se){
//C'est un fichier Non Xml
}catch(IOException ioe){
ioe.printStackTrace();
}
}
}//fin de la classe TradSimpleListener
et voici le message d'erreur :
Error on line 20 of transfo.xsl:
java.io.FileNotFoundException: C:\test.xml (Accès refusé)
Sachant que transfo.xsl est le fichier de transformation et test.xml, le fichier de sortie que j'aimerai pouvoir créer dans C:\\, et où l'écriture est impossible.
Bien évidemment, je ne veux pas lui accorder quelconque droits d'écriture, mais simplement lui mettre un message d'erreur l'informant qu'il ne peut pas écrire ici.
Mais pourquoi n'ai-je pas cette erreur lorsque je crée mon fichier de traduction à un endroit où je peux écrire (mes documents par exemple)?
kirua12
Messages postés1155Date d'inscriptionsamedi 17 janvier 2004StatutMembreDernière intervention29 avril 20117 10 juil. 2009 à 09:47
t'es sûr que tu passes dans le bon bloc catch ? Ta FileNotFoundException n'est-elle pas encapsulée dans une autre exception ?
Peux tu mettre le message d'erreur en entier ?
J'ai fait un test bidon et le catch sur FileNotFoundException marche très bien (c'est évident d'ailleurs). Par contre le test d'écriture avec la méthode canWrite() n'est pas suffisant (elle me renvoie true alors que je n'ai pas les droits d'écriture)
cs_harleen
Messages postés22Date d'inscriptionlundi 10 novembre 2008StatutMembreDernière intervention20 juillet 2009 10 juil. 2009 à 10:00
je suis d'accord avec toi concernant le canWrite qui renvoie un boolean, j'ai toujours le même booléen retourné que l'utilisateur ait le droit ou non d'écriture...
Pourrais-tu me montrer le test que tu as fait, s'il te plait?
Je ne peux retirer aucune exception ici, car j'utilise un parser XML ou encore transformer et ces catch sont nécessaires
Harleen
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_harleen
Messages postés22Date d'inscriptionlundi 10 novembre 2008StatutMembreDernière intervention20 juillet 2009 10 juil. 2009 à 10:15
juste une question par rapport à ton test, tu fais un canWrite sur le répertoire et non sur le fichier pour s'assurer que l'utilisateur a bien les droites sur le répertoire et non sur le fichier?
cs_harleen
Messages postés22Date d'inscriptionlundi 10 novembre 2008StatutMembreDernière intervention20 juillet 2009 10 juil. 2009 à 16:31
Salut,
après plusieurs heures de recherche, j'ai finalement trouvé la solution en me servant de la méthode createNewFile() de la classe File.
Le test consiste à créer un fichier temporaire et de voir ainsi si l'utilisateur a les droits en écriture.
J'ai longuement cherché du côté de canWrite(), mais j'ai toujours eu le même souci que toi.
Merci pour tes pistes et ton aide,
bonne continuation