I have a web application which needs to perform a file copy operation and show user a progress bar.
Currently, the copy is being done by calling cpio
which
Basically, you should use a listener pattern. In this example the listener has a single method to accept the # of bytes which were just written. It could be pre-populated with the total file size to calculate a percentage to show on the screen.
ReadableByteChannel source = ...;
WritableByteChannel dest = ...;
FileCopyListener listener = ...;
ByteBuffer buf = ByteBuffer.allocateDirect(BUFFER_SIZE);
while (src.read(buf) != -1) {
buf.flip();
int writeCount = dest.write(buf);
listener.bytesWritten(writeCount);
buf.compact();
}
buf.flip();
while (buffer.hasRemaining()) {
int writeCount = dest.write(buf);
listener.bytesWritten(writeCount);
}