java读取文件显示进度条的实现方法

Java读取文件并显示进度条的实现方法可以分为以下几步:

步骤一:获取文件大小

File file = new File("文件路径");
long fileSize = file.length();

步骤二:读取文件并更新进度条

FileInputStream fileInputStream = new FileInputStream(file);
byte[] buffer = new byte[4096];
int len = -1;
int readSize = 0;
while ((len = fileInputStream.read(buffer)) != -1) {
    // 处理读取的数据
    readSize += len;
    double percent = readSize * 100.0 / fileSize;
    updateProgressBar(percent);
}

步骤三:更新进度条

private void updateProgressBar(double percent) {
    // 更新进度条,示例代码略
}

下面提供两个完整的示例代码。

示例一:Swing界面实现进度条

import javax.swing.*;
import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileProgressBar extends JFrame {
    private JLabel label;
    private JProgressBar progressBar;

    public FileProgressBar(String filePath) throws HeadlessException, FileNotFoundException {
        super("文件读取进度条");
        setSize(400, 100);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container contentPane = getContentPane();

        File file = new File(filePath);
        long fileSize = file.length();

        label = new JLabel("文件读取进度:0%");
        progressBar = new JProgressBar();
        progressBar.setMaximum(100);
        progressBar.setValue(0);

        JPanel panel = new JPanel();
        panel.setLayout(new FlowLayout());
        panel.add(label);
        panel.add(progressBar);

        contentPane.add(panel);

        FileInputStream fileInputStream;
        try {
            fileInputStream = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            throw e;
        }

        byte[] buffer = new byte[4096];
        int len = -1;
        int readSize = 0;
        while ((len = fileInputStream.read(buffer)) != -1) {
            // 处理读取的数据
            readSize += len;
            double percent = readSize * 100.0 / fileSize;
            updateProgressBar(percent);
        }

        fileInputStream.close();
    }

    private void updateProgressBar(double percent) {
        label.setText(String.format("文件读取进度:%.2f%%", percent));
        progressBar.setValue((int) percent);
    }

    public static void main(String[] args) throws FileNotFoundException {
        new FileProgressBar("文件路径").setVisible(true);
    }
}

示例二:JavaFX界面实现进度条

import javafx.application.Application;
import javafx.concurrent.Task;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

import java.io.*;

public class FileProgressBar extends Application {
    private Label label;
    private ProgressBar progressBar;

    @Override
    public void start(Stage primaryStage) throws Exception {
        primaryStage.setTitle("文件读取进度条");

        File file = new File("文件路径");
        long fileSize = file.length();

        label = new Label("文件读取进度:0%");
        progressBar = new ProgressBar();
        progressBar.setProgress(0);

        VBox vBox = new VBox();
        vBox.setPadding(new Insets(20));
        vBox.setSpacing(20);
        vBox.getChildren().addAll(label, progressBar);

        Scene scene = new Scene(vBox, 400, 100);
        primaryStage.setScene(scene);

        Task<Void> readTask = new Task<>() {
            @Override
            protected Void call() throws Exception {
                FileInputStream fileInputStream;
                try {
                    fileInputStream = new FileInputStream(file);
                } catch (FileNotFoundException e) {
                    throw e;
                }

                byte[] buffer = new byte[4096];
                int len = -1;
                int readSize = 0;
                while ((len = fileInputStream.read(buffer)) != -1) {
                    // 处理读取的数据
                    readSize += len;
                    double percent = readSize * 100.0 / fileSize;
                    updateProgress(percent, 100);
                }
                fileInputStream.close();

                return null;
            }

            @Override
            protected void done() {
                label.setText("文件读取完成");
            }
        };

        progressBar.progressProperty().bind(readTask.progressProperty());

        new Thread(readTask).start();

        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java读取文件显示进度条的实现方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java编程发展历史(动力节点Java学院整理)

    Java编程发展历史 Java前身 Java语言是由Sun Microsystems公司(后被Oracle公司收购)于1995年推出的一门计算机编程语言。起初,该语言被称为Oak语言,因为Oak是Sun Microsystems的办公室门外长了一棵橡树,而这个项目在设计之初的代号就是Oak。 Java语言推出 后来,强调语言应该与因特网紧密结合,适应网络环境…

    Java 2023年5月20日
    00
  • 用js屏蔽被http劫持的浮动广告实现方法

    要屏蔽被 HTTP 劫持的浮动广告,可以通过以下步骤实现: 步骤一:获取浮动广告元素 首先需要获取浮动广告元素的选择器。在浏览器中打开被劫持的网站,并打开浏览器的开发者工具。在 Elements 面板中,选择被劫持的广告元素,在该元素上右键单击,选择 Copy ▸ Copy selector(复制元素的选择器)。这样就可以获得该广告元素的选择器。例如: #a…

    Java 2023年6月16日
    00
  • Spring Boot日志控制详解

    Spring Boot日志控制详解 简介 在应用程序中,日志是非常重要的组成部分。通过日志,我们可以了解应用程序中所发生的事件及其执行状态。Spring Boot提供了非常方便的日志控制功能,使得应用程序中的日志记录变得更加简单、可读且易于管理。 Spring Boot默认日志记录器 Spring Boot默认使用的是Logback日志框架,它拥有极高的性能…

    Java 2023年6月1日
    00
  • Android中断并重启一个Thread线程的简单方法

    如何在Android中断并重启一个Thread线程呢?以下提供两种方法: 方法一:使用interrupt()方法 在Thread线程中调用interrupt()方法可以中断正在执行的线程。以下是具体步骤: 在Thread的run()方法中添加循环。例如,循环执行某个任务: public void run() { while (!Thread.currentT…

    Java 2023年5月26日
    00
  • 基于JDBC访问MySql公共方法实例解析

    基于JDBC访问MySql公共方法实例解析 JDBC是Java标准化数据库连接API。本文将介绍如何使用Java JDBC API连接MySQL数据库并执行常用的增删改查操作。 步骤一:导入JDBC驱动 首先,需要将MySQL JDBC驱动包导入到项目中。可以在MySQL官网下载对应版本的JDBC驱动,然后将其添加到项目的class path中。 步骤二:创…

    Java 2023年6月16日
    00
  • spring boot项目使用@Async注解的坑

    关于spring boot项目使用@Async注解的坑,有以下几个注意点: 一、@EnableAsync开启异步支持 首先需要在启动类上加上@EnableAsync注解,开启异步支持。示例代码如下: @SpringBootApplication @EnableAsync public class DemoApplication { public static…

    Java 2023年5月19日
    00
  • Struts2学习笔记(9)-Result配置全局结果集

    首先我们需要了解什么是Struts2的Result配置。 在Struts2中,Result是将Action执行后返回的结果封装成一个对象,通常包含视图名称、视图类型和一些其它相关的信息。通过配置Result,我们可以指定如何处理Action执行后返回的结果,例如将结果转发到某个JSP或者跳转到某个URL等。 全局结果集是一种在Struts2中配置全局Resu…

    Java 2023年5月20日
    00
  • java核心编程之文件过滤类FileFilter和FilenameFilter

    Java核心编程之文件过滤类FileFilter和FilenameFilter 当我们需要处理目录下的文件列表时,通常会使用Java IO中的File类。File类提供了方法来获取一个目录下的文件列表,但是该列表中包含目录和其他非文件信息,如果只需要获取文件信息,则可以使用java.io.FileFilter和java.io.FilenameFilter来实…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部