2013-08-08 12 views
5

Po raz pierwszy napotkałem na taki problem z dostępem do plików przez Javę na Linuksie. Problem jest taki, jak w nagłówku: - FileNotFoundException jest generowany, gdy plik faktycznie istnieje. Ponadto aplikacja z tą samą konfiguracją (plik props.txt) działa tak, jak powinna w oknach. Pozwól mi dostarczyć trochę wyjścia konsoliDlaczego wyskakuje wyjątek FileNotFoundException, gdy istnieje pod Linuksem

 
[email protected]:~/netcrawler/dkpto$ ls -l 
total 20 
-rwxrw-rw- 1 datasu datasu 114 Aug 7 15:53 autoupdate 
drwxr-xr-x 4 datasu datasu 4096 Aug 8 11:57 data 
drwxr-xr-x 2 datasu datasu 4096 Aug 8 11:57 log 
-rw-rw-rw- 1 datasu datasu 32 Aug 8 12:44 props.txt 
-rwxrw-rw- 1 datasu datasu 126 Aug 8 12:55 propsUpdate 
[email protected]:~/netcrawler/dkpto$ ./propsUpdate 
Parent: /usr/home/datasu/netcrawler/dkpto 
    1# -> propsUpdate 
    2# -> autoupdate 
    3# -> props.txt 
    4# -> data 
    5# -> log 
(No such file or directory)ava.io.FileNotFoundException: /usr/home/datasu/netcrawler/dkpto/props.txt 
     at java.io.FileInputStream.open(Native Method) 
     at java.io.FileInputStream.(Unknown Source) 
     at netcrawler.Autoupdater.readProperties(Autoupdater.java:71) 
     at netcrawler.Autoupdater.start(Autoupdater.java:54) 
     at netcrawler.Autoupdater.main(Autoupdater.java:47) 
[email protected]:~/netcrawler/dkpto$ java -version 
java version "1.6.0_45" 
Java(TM) SE Runtime Environment (build 1.6.0_45-b06) 
Java HotSpot(TM) 64-Bit Server VM (build 20.45-b01, mixed mode) 
[email protected]:~/netcrawler/dkpto$ 

i tu jest kod Java odpowiedzialny za generowanie, że wyjście (przynajmniej po wywołaniu ./propsUpdate)

private void readProperties(String args) throws FileNotFoundException, IOException { 
    System.out.println("Parent: " + new  File(args).getAbsoluteFile().getParentFile().getAbsolutePath()); 
    CommonTools.PrintArray(new File(args).getAbsoluteFile().getParentFile().list()); 
    properties.load(new FileInputStream(new File(args).getAbsoluteFile())); // this line throws the exception 
    stageNumber = Integer.parseInt(properties.getProperty(PROP_STAGE_NUMBER_KEY, "0")); 
} 

Więc dlaczego plik props.txt nie znaleziono kiedy tak naprawdę tam jest?

+1

Czy właściwą ścieżką jest naprawdę '/ usr/home/datasu /'? Nie znam twojej wersji Linux/Unix, ale czy nie jest to zwykle w '/ home/...'? Zwłaszcza, że ​​pokazujesz '~ /' w pierwszym wierszu, który kieruje do katalogu domowego. – DrColossos

+0

Oto wynik PWD dla ciebie: datasu @ dedi2392: ~/netcrawler/dkpto $ pwd -> /usr/home/datasu/netcrawler/dkpto – Antoniossss

+1

Jaka jest dokładna składnia 'args', którą przechodzisz do' readProperties '? –

Odpowiedz

6

Ciąg "args" prawdopodobnie ma na końcu znak niedrukowalny, jak spacja. Możesz użyć String.trim(), aby usunąć takie znaki przed użyciem tej zmiennej.

+2

Wow, teraz to głupie. Mam podwójnie sprawdzany skrypt lunchu dla niektórych przestrzeni itp. W nazwie pliku, ale nic tam nie było. JEDNAKOLWIEK przycinanie argumentów sprawiło, że lewę. Dzięki za sugestię. Lekcja na dziś: Nigdy nie ufaj argumentom przekazywanym przez linię poleceń. Czy jest jakiś sposób, aby VI, VIM wyświetlał niedrukowalne? – Antoniossss

+0

Tak, ': set list' –

+0

Zawsze możesz" echo $ arg | hexdump -C' –

2

Czy Twój katalog domowy to naprawdę ścieżka?

/usr/home/datasu 

/home/datasu jest tam, gdzie zwykle jest na Linuksie.

także spróbować zmienić tej linii to:

properties.load(new FileInputStream(new File(args)); 

Jeśli dzwonisz że ./propsUpdate ./props.txt że będzie pracować z bieżącego katalogu roboczego.

+0

Ta ścieżka jest prawidłowa, ponieważ możesz uruchomić aplikację se, a folder nadrzędny jest wymieniony dobrze na tej ścieżce (sprawdź kod, który ją wygenerował) – Antoniossss

+0

Podany kod był pierwszą wersją, a ja mam zmień go, aby zobaczyć pełną ścieżkę do pliku w wyjątku – Antoniossss

+0

Proszę wziąć pod uwagę fakt, że ścieżka jest absolutna, więc katalog roboczy nie powinien mieć na to wpływu. Ponadto ścieżka jest tworzona przez Javę i ten sam kod działa dobrze na oknach. – Antoniossss

Powiązane problemy