[Java] Comprimir un archivo y enviarlo por Servlet Response
Generar un archivo en base a un objeto o clase para luego transformarlo en un archivo CSV, el cual luego es comprimido y enviado en el Response de un Servlet.
public static ByteArrayOutputStream exportarCSV( Obj obj ) {
ByteArrayOutputStream csvfout = new ByteArrayOutputStream();
try {
List resultadoArchivo = obj.getList();
for ( String linea : resultadoArchivo ) {
int pos = linea.indexOf( '\n' );
csvfout.write( linea.getBytes() );
if ( pos < 0 ) {
csvfout.write( linea.getBytes() );
}
}
csvfout.flush();
}catch ( IOException e ) {
e.printStackTrace();
}
return csvfout;
}
String csvName = "salida.csv";
ByteArrayOutputStream csvfout = ViewHelper.exportarCSV(obj);
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE));
ZipEntry e = new ZipEntry(csvName);
out.putNextEntry(e);
byte[] data = csvfout.toByteArray();
out.write(data, 0, data.length);
out.closeEntry();
out.close();
Tomar un archivo CSV desde un directorio, para luego comprimirlo y enviarlo en el Response de un Servlet.
String csvName = "salida.csv";
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE));
ZipEntry e = new ZipEntry(csvName);
out.putNextEntry(e);
byte[] data = Files.readAllBytes("C:\archivo");;
out.write(data, 0, data.length);
out.closeEntry();
out.close();