Newsgroup: it.comp.java
Titolo: copiare un file

Ciao a tutti avrei bisogno una mano..
il mio problema č:
vorrei copiare un file č scriverlo con una altro nome..
esempio:
ho il file a.txt voglio copiarlo identito con il nome di v.txt
per adesso l' unica soluzione che ho saputo fare č stato quellla di scorrere
il file č scriverlo riga per riga..
ma non sembra molto furba.. :-((
Qualcuno ha qualche suggerimento?
Grazie

 il mio problema è:
Io ho risolto cosi...
public static void copyFile(String source, String dest) throws
IllegalArgumentException, FileNotFoundException, IOException
 {
  FileWriter fw = null;
  FileReader fr = null;
  BufferedReader br = null;
  BufferedWriter bw = null;
  File fileSource = null;
  if ((source == null || source.equals("")) || ((dest == null) ||
dest.equals("")))
  throw new IllegalArgumentException("Questo metodo non può accettare
Stringhe argomento nulle o vuote (\"\")!");
  try
  {
   fr = new FileReader(source);
   fw = new FileWriter(dest);
   br = new BufferedReader(fr);
   bw = new BufferedWriter(fw);
   fileSource = new File(source);
   int fileLength = (int) fileSource.length();
   char charBuff[] = new char[fileLength];
   while (br.read(charBuff,0,fileLength) != -1)
    bw.write(charBuff,0,fileLength);
  }
  finally
  {
   try
   {
    if (br != null)
     br.close();
    if (bw != null)
     bw.close();
   }
   catch(IOException ioe)
   {
   }
  }
 }

ti ringrazio il tuo metodo funziona..
pensavo ci fosse già un comando predispoto per fare questo..
l' unico che si avvicina è il rename.. però cambia solo il nome del file di
origine .. non lo copia..

io farei cosě
import java.io.*;
public class CopiaFile{
    public void copia(File from, File to) throws IOException{
        FileInputStream fis = new FileInputStream(from);
        FileOutputStream fos = new FileOutputStream(to);
        byte[]buffer = new byte[1024];
        int byteLetti = 0;
        while((byteLetti = fis.read(buffer)) > 0){
            fos.write(buffer, 0, byteLetti);
            }
        fis.close();
        fos.flush();
        fos.close();
        }
    public static void main (String[]args){
        try{
            File a = new File("C:/a.txt");
            File b = new File("C:/b.txt");
            CopiaFile cf = new CopiaFile();
            cf.copia(a, b);
            }catch(IOException e){
                System.out.println(e.getMessage());
                }
            }
    }
--------------------------------
Inviato via 
http://usenet.libero.it

[public ...CUT...]
ottimo :-)!
Magari il metodo copia direttamente statico, senza bisogno di istanziare 
la classe ogni volta, visto che deve fare un operazione utilizzando 
solamente le variabili di input!
a quel punto
	CopiaFile cf = new CopiaFile();
	cf.copia(a, b);
diventa
	CopiaFile.copia(a,b);
Ciao!

Grazie a tutti ma ho usato il metodo di Daniele Rucci

  }
-- 
Lucio Benfante
Brainbench MVP for Java 1
http://www.brainbench.com
MyTranscript: 
http://www.brainbench.com/transcript.jsp?pid=167064

 qualcosa di piu' efficiente.
Dipende da cosa intendi per efficiente, non riesco a comprendere cosa ci
guadagni a implementare degli stream solo per caratteri ASCII.
Velocità forse?
Cosi facendo saresti vincolato solo a file di testo.
Personalmente l'avevo fatto anni fa perchè i file da copiare erano file
binari.

 
...come dicevo...questo e' rischioso, dato che non puoi essere sicuro di
riuscire ad allocare una quantita' di memoria grande quanto il file.
Ad esempio, con le impostazioni di default della JVM di Sun, gia' un file
di soli 64MB farebbe fallire il tuo metodo.
Meglio un buffer di dimensione fissata.
Riassumendo, io lo riscriverei cosi':
public static void copyFile(String source, String dest)
  throws FileNotFoundException, IOException
{
  BufferedInputStream is = null;
  BufferedOutputStream os = null;
  try {
    is = new BufferedInputStream(
           new FileInputStream(source), 2048);
    os = new BufferedOutputStream(
           new FileOutputStream(dest), 2048);
    int b;
    while ((b = is.read()) != -1) {
      os.write(b);
    }
  } finally {
    try {
      if (os != null)
        os.close();
      if (is != null)
        is.close();
    } catch(IOException ioe) {}
  }
}
Io ho fissato la dimensione dei buffer a 2KB, ma potrebbe essere una
buona idea parametrizzare questo valore in modo che possa essere adeguato,
se necessario.
..a proposito. Qualcuno sa qual'e' la dimensione di default del buffer di
un BufferedInputStream? La documentazione (1.4.1) non ne parla. Invece
dice che quella per un BufferedOutputStream e' di 512 bytes. Strana
asimmetria...


 l'avevo fatto anni fa perchè i file da copiare erano file binari.
-- 


 vorrei copiare un file è scriverlo con una altro nome..
Siccome 'sta domanda mi pare ricorrente, ho aggiornato la FAQ:
http://space.tin.it/computer/csadun/javafaq.html#d1-51
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 dice che quella per un BufferedOutputStream e' di 512 bytes.
BufferedInputStream: 2048
BufferedOutputStream: 512
- Dario -

 BufferedInputStream: 2048
...qual'e' la fonte?


 ...qual'e' la fonte?
I sorgenti di BufferedInputStream.java
presenti nel file zippato src.zip
disponibile nel download di j2sdk1.4.1_01
dal sito della Sun.
- Dario -

 piu' generale.
si devo usare solo file txt..
però se ce ne fosse qualcuna in generale andrebbe meglio
:-)
Grazie