Newsgroup: it.comp.java
Titolo: Come faccio a fare eseguire un copia file dal programma?

Sto lavorando con win95 e vorrei inserire all'interno del programma un
comando "copy file.mio file2.mio"
ho provato con
Process p=Runtime.getRuntime().exec("copy ....");
p.waitFor();
ma non funziona.
Se metto invece che copy un comando che faccia partire un applicazione tipo
exec ("explorer")
funziona. non si possono dare comandi dos? In tal caso quale potrebbe essere
una soluzione alternativa?
Grazie.

una soluzione alternativa?
apri il file, le leggi e lo scrivi in un altro file ;)
Andrea
http://digilander.iol.it/schiele

ho provato con Process p=Runtime.getRuntime().exec("copy ...."); p.waitFor(); ma non funziona.
Leggi sotto e vedrai che ti funziona! ;)
[REPOST]
-----------------------------------------------[ java.lang.Runtime ]---
Ciao a tutti,
ultimamente abbiamo letto varie domande e risposte che proponevano
diverse soluzioni su un tema molto importante: lanciare programmi
esterni da un applicazione Java. Per far questo, oramai è noto a
tutti, si usa la classe java.lang.Runtime.
Il problema nasce dal fatto che se uno volesse ad esempio
visualizzare un file .html nel browser predefinito dall'utente
non si sa quale esso sia, a meno che non si vada a spulciare
i file di registro usando JNI (Java Native Interface... c'è
chi lo ha fatto e ne è nato un utilissimo package JNIRegistry).
Ma non esiste una soluzione più spiccia, pratica, veloce,
semplice e funzionale? La risposta è sì e devo ringraziare
Massimo (nick: "un pelandrone") per aver suggerito di usare
start.exe solitamente contenuto in C:\WINDOWS\COMMAND\START.EXE.
In ogni caso al 99% è nel PATH e quindi non occorre il percorso
completo per eseguirlo.
La cosa bella è che start.exe riceve come parametro un nome di
un file e ne lancia l'applicativo predefinito passandogli il
file come argomento. Poco chiaro?
Facciamo qualche esempio: supponiamo vogliate scrivere l'Help
della vostra applicazione in HTML standard e vogliate
visualizzare tale Help (ad esempio alla pressione di un bottone
nella vostra applicazione) direttamente aprendo il browser
predefinito dall'utente sia esso Netscape, Internet Explorer,
Opera, HotJava od un altro ancora! Basterà qualcosa del genere:
      String[] strArray = new String[2];
      strArray[0]="start.exe"; // nome del processo da lanciare
      strArray[1]="index.html"; // parametri da linea di comando...
      Process p = r.exec (strArray); // esegue il processo
Oppure supponiamo vogliate aprire un documento di Word o
Excel o qualsiasi altro documento:
      String[] strArray = new String[2];
      strArray[0]="start.exe"; // nome del processo da lanciare
      strArray[1]="documento.doc"; // parametri da linea di comando...
      Process p = r.exec (strArray); // esegue il processo
Oramai abbiamo capito il trucchetto, concludo questo mio messaggio
dicendo che questa è a mio parere la soluzione migliore, perché
semplice, perché funzionale, perché rispetta i gusti e la
configurazione dell'utente!
Se volete passare parametri aggiuntivi all'applicazione predefinita
che aprirà/eseguirà/interpreterà il file da voi specificato lo
potete fare semplicemente così (testato e funziona!):
      String[] strArray = new String[4];
      strArray[0]="start.exe";
      strArray[1]="nomefile.estensione";
      strArray[2]="parametro1";
      strArray[3]="parametro2";
      Process p = r.exec (strArray); // esegue il processo
