Java provides the ZipInputStream class for reading from a zip file. Heres a general example of its usage
File file = new File("my.zip");
ZipInputStream zin = new ZipInputStream(new FileInputStream(file));
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null) {
String filename = ze.getName();
if (!ze.isDirectory()) {
// Read file contents from 'zin'
// For example you could read from zin and write it to a FileOutputStream
// https://helpdesk.objects.com.au/java/how-do-i-copy-one-stream-to-another-using-java
}
zin.closeEntry();
}
zin.close();
The same can be used to read the contents of a jar file.
written by objects
\\ tags: decompress, file, stream, unzip, zip, ZipInputStream
You need to read any output from standard output or standard error when running a process using Runtime.exec(). If you don’t the buffers may fill up causing the process to lock up.
The following code can be used to handle reading the process output, and the linked article provides a lot of great insight into the correct usage of Runtime.exec().
/** code copied from
* http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
* When Runtime.exec() won't: Navigate yourself around pitfalls
* related to the Runtime.exec() method
* @author Michael Daconta
*/
import java.util.*;
import java.io.*;
class StreamGobbler extends Thread
{
InputStream is;
String type;
OutputStream os;
StreamGobbler(InputStream is, String type)
{
this(is, type, null);
}
StreamGobbler(InputStream is, String type, OutputStream redirect)
{
this.is = is;
this.type = type;
this.os = redirect;
}
/** creates readers to handle the text created by the external program
*/
public void run()
{
try
{
PrintWriter pw = null;
if (os != null)
pw = new PrintWriter(os);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line=null;
while ( (line = br.readLine()) != null)
{
if (pw != null)
pw.println(line);
System.out.println(type + ">" + line);
}
if (pw != null)
pw.flush();
} catch (IOException ioe)
{
ioe.printStackTrace();
}
}
}
written by objects
\\ tags: exec, hang, locked up, process, Runtime, stderr, stdout, stream
The ImageIO class provides utility classes for both read and writing images. To write your image to an output stream you would can use the write method telling it what format you want to write the image in, eg. JPEG, PNG.
ImageIO.write(image, "PNG", out);
written by objects
\\ tags: BufferedImage, stream