PDA

View Full Version : Copiare il contenuto di un file


wakko_kid
11-02-2005, 13:29
Devo copiare il contenuto di un file in una altro file SENZA copiare l'intero file.
Mi spiego meglio: ho il file esempio.exe, voglio aprirlo, leggerne il contenuto, e scriverlo nel file esempio2.exe.
Io ho provato con questo codice:
import java.io.*;

public class Copy
{ public static void main(String[] args) throws IOException
{
File inputFile = new File("sizer.exe");
File outputFile = new File("sizer2.exe");
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1)
out.write(c);
in.close();
out.close();
}
}

Ma quando vado ad aprire il nuovo file mi dice che non trova l'ingresso di qualcosa... insomma, non funziona, da lo stesso errore che si ottiene se aprendo un file exe con il blocco note, copiando il contenuto,lo incollandolo su un'altra finestra e salvando il tutto con nomefile.exePenso che l'errore si adovuto al fatto che copiio il contenuto in modalitā testoe mi chiedo quindi come copiare il contenuto in "maniera efficace".Qualcuno mi saprebbe aiutare?Wako Kid

Fenomeno85
11-02-2005, 13:47
anche se non so java voglio solo sapere che ti serve leggere un file eseguibile. Alla fine te devi fare una copia del file :wtf:

~§~ Sempre E Solo Lei ~§~

anx721
11-02-2005, 21:50
Per leggere un file eseguibile devi aprirlo non come file di testo (che č quello che succede con la classe FileReader) ma come file binario, utilizzando FileInputStrem e FileOutputStream. Nell'esempio che ti riporto attacco agli stream di input e di output anche degli stream bufferizati per ottimizzare le operazioni di scrittura/lettura; inoltre il contenuto del file non lo leggo carattere per carattere, o meglio byte per byte, ma leggo 500 KBytes alla volta con l'istruzione read che legge dal file riempiendo il vettore buffer; il metodo read restituisce anche il numero di bytes letti: quando questo č zero interrompo la lettura scrittura e chiudo gli stream:



import java.io.*;


public class Copy
{
public static void main(String[] args) throws IOException {
File inputFile = new File("sizer.exe");
File outputFile = new File("sizer2.exe");
InputStream finput = new BufferedInputStream(new FileInputStream(inputFile));
OutputStream foutput = new BufferedOutputStream( new FileOutputStream(outputFile));
byte[] buffer = new byte[1024 * 500];
int bytes_letti = 0;
while((bytes_letti = finput.read(buffer)) > 0)
foutput.write(buffer, 0, bytes_letti);
finput.close();
foutput.close();
}
}