PDA

View Full Version : [Java]Richiesta: lista file in un array


feboss
29-02-2008, 18:10
Salve, non so se è possibile richiedere qualcosa da chi è più esperto in programmazione.ci provo

1)Mi serve un metodo che mi restituisca un array di stringhe contenente il nome dei file contenuti in una directory

2)il comando per poter lanciare un programma esterno.
tipo unrar.exe

3)un comando per poter rinominare un file
tipo ren x.exe b.exe

wingman87
29-02-2008, 18:31
1)Link (http://java.sun.com/javase/6/docs/api/java/io/File.html)
Crei un'istanza della classe File passando al costruttore il path della cartella e poi usi il metodo list()
2)
Runtime.getRuntime().exec("unrar.exe");
3)Vedi lo stesso link di 1. Stavolta devi usare il metodo renameTo()

Ciao!

feboss
29-02-2008, 18:40
1)Link (http://java.sun.com/javase/6/docs/api/java/io/File.html)
Crei un'istanza della classe File passando al costruttore il path della cartella e poi usi il metodo list()


Grazie mille per la risposta e la velocità
Mi chiedevo con questo sistema mi restituisce in pratica quasi lo stesso risultato di dir?perchè la cosa importante per me era avere accessibile sottoforma di stringa ogni file, in modo da poterci modificare il nome ecc ecc

wingman87
29-02-2008, 18:47
Prego. Leggendo la documentazione direi che l'unica differenza è che non è assicurato che i file vengano messi nell'array in ordine alfabetico. Ad ogni modo è spiegato proprio qui: LINK (http://java.sun.com/javase/6/docs/api/java/io/File.html#list())

feboss
01-03-2008, 00:06
ok il primo punto l'ho fatto alla grande
ora però riscontro un problema nel secondo

1)se si avvia il processo unrar e inizia a scompattare come faccio a dirgli di aspettare che finisca prima di continuare con il codice che viene dopo?

edit:trovato ma non riesco a farlo funzionare(process.waitFor()) perchè o mi entra in loop infinito o utlizzando
l'exec(String[] cmd) non mi riconosce la stringa dei comandi che passo come parametro, dandomi quindi questo errore:
CreateProcess error=123, La sintassi del nome del file, della directory o del volume è incorretta
allora quello che voglio ottenere è:lanciare un unrar file e poi un rename di un file che ho estratto.
quindi il rename deve partire quando il processo di unrar è finito

wingman87
01-03-2008, 02:14
Allora in teoria dovresti fare:
Process p=Runtime.getRuntime().exec("unrar.exe");
p.waitFor();

Se non ti funziona potrebbe essere perché il processo rimane aperto in background, prova a vedere con taskmanager

banryu79
01-03-2008, 13:15
Salve,

in passato ho avuto anch'io i miei grattacapi per far funzionare correttamente un processo da consolle lanciato col metodo exec() per un'applicativo che sto scrivendo...

Il fatto è che ci sono alcune cose da tenere presenti, che nei javadoc non sono scritte in maniera così tanto visibile...
(mi riferisco, ad esempio, al fatto di dover gestire lo svuotamento dell'output & error buffer della consolle in cui il processo gira e sputa gli output, altrimenti i buffer si saturano e ciao)

Informazioni prezione ed esaustive le trovi --> qui (http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html)

Con queste info dovresti risolvere qualsiasi problema.

Ciao :)

feboss
01-03-2008, 14:22
Perfetto ci sono riuscito.raga vi ringrazio per l'aiuto datomi.
alla prox

feboss
04-03-2008, 14:05
Con quel metodo si ha l'ouput quando il processo è finito.

Esiste un modo per avere un output continuo?
cioè se faccio un unrar e mi comunica la percentuale ogni 1% cè la possibilità di visualizzarlo?

banryu79 risalvami :D

banryu79
04-03-2008, 17:26
Porta pazienza ma oggi sono molto occupato; nei prossimi giorni ci do un occhio perchè interessa anche me (cioè così al volo non ho una soluzione ma se hai usato la classe StreamGlobber alla fine dell'articolo nel link, avrai visto & capito che è possibile catturare gli stream associati al processo, quindi se il processo in questione "sputasse" un output adatto tu potresti andare a leggerlo per, che so, controllare una barra di progressione da visualizzare all'utente, ad esempio)