我正在将文件从客户端传输到服务器。我不知道转移需要多少时间。但是我的 UI 将简单地保持不变,而不会向用户提供任何提示。我需要保持一个进度条,直到文件上传为止。我怎样才能做到这一点。
我有点意识到.net 中的这种情况。但是我们如何在java中做到这一点?
对于真正“不确定”的行为,垃圾神的回答是正确的。为什么您认为您的文件传输属于这一类?您是否从未在互联网上下载过带有某种进度条的文件?你能想象没有那个吗?
请参阅下面的示例,该示例在如何使用 JProgressBar 显示文件复制进度的答案中提供?
public OutputStream loadFile(URL remoteFile, JProgressBar progress) throws IOException
{
URLConnection connection = remoteFile.openConnection(); //connect to remote file
InputStream inputStream = connection.getInputStream(); //get stream to read file
int length = connection.getContentLength(); //find out how long the file is, any good webserver should provide this info
int current = 0;
progress.setMaximum(length); //we're going to get this many bytes
progress.setValue(0); //we've gotten 0 bytes so far
ByteArrayOutputStream out = new ByteArrayOutputStream(); //create our output steam to build the file here
byte[] buffer = new byte[1024];
int bytesRead = 0;
while((bytesRead = inputStream.read(buffer)) != -1) //keep filling the buffer until we get to the end of the file
{
out.write(buffer, current, bytesRead); //write the buffer to the file offset = current, length = bytesRead
current += bytesRead; //we've progressed a little so update current
progress.setValue(current); //tell progress how far we are
}
inputStream.close(); //close our stream
return out;
}
如如何使用进度条中所示,您可以指定不确定模式,直到您有足够的数据来衡量进度或下载结束。确切的实现取决于传输是如何发生的。理想情况下,发送方首先提供长度,但也可以随着数据的累积动态计算速率。