web-dev-qa-db-fra.com

Chemin ou emplacement du fichier pour Java - nouveau fichier ()

J'ai la structure suivante pour mon projet.

Dans Eclipse:

myPorjectName
  src
    com.example.myproject
        a.Java
    com.example.myproject.data
        b.xml

Dans a.Java, Je veux lire le fichier b.xml. Comment puis je faire ça? Plus précisément, dans a.Java, J'ai utilisé le code suivant:

DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document doc = docBuilder.parse (new File("data/b.xml"));

Ce code ne peut pas trouver b.xml. Cependant, si je change le chemin d'accès en src/com/example/myproject/data/b.xml Alors cela fonctionne. L'emplacement actuel semble être à la racine de mon fichier de projet.

Mais je vois les exemples des autres, si b.xml Et a.Java Sont dans le même dossier, alors nous pouvons directement utiliser new File("b.xml"). Mais j'essaie mettre b.xml dans le même dossier que a.Java plutôt que de mettre dans le sous-dossier, mais cela ne fonctionne pas. Si cela fonctionne, dans mon cas, je devrais être en mesure d'utiliser new File("data/b.xml"), non? Je ne comprends vraiment pas pourquoi cela ne fonctionne pas.

10
Joey

S'il se trouve déjà dans le chemin de classe et dans le même package, utilisez

URL url = getClass().getResource("b.xml");
File file = new File(url.getPath());

OU, lisez-le comme un InputStream:

InputStream input = getClass().getResourceAsStream("b.xml");

Dans une méthode static, vous pouvez utiliser

InputStream in = YourClass.class.getResourceAsStream("b.xml");

Si votre fichier n'est pas dans le même package que la classe à partir de laquelle vous essayez d'accéder au fichier, vous devez lui donner un chemin relatif commençant par '/'.

ex : InputStream input = getClass().getResourceAsStream
           ("/resources/somex.cfg.xml");which is in another jar resource folder
20
NINCOMPOOP