2013-08-08 10 views
5

Questa è la prima volta che ho riscontrato questo problema con l'accesso ai file da parte di Java su linux. Il problema è come l'intestazione dice - FileNotFoundException viene generato quando il file esiste realmente. Inoltre l'applicazione con la stessa configurazione (file props.txt) funziona come dovrebbe su Windows. Permettetemi di fornire un po 'di output su consolePerché viene emessa FileNotFoundException mentre esiste su linux

 
[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$ 

e qui è il codice Java responsabile della generazione che l'uscita (almeno dopo aver chiamato ./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")); 
} 

Allora, perché non si trova il file props.txt quando è effettivamente lì?

+1

Il percorso corretto è veramente '/ usr/home/datasu /'? Non conosco la tua versione linux/unix, ma di solito non si trova a '/ home/...'? Soprattutto perché mostri '~ /' nella prima riga che fa riferimento alla home directory. – DrColossos

+0

Ecco il risultato PWD per te: datasu @ dedi2392: ~/netcrawler/dkpto $ pwd -> /usr/home/datasu/netcrawler/dkpto – Antoniossss

+1

Qual è la sintassi esatta di 'args' che stai passando a' readProperties '? –

risposta

6

La stringa "args" probabilmente ha un carattere non stampabile alla fine, come uno spazio. Potresti usare String.trim() per rimuovere tali caratteri prima di usare quella variabile.

+2

Wow, ora è solo stupido. Ho ricontrollato la sceneggiatura del pranzo per alcuni spazi ecc. Nel nome del file ma non c'era niente. TUTTAVIA il taglio dell'argomentazione ha fatto il trucco. Grazie per il suggerimento. Lezione per oggi: Mai fidarsi degli argomenti passati dalla riga di comando. C'è un modo per rendere VI, VIM per visualizzare non stampabili? – Antoniossss

+0

Sì, ': set list' –

+0

Si potrebbe sempre' echo $ arg | hexdump -C' –

2

La tua cartella Inizio è davvero questa?

/usr/home/datasu 

/home/datasu è dove è normalmente su linux.

Inoltre, provare a cambiare quella linea a questo:

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

Se chiami che, come ./propsUpdate ./props.txt che lavorerà dalla directory di lavoro corrente.

+0

Questo percorso è corretto, come si può avviare l'applicazione e la cartella genitore è elencata bene con tale percorso (controllare il codice che lo ha generato) – Antoniossss

+0

Il codice che hai fornito era la prima versione, e ho cambiarlo per vedere il percorso completo del file nell'eccezione – Antoniossss

+0

Considerare il fatto che il percorso è assoluto, quindi la directory di lavoro non dovrebbe influire su di esso. Inoltre il percorso è creato da Java e lo stesso codice funziona bene su Windows. – Antoniossss

Problemi correlati