PDA

Visualizza la versione completa : [JAVA] Problema nel copiare Jar innestati


Zero-2
21-09-2005, 22:21
Salve a tutti,
ho questa situazione

File Jar
--File Jar2
--File Jar3
--dir
----file1
----file2.mp3
..
installer
--Installer.class
..

devo copiare, tramite la classe Java installer, tutte le directory e il loro contenuto e i due file jar in una dir del pc.
Le directory e i file vengono copiati tranquillamente, i jar , invece, vengono copiati, e quando li vado ad aprire mi dice che danneggiato. La struttura interna presente per cliccando sul singolo file mi diche che il CRC errato ed inoltre gli mp3 vengono si copiati, ma il suono risulta distorto..
Segue il codice... che sbaglio?



InputStreamReader is=new InputStreamReader(jar.getInputStream(jar.getJarEnt ry(nome)));
OutputStreamWriter oos=new OutputStreamWriter(new FileOutputStream(tmpFile));

char read[]=new char[1];
while(is.read(read)!=-1)
oos.write(read);
oos.flush();
is.close();
oos.close();

anx721
21-09-2005, 23:22
non puoi copiare i file binari come file di testo, interpretando quindi i byte come dei char.



import java.io.*;

public void copy(String originalFile, String newFile) throws IOException {
File inputFile = new File(originalFile);
File outputFile = new File(newFile);
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();
}


oppure



import java.nio.channels.*;
import java.io.*;


public void copyFile(File sfile, File dfile) throws Exception
{
FileChannel source = new FileInputStream(sfile).getChannel();
FileChannel dest = new FileOutputStream(dfile).getChannel();
source.transferTo(0, source.size(), dest);
source.close();
dest.close();
}

Zero-2
21-09-2005, 23:35
Infatti :D :D :D
Ho risolto in questo modo


DataInputStream is=new DataInputStream(jar.getInputStream(jar.getEntry(no me)));
DataOutputStream oos=new DataOutputStream(new FileOutputStream(tmpFile));
byte read[]=new byte[1];
while(is.read(read)!=-1)
oos.write(read);
oos.flush();
is.close();
oos.close();

Zero-2
21-09-2005, 23:36
E' tutto il giorno che programmo e mi st bruciando il cervello :D:D:D:D:D Pensare che il char ha la stessa dimensione del byte ...
:oVVoVe: :oVVoVe: :oVVoVe: :oVVoVe:

anx721
21-09-2005, 23:51
non qustione di dimensione ma di interpretazione. Tieni presente comuqnue che il modo in cui hai implementato il metodo piuttosto inefficinete perch non usi stream bufferizzati e leggi un byte alla volta effettuando tanti accesssi al disco quanti sono i dbyte dei file

Zero-2
21-09-2005, 23:54
Si questo lo so, ma stavo cercando di risolvere il "problema" :)

Loading