Newsgroup: it.comp.java
Titolo: codice per copiare un file da java

Visto che la domanda ricorre spesso qui sul Ng vi posto un possibile esempio
di codice per copiare file da java. (in ambiente win98 sostituire cmd con
start).
Ciao
import java.io.IOException;
public class CopiaFile{
    public static void main(String arg[]){
    Runtime r = Runtime.getRuntime();
    String[] parametri=new String[5];
    parametri[0]="cmd";
    parametri[1]="/K";
    parametri[2]="copy";
    parametri[3]="c:\\pippo.txt";
    parametri[4]="c:\\temp";
    try
    {
    Process p=r.exec(parametri);
    }
    catch(IOException io){}
    }//end main
}//end class

di codice per copiare file da java.
Rilancio. Dato che il tuo programma (oltre a non essere portabile) non
dice se l'operazione è riuscita, ho pensato una semplice soluzione
*pure java*:
import java.io.*;
public class Copy
{
	public static void main(String[] args)
	{
		if(args.length!=2)
		{
			System.out.println
("Use: java Copy <srcfile> <dstfile>");
			return;
		}
		String srcname=args[0];
		String dstname=args[1];
		File srcfile=new File(srcname);
		FileInputStream src=null;
		try
		{
			src=new FileInputStream(srcfile);
		}
		catch(FileNotFoundException e)
		{
			System.out.println
("Error: file "+srcname+" not found");
			return;
		}
		File dstfile=new File(dstname);
		if(dstfile.exists())
		{
			if(dstfile.isFile())
			{
				String answ="";
				try
				{
					BufferedReader console=new
BufferedReader(new InputStreamReader(System.in));
					System.out.print
("Warning: "+dstname+" exists. Want to overwrite? ");
					answ=console.readLine();
				}
				catch(IOException e)
				{
					System.out.println
("Error: unespected io exception from console");
					return;
				}
				String[] yesarr={"y","yes","s","si"};
				boolean yes=false;
				for(int idx=0;idx<yesarr.length;idx++)
if(answ.equalsIgnoreCase(yesarr[idx]))
					{
						yes=true;
						break;
					}
				if(!yes)
				{
					System.out.println
("End: copy aborted");
					return;
				}
			}
			else if(dstfile.isDirectory())
			{
				System.out.println
("Error: cannot copy to "+dstname+" (is directory)");
				return;
			}
		}
		FileOutputStream dst=null;
		try
		{
			dst=new FileOutputStream(dstfile);
		}
		catch(FileNotFoundException e)
		{
			try
			{
				dstfile.createNewFile();
			}
			catch(IOException x)
			{
				System.out.println
("Error: cannot create "+dstname);
				return;
			}
		}
		int length=(int)srcfile.length();
		byte[] buf=new byte[length];
		try
		{
			src.read(buf,0,length);
			dst.write(buf,0,length);
		}
		catch(IOException e)
		{
			System.out.println
("Error: unespected io exception in copy");
			return;
		}
		System.out.println("End: done");
	}
}
Sicuramente un po più complesso, ma credo anche più elegante, no? Ed
ora in pasto agli analisti per l'ottimizzazione...
Respect,
Mauri.
 
-- 
La forza di gravità è un falso mito,
è la Terra che succhia!

Sicuramente piu elegante ma il tuo codice fa una cosa diversa dalla mia.
Tu copi il contenuto da un file ad un altro se non sbaglio e questo è
possibile solo con i binari e i file ascii credo (forse è una fesseria).
Il mio, per quanto migliorabile (di molto!!) ... esegue il copy di sistema
valido per qualunque file.
(Tra l'altro con la stessa tecnica posso anche eseguire programmi).
Comunque da un punto di vista dell'eleganza il mio è decisamente rozza.
Posso chiederti che intendi per portabilità?
Gabri

 |
| Delete WORLD from address    |
+------------------------------+

possibile solo con i binari e i file ascii credo (forse è una fesseria).
Esistono altri files (che non siano directory, visto che copy del DOS
non mi sembra le copi...) che non siano file binari o ascii?
Mi sa che comincio ad essere troppo vecchio per questi computer
moderni coi files ternari... :-}
A parte l'ironia, il mio java Copy copia il contenuto di un file byte
a byte, come credo faccia quello del DOS, e altro non c'è, a parte
forse pensare di copiare i settori del disco... azz, ma stasera mi
voglio male?
Respect,
Mauri.
P.s.: per la portabilità ti hanno risposto, e quella IMVHO è un'issue
che da sola varrebbe anche qualche limitazione di funzionalità.


 Sotto sistemi Unix, MacOs, BeOs, ecc. pensi che esista "cmd /k copy ..." ?
Si verissimo.
Comunque avete mai provato a far girare una applicazione java su pc e su
unix per esempio?

 moderni coi files ternari... :-}
E' ora che vado a nanna!

 e su  unix per esempio?
Ogni giorno:
- ambiente di sviluppo e test su sistemi Winzozz
- ambiente di produzione su sistemi unix-like 
  (sun solaris, ibm aix, linux su ix86)
Saluti
-- 
+-------------------+
| Bagnoli Roberto   |
| Nouvelle srl      |
| MODENA (ITALY)    |
| 
rbag...@orion.it
 |
+-------------------+

 unix per esempio?
Come Roberto Bagnoli, tutti i giorni:
1) sviluppo win 2000
2) test (e produzione...) solaris
Ma perché, dubitavi? :)
tityrus


no no non dubitavo.
Era solo per tastare con mano la realtà.
In java ho tutto da imparare.


Volevo chiedervi a tutti voi: che ambiente di sviluppo utilizzate??
usate il jdk o tool di sviluppo come JBuilder, VAJ, VisualJ..... ?

 usate il jdk o tool di sviluppo come JBuilder, VAJ, VisualJ..... ?
VisualAge for Java v.3.5.3,
ma di questo NON USO ASSOLUTAMENTE la Visual Composition 
(per intenderci, il tool visuale per la creazione delle interfacce GUI) 
perche' (IMHO) genera codice che fa veramente schifo (e non credo che
esista un rad che si comporti molto meglio, in quanto il design della
GUI...ma questa e' un'altra storia ;).
Fortunatamente mi occupo prevalentemente di sviluppo server-side! ;)
Per il resto, VAJ e' un ambiente robusto e (sempre IMHO) ben fatto,
anche se un po' "pesante" in termini di risorse richieste per
farlo girare. 
Sul lato server, come servlet engine uso Tomcat (3.2.3 per ora).
NON application server (EJB container) in quanto la tecnologia 
EJB non mi convince fino in fondo (almeno per il target di applicazioni 
che sviluppo io)
Saluti
Roberto


 Roberto
Saluti
Michele
PS: Se tu o qualcun altro ha suggerimenti in proposito,
sarò felicissimo di seguire questa discussione, in 
quanto sono praticamente un neofita (lavoro da 1 anno).
E comunque tutto il lavoro che stiamo portando avanti è
ancora incentrato alla costruzione di un ambiente stabile.

 usate il jdk o tool di sviluppo come JBuilder, VAJ, VisualJ..... ?
JBuilder. Ma ho appreso con editor (non notepad che detesto con tutto
me stesso, ma cose tipo ultraedit) e jdk.
tityrus