Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JProgressBar显示文件复制进度?_Java_Jprogressbar - Fatal编程技术网

Java 如何使用JProgressBar显示文件复制进度?

Java 如何使用JProgressBar显示文件复制进度?,java,jprogressbar,Java,Jprogressbar,我正在从事一个通过网络传输文件的项目,我想加入一个JProgressBar来显示文件传输过程中的进度,但我需要这方面的帮助 这是JProgressBar的教程,可能会有所帮助。听起来您应该使用,如中所述。另请参见。您可能会发现ProgressMonitorInputStream最简单,但如果这对您来说还不够,请查看其源代码以获得您想要的 InputStream in = new BufferedInputStream( new ProgressMoni

我正在从事一个通过网络传输文件的项目,我想加入一个
JProgressBar
来显示文件传输过程中的进度,但我需要这方面的帮助

这是JProgressBar的教程,可能会有所帮助。

听起来您应该使用,如中所述。另请参见。

您可能会发现ProgressMonitorInputStream最简单,但如果这对您来说还不够,请查看其源代码以获得您想要的

 InputStream in = new BufferedInputStream(
                     new ProgressMonitorInputStream(
                              parentComponent,
                              "Reading " + fileName,
                              new FileInputStream(fileName)
                     )
                  );
要使用不同的传输方法,请用适当的流替换FileInputStream

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import javax.swing.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;
}

我很肯定这会奏效。

你应该详细说明你到底需要什么帮助。是将每个文件分解成数据包,还是只知道每个文件何时完成传输?你有百分比吗,只是需要帮助显示?您是否已经完成了文件复制过程?社区wiki?真的吗?我建议您查看一下java nio通道,以便将files.FYI复制出来。write(buffer,current,bytesRead)应该是out。write(buffer,0,bytesRead)