进度条的实现(读取文本文件)

来源:互联网 发布:淘宝二手在哪里 编辑:程序博客网 时间:2024/04/29 06:33
/*05文本文件计算并求和编写一个程序读取一个文本文件(格式如附录),将每个变量的值取出来,计算并输出其总和。要求如下:      ① 文本文件(test.txt)以参数形式输入,如           G:/java MyJava 05test.txt      ② 要求显示计算进度,例如:"当前正在计算变量V2...2/10",其中的10表示共有10条记录,2表示当前计算到第2条      ③ 选做效果:显示已经花了多少时间,大约还需要多少时间,单位为秒。    附录(文本文件格式形如):             V1=12.0        V2=15.0        a=100        Height=20.25*/package Component;//打包在“组件”里import javax.swing.JProgressBar;//导入相关包import javax.swing.JFrame;import java.awt.Color;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.*;import javax.swing.*;import java.io.*;public class TestJProgressBar{//建立一个TestJProgressBar类public static void main(String []agre){//主方法try{long start=System.currentTimeMillis();//获取当前时间FileReader fr=new FileReader("C:\\05test.txt");//文本文件(test.txt)以参数形式输入,读取字符流BufferedReader br=new BufferedReader(fr);//缓冲指定文件输入String strLine;//定义一个String类型的变量,每次读取一行int lineCount=0;//统计文件的行数while(br.ready()){strLine=br.readLine();//读取一行lineCount++;//记录行数}fr.close();//关闭流br.close();//关闭流//-----------------------------------------------------------------------------------------------JFrame frm=new JFrame("正在读取中");//定义一个JFrame对象        final JProgressBar aJProgressBar=new JProgressBar(0,lineCount);//设定进度条的范围(0~lineCount)        aJProgressBar.setStringPainted(true);//显示进度字符串    aJProgressBar.setBackground(Color.white);//设置背景为白色    aJProgressBar.setForeground(Color.blue);//设置进度条进度为蓝色        frm.setSize(480,150);//设置框架大小    Toolkit tk=Toolkit.getDefaultToolkit();    Dimension dm=tk.getScreenSize();//获取屏幕大小    frm.setLocation((int)(dm.getWidth()-frm.getWidth())/2,(int)(dm.getHeight()-frm.getHeight())/2);//框架居中        frm.add(aJProgressBar,BorderLayout.NORTH);//进度条设置在框架北面    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户发起close时,程序的默认操作,结束窗体所在的应用程序    frm.setVisible(true);//进度条可视//---------------------------------------------------------------------------------------------------    //当前正在计算变量V2...2/10FileReader f=new FileReader("C:\\05test.txt");//文本文件(test.txt)以参数形式输入,读取字符流BufferedReader b=new BufferedReader(f);//缓冲指定文件输入int count=0;//记录读取的行数double sum=0;//统计变量之和JTextField jf=new JTextField();//定义一个文本框frm.add(jf,BorderLayout.CENTER);//将文本框添加frm.setVisible(true);//框架可视while(b.ready()){count++;//当前读取所在行数strLine=b.readLine();//读取一行String s[]=strLine.split("=");//按“=”将每一行分开   double d=Double.parseDouble(s[1]);//将等号右侧的数据转换为double型sum=sum+d;//计算变量的和//----------------------------------------------long end=System.currentTimeMillis();//每读一行,获取一次时间try{Thread.sleep(1);//线程休眠一毫秒}catch(InterruptedException ignoreException){};    double time=(double)(end-start)/1000;//文本读取已用时间    double time1=((double)(lineCount-count)/count)*time;//文本读取大约剩余时间    jf.setText("当前正在计算变量"+s[0]+"..."+count+"/"+lineCount+"  " +//更新文本框内容       "        已经使用"+String.format("%.1f",time)+"s"+"      大约还需要"+String.format("%.1f",time1)+"s");    int value=aJProgressBar.getValue();//获取进度条当前进度    aJProgressBar.setValue(value+1);//进度加一}frm.dispose();//全部读取完毕,框架消失System.out.print(String.format("%.2f",sum));//输出所有变量值的总和}catch(IOException e){e.printStackTrace();}}}