Consiglio di leggere anche l'help del comando start.exe e scoprirete
che si possono eseguire anche applicazioni in finestre minimizzate,
o aspettare che un'applicazione termini prima di continuare
l'esecuzione del vostro programma in Java.
---------------------------------------------------[ start.exe /h ]---
Esegue una applicazione Windows o MS-DOS.
START [opzioni] programma [arg...]
START [opzioni] documento.ext
/m[inimized] Esegue la nuova applicazione minimizzata (in background).
/max[imized] Esegue la nuova applicazione massimizzata.
/r[estored]  Ripristina la nuova applicazione (modalità predefinita).
/w[ait]      Aspetta che l'altra applicazione esca prima di ritornare.
---------------------------------------------------[ start.exe /h ]---
Ovviamente tutto questo si applica al sistema operativo Win32 e
dipende dall'esistenza del programma start.exe (credo che esista
anche in Windows 95, Windows 2000 e Windows NT... mi si conferma?)
Ecco il sorgente di un programma funzionante e completo... in questo
caso viene suonato un file MP3 con il player predefinito dall'utente
se ve ne è uno (il mio è... WinAmp!)
----------------------------------------------------[ Runner.java ]---
/*
 Runner - Demo of using java.lang.Runtime class
 Java Code by Castagna
 Semplicissimo esempio che mostra l'uso della classe java.lang.Runtime
 Ringrazio Massimo "il pelandrone" di news:it.comp.java
*/
import java.lang.Runtime;
import java.io.IOException;
public class Runner {
  public static void main (String args[]) {
    Runtime r = java.lang.Runtime.getRuntime();
    try {
      String[] strArray = new String[2];
      strArray[0]="start.exe"; // nome del processo da lanciare
      strArray[1]="musica.mp3"; // parametri da linea di comando...
      Process p = r.exec (strArray); // esegue il processo
    }
    catch (IOException e) {
      System.err.println ("Error on exec method call.");
      System.exit(1);
    }
    System.exit(0);
  } // main
} // Runner
----------------------------------------------------[ Runner.java ]---
Questo è tutto, solo un'altra piccola considerazione: credo sempre che
comunque sia sempre MOLTO utile imparare ad usare JNI (Java Native
Interface) e credo che presto posterò un esempio a riguardo che con
una DLL (start.dll) farà esattamente quanto illustrato in questo
messaggio.
Credo che con linguaggi di programmazione tipo Delphi, Visual Basic o
Visual C++ vi siano già presenti delle funzioni che preso il nome di
un files lo aprono nell'applicazione predefinita per esso in base
alla estensione del nome del file stesso.
Per fare una cosa del genere penso occorra conoscere la struttura del
Registry di Windows (qualcuno sa se varia tra Windows 95/98/2000/NT?)
usare JNIRegistry per leggere/scrivere dal Registry e una volta
scoperto percorso e applicazione associata ad un file eseguirla con
java.lang.Runtime.
Chissà poi se esistono soluzioni analoghe in ambito Linux/Unix,
mi verrebbe in mente Mailcap, ma forse sparo una... :/
Se qualcuno si vuole buttare con me in questo esempietto ben venga,
ho anche visto che qualcuno di voi, non ricordo precisamente chi,
parlava di files .reg, a quel che ho capito sono semplici files di
testo che una volta lanciati modificano chiavi nel Registry di
Windows... quello che non ho capito è la sintassi di questi files.
Ora finisco: lo giuro... il miglior modo per fornire dell'help
alle proprie applicazioni Java, secondo me è e resta l'HTML puro,
ora con questo sistema potete anche fare degli Help contestuali
andando ad aprire immediatamente la pagina HTML che interessa,
magari posterò un esempio su questo più avanti. Se interessa...
Ed il miglior modo per distribuire le proprie applicazioni è,
quando possibile, tutto eseguibile da una directory qualsiasi,
quando questo non è possibile (per vari motivi) usare il
Registry di Windows è una scelta consigliabile e, professionalmente
parlando, dovuta.
Questo è il [link] alla home page di JNIRegistry di cui si parla:
--------------------------------------[ The JNIRegistry Home Page ]---
http://www.ice.com/java/jnireg.html
The com.ice.jni.registry package implements a Java native interface
to the Windows Registry API. This package allows you to access,
modify, and export registry resources. The package includes all
source code required to build the native interface, as well as the
DLL required to implement the native code.
--------------------------------------[ The JNIRegistry Home Page ]---
Un saluto a tutti, mi scuso per la lunghezza del messaggio, ma credo
sia utile ai più, soprattuto per chi è agli inizi... :)
Alla prossima.
------------------------[ Posted on news:it.comp.java by Castagna ]---

 una soluzione alternativa?
Si può, si può... la sintassi dovrebbe essre "
COMMAND.COM
 /C comando" o qualcosa
del genere, fai 
command.com
 /? dal prompt. Sotto NT sarà CMD.EXE. E sicuramente,
così implementato non sarà portabile.
Ciao,
 Stefano
----------
"X WindowSSS, teSSSoro mio... lo odieremo per SSSempre"
Bill Gollum
----------