2011-03-10 2 views
0

Ce codePourquoi cet appareil vérifie-t-il que mon répertoire n'existe pas?

URL listofFiles = this.getClass().getResource("someDir"); 
File f = new File(listofFiles.toString()); 
File[] files = f.listFiles(); 

fonctionne dans un test unitaire JUnit dans un environnement de serveur Web Tomcat.

L'URL retournée est définitivement valide. Je suis allé dans le Finder dans OS X, effectué un "Go to Directory", collé dans la valeur de listofFiles et vu tous mes fichiers dans le répertoire.

Pourquoi listFiles() renvoie null?

+1

Et Oui. C'est un annuaire. – bobber205

+0

Vous devriez vérifier cela: appelez 'f.exists()' et 'f.isDirectory()' pour vous assurer. – Jorn

Répondre

1

Selon the Javadoc for File.listFiles():

Retours: Un tableau de résumé indiquant les noms de fichiers fichiers et répertoires dans le répertoire désigné par ce chemin abstrait. Le tableau sera vide si le répertoire est vide. Renvoie null si ce chemin d'accès abstrait ne dénote pas un répertoire ou si une erreur d'E/S se produit.

Le fait que vous obtenez une valeur null de retour indique que le chemin que vous passez dans le constructeur de fichier ne pointe pas vers un répertoire.

Je suppose que passer le résultat de URL.toString() au constructeur de fichier est la construction d'un chemin qui n'est pas ce que vous pensez qu'il est. Au lieu de cela, essayer quelque chose comme

File f = new File(listofFiles.toURI()); 

De plus, vous pouvez connecter la valeur de f.getAbsolutePath() pour vous assurer que le chemin en cours de lecture est le même que ce que vous attendez.

+0

Il me semble que la méthode getClass() retourne une mauvaise valeur car quelque chose est "désynchronisé". Je dois reconstruire mon projet semi-fréquemment (2 ou 3 fois par jour en travaillant dessus) et ça marche juste après. Nous utilisons Tomcat si cela fait une différence. – bobber205

2

Le constructeur de fichier avec une chaîne attend un chemin, pas (le toString de) une URL. Utiliser un constructeur différent, par exemple new File(listofFiles.toURI()). Ou donnez-lui un chemin: new File(listofFiles.getPath()). Mise à jour: Ou (aussi laid que cela puisse paraître) try both File constructors, comme le suggère Java-gourou Kohsuke Kawaguchi.

Si seulement nous avions constructeur fichier (URL) ...

Questions connexes