2012-09-14 25 views
10

Jeśli chcę przeczytać "Words.txt", który jest w tym samym pakiecie co klasa, w jaki sposób mogę to zrobić? Po prostu Scanner = new Scanner(new File("Words.txt")); zwraca błąd.Java - Pobieranie pliku z tego samego pakietu

+6

Spróbuj umieścić plik .txt w katalogu głównym projektu. Pliki tekstowe mogą znajdować się w tym samym folderze co pliki w konkretnym pakiecie, ale tak naprawdę nie są częścią pakietu. Zamiast tego musisz załadować go z systemu plików (lub alternatywnie ze słoika lub wojny). – Marvo

+0

To zadziałało; dzięki! –

Odpowiedz

0

Zakładając, że plik tekstowy jest w tym samym katalogu co .class zamiast pliku .java można zrobić

Scanner scanner = new Scanner(getClass().getResourceAsStream("Words.txt")); 

Co trzeba będzie szukać pliku w bieżącym katalogu roboczym. Kiedy budujesz swój program, jest to zazwyczaj katalog główny twojego programu. Kiedy uruchamiasz go jako samodzielny program, zwykle jest to katalog, z którego program został uruchomiony.

+1

Nie wiem, czy każda odpowiedź jest po prostu oparta na innym, czy też nazwa metody właśnie się zmieniła, ale jest to 'getClass(). GetResourceAsStream (" Words.txt ")' – Winter

+0

@Winter oparty na mojej łuszczącej się pamięci. Dziękuję Ci. –

15
InputStream is = MyClass.class.getResourceAsStream("Words.txt"); 
... 
+0

działa, jeśli importujesz plik JAR, który używa tego kodu – kommradHomer

2
Scanner = new Scanner(new File("/path/to/Words.txt")); 

Argument w pliku() konstruktora, jest względna ścieżka do systemu swoją VM jest uruchomiona, to s nie zależy od pakietu Classe użytkownika.

Jeśli Twój words.txt jest zasobem pakowane z wojną można zobaczyć tutaj: Load resource from anywhere in classpath

0
Scanner scanner = new Scanner(getClass().getResourceAsInputStream("Words.txt")); 

String s = new String(); 

while(scanner.hasNextLine()){ 


     s = s + scanner.nextLine(); 


} 
+0

Miałeś na myśli 'getClass(). GetResourceAsStream (" Words.txt ")' – Winter

Powiązane problemy