2010-09-27 6 views
2

Ok, donc c'est la ligne qui retourne null. Que fais-je de mal en créant ce FileInputStream?FileInputStream est Null?

FileInputStream fin = new FileInputStream(new File(getClass().getResource("data/levellocks.lv").toURI())); 
+2

Exactement quelle partie est 'null'? Il ne peut pas être fin, car 'new' ne retourne jamais' null'. –

Répondre

2

Sauf si vous avez vraiment besoin d'un flux d'entrée de fichier, vous ligne peut être simplifiée:

InputStream in = getClass().getResourceAsStream("data/levellocks.lv"); 

Class.getResource() et Class.getResourceAsStream sont liés à l'emballage. Pour obtenir le fichier par rapport à la racine du classpath, vous pouvez appeler ces méthodes sur le classloader:

InputStream in = getClass().getClassLoader().getResourceAsStream("data/levellocks.lv"); 

Avez-vous fait que le fichier est dans votre dossier binaire, à côté des fichiers .class? Pas seulement dans votre dossier source à côté des fichiers .java?

3

La seule chose qui peut être nul, il est getResource ("data/levellocks.lv") qui appelle l'appel Touri à l'échec

+0

mais peut-il encore être nul si le fichier est là? Parce que j'ai vérifié deux fois et c'est O_O – William

+2

ça ne regarde pas dans la zone que vous pensez être – AHungerArtist

2

Soit getClass ou getResource pourrait retourner null. Tout le reste devrait réussir ou jeter une exception.

2

En fait, j'ai juste traité ce problème (je ne suis pas un expert) mais essayez le débogage et voyez où le constructeur essaie de résoudre le nom. Pour moi, c'était le paquet de la classe. Donc, quand j'ai mis le fichier dans le dossier attendu, il l'a trouvé.

Serait probablement différent pour vous, car j'utilise maven. Mais je l'ai mis dans src/main/resources et il n'a pas pu le trouver. Quand j'ai mis une structure de dossier dans src/main/resources de com.work.hin.terminology.match (qui était le paquet de la classe), elle l'a trouvé.