Java 文件读取进度

Java 文件读取进度,java,Java,我正在使用java读取一个4gb大小的TSV文件,我想知道是否有一种方法可以让java在程序运行时告诉我任务完成了多远。我想文件流可能可以告诉我它读取了多少字节,我可以用它做一些简单的数学运算。当您从流中读取时,记录读取的字节数。例如,如果您直接从流中读取字节数组: long bytesReadTotal = 0L; int bytesRead = stream.read(bytes); while (bytesRead != -1) { bytesRea

我正在使用java读取一个4gb大小的TSV文件,我想知道是否有一种方法可以让java在程序运行时告诉我任务完成了多远。我想文件流可能可以告诉我它读取了多少字节,我可以用它做一些简单的数学运算。

当您从流中读取时,记录读取的字节数。例如,如果您直接从流中读取字节数组:

    long bytesReadTotal = 0L;
    int bytesRead = stream.read(bytes);
    while (bytesRead != -1) {
        bytesReadTotal += bytesRead;
        // process these bytes ...
        bytesRead = stream.read(bytes)
    }

当您从流中读取数据时,记录读取的字节数。例如,如果您直接从流中读取字节数组:

    long bytesReadTotal = 0L;
    int bytesRead = stream.read(bytes);
    while (bytesRead != -1) {
        bytesReadTotal += bytesRead;
        // process these bytes ...
        bytesRead = stream.read(bytes)
    }

如果您通过HTTP读取此文件,则有一个名为“Content Length”的标头可以告诉您应该读取的总字节数,这样您就可以在读取过程中了解进度

如果您通过TCP/UDP读取文件,我想您应该同时写入客户端和服务器以进行文件传输,然后您应该首先将文件长度发送给客户端,然后读取文件


如果您只是读取本地文件,这不是问题。

如果您通过HTTP读取此文件,则有一个名为“Content Length”的标题可以告诉您应读取的总字节数,这样您就可以在读取时了解进度

如果您通过TCP/UDP读取文件,我想您应该同时写入客户端和服务器以进行文件传输,然后您应该首先将文件长度发送给客户端,然后读取文件


如果只是读取本地文件,这不是问题。

普通流或读卡器不计算读取的字节/字符数

我想你可能在找

如果您不想要/不需要Swing集成,那么另一种选择是
编写FilterReader或FilterInputStream的自定义子类,对读取的字符/字节进行计数,并提供读取计数的getter。然后在适当的位置将自定义类放入输入堆栈。

普通流或读取器不计算读取的字节/字符数

我想你可能在找

如果您不想要/不需要Swing集成,那么另一种选择是
编写FilterReader或FilterInputStream的自定义子类,对读取的字符/字节进行计数,并提供读取计数的getter。然后在适当的位置将自定义类放入输入堆栈。

应该是0L还是仅0?我很少使用“long”数据类型。这两种类型都有效,0L表示值是long类型,单个0表示整数,整数可以转换为long。这应该是0L还是仅0?我很少使用“long”数据类型。这两种类型都有效,0L表示值是long类型,单个0表示整数,整数可以转换为long。File File=new File(“path/to/your/local/File”);long totalBytes=file.length();InputStream reader=新文件InputStream(文件);字节[]缓冲区=新字节[8192];int byteRead=-1;long byteReadSoFar=0;而(-1!=(byteRead=reader.read(buffer)){byteReadSoFar+=byteRead;System.out.printf(“当前进度为:%.2f”,byteReadSoFar*1.0/totalBytes);}reader.close();File File=新文件(“路径/到/您的/本地/文件”);long totalBytes=file.length();InputStream reader=新文件InputStream(文件);字节[]缓冲区=新字节[8192];int byteRead=-1;long byteReadSoFar=0;而(-1!=(byteRead=reader.read(buffer)){byteReadSoFar+=byteRead;System.out.printf(“当前进度为:%.2f”,byteReadSoFar*1.0/totalBytes);}reader.close();那是一门很酷的课。我在扬克斯附近呆过,但我从来没有听说过。如果OP使用的是Swing,那么这绝对值得一看。这是一个很酷的类。我在扬克斯附近呆过,但我从来没有听说过。如果OP使用Swing,那么这绝对值得一看。