读文件计算方法执行时间的实例
學(xué)習(xí)了幾個(gè)關(guān)于java讀寫(xiě)文件和計(jì)算方法執(zhí)行時(shí)間的程序。
?
一、關(guān)于讀文件的實(shí)例
第一個(gè)是讀一個(gè)指定目錄中.txt文件的程序:
1 import java.io.BufferedReader; 2 import java.io.File; 3 import java.io.FileInputStream; 4 import java.io.InputStreamReader; 5 //import java.io.*; 6 public class FileReaderSample { 7 public static void main(String[] args) { 8 read("….txt"); } 9 public static void read(String file) { 10 //創(chuàng)建一個(gè)File類,并判斷一下指定文件是否存在 11 String s = null; 12 //檢驗(yàn)內(nèi)容是否為空 13 StringBuffer sb = new StringBuffer(); 14 File f = new File(file); 15 if (f.exists()) { 16 System.out.println("該文件存在"); 17 try { 18 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f))); 19 /*創(chuàng)建一個(gè)FileInputStream類,從文件系統(tǒng)中的某個(gè)文件中獲取輸入字節(jié)。 20 * 把讀到的字節(jié)流交給InputStreamReader對(duì)象來(lái)處理。*/ 21 while ((s = br.readLine()) != null) { 22 /*用BufferedReader類來(lái)處理讀到的字符集合 23 * readLine()方法可以讀取當(dāng)前的一行字符 24 * 把這些字符串都放進(jìn)一個(gè)StringBuffer中*/ 25 sb.append(s); } 26 //字符串"null"追加到此字符序列 27 System.out.println(sb); 28 br.close();} 29 catch (Exception e) { 30 e.printStackTrace();} 31 //打印錯(cuò)誤 32 } 33 else { System.out.println("該文件不存在!"); } 34 } 35 }?
還有一個(gè)程序是:寫(xiě)一個(gè)Java類,讀取自己,并按照原來(lái)的格式輸出到控制臺(tái)。
1 import java.io.*; 2 public class TestFile{ 3 public static void main(String args[]) throws IOException { 4 /*throws IOException表示此方法有拋出IOException異常的可能性。 5 *只要此方法的某些代碼可能拋出異常,就必須顯式處理,或者(try...catch),或者拋出*/ 6 File f = new File("C:\Program Files\Java\TestFile.java"); 7 LineNumberReader lineNumberReader = new LineNumberReader(new FileReader(f)); 8 StringBuffer sb = new StringBuffer(); 9 //Constructs a string buffer with no characters in it 10 //and an initial capacity of 16 characters 11 String lineStr = lineNumberReader.readLine(); 12 //讀第一行 13 while (lineStr != null) { 14 sb.append(lineStr).append("\n"); 15 //每讀一行,加一個(gè)回車(chē) 16 lineStr=lineNumberReader.readLine(); 17 } 18 lineNumberReader.close(); 19 System.out.println(sb.toString()); 20 } 21 }錯(cuò)誤: 找不到或無(wú)法加載主類 TestFile
程序運(yùn)行錯(cuò)誤:
?檢查了jdk與java的版本匹配問(wèn)題,也修改了環(huán)境變量,但是輸出還是有錯(cuò)誤。。。
?
?
二、計(jì)算方法執(zhí)行時(shí)間
測(cè)試代碼的運(yùn)行時(shí)間,網(wǎng)上的總結(jié)有兩種:
1、以毫秒為單位計(jì)算
1 long startTime=System.currentTimeMillis(); //獲取開(kāi)始時(shí)間 2 doSomeThing(); //測(cè)試的代碼段 3 long endTime=System.currentTimeMillis(); //獲取結(jié)束時(shí)間 4 System.out.println("程序運(yùn)行時(shí)間: "+(end-start)+"ms");2、以納秒為單位計(jì)算
1 long startTime=System.nanoTime(); //獲取開(kāi)始時(shí)間 2 doSomeThing(); //測(cè)試的代碼段 3 long endTime=System.nanoTime(); //獲取結(jié)束時(shí)間 4 System.out.println("程序運(yùn)行時(shí)間: "+(end-start)+"ns"); 1 public class StopWatch { 2 public StopWatch() 3 { 4 reset(); 5 } 6 public void start() 7 { 8 if (isRunning) return; 9 isRunning = true; 10 startTime = System.currentTimeMillis(); 11 //以毫秒為單位返回當(dāng)前時(shí)間 12 } 13 public void stop() 14 { 15 if (!isRunning) return; 16 isRunning = false; 17 long endTime = System.currentTimeMillis(); 18 elapsedTime = elapsedTime + endTime - startTime; 19 //兩時(shí)間相減得運(yùn)行時(shí)間 20 } 21 public long getElapsedTime() 22 { 23 if (isRunning) 24 { 25 long endTime = System.currentTimeMillis(); 26 return elapsedTime + endTime - startTime; 27 //多次執(zhí)行可得方法總的執(zhí)行時(shí)間 28 } 29 else 30 return elapsedTime; 31 } 32 public void reset() 33 { 34 elapsedTime = 0; 35 isRunning = false; 36 } 37 private long elapsedTime; 38 //經(jīng)過(guò)的時(shí)間 39 private long startTime; 40 private boolean isRunning; 41 }?
完成讀文件并計(jì)算每一個(gè)方法執(zhí)行的平均時(shí)間的步驟分析:
(1~4均使用數(shù)組實(shí)現(xiàn))
1、計(jì)算文件中出現(xiàn)的總方法數(shù)
先記錄第一個(gè)出現(xiàn)的方法,再分析第二個(gè),若與第一個(gè)方法相同,跳過(guò),若不同則記錄下來(lái),同理再分析第三個(gè)方法,將其與第一、二個(gè)比較,若與其中一個(gè)相同則跳過(guò),反之則記錄下來(lái),依此類推,分析第n個(gè)方法,將其與之前的n-1個(gè)比較,若有相同的則跳過(guò),若比較到第n-1個(gè)仍不相同,則記錄下來(lái)。
2、記錄每個(gè)方法每次出現(xiàn)的時(shí)間
數(shù)組數(shù)據(jù)類型為浮點(diǎn)型
3、記錄每個(gè)方法出現(xiàn)的次數(shù)
數(shù)組初始化為0
數(shù)組數(shù)據(jù)類型為整型
一個(gè)方法出現(xiàn)一次,則其記錄次數(shù)的數(shù)組的相應(yīng)下標(biāo)所對(duì)應(yīng)的整數(shù)加1
4、求和計(jì)算每個(gè)方法出現(xiàn)的總時(shí)間
n個(gè)數(shù)組分別求和,存入一個(gè)新的數(shù)組中
5、計(jì)算每個(gè)方法執(zhí)行的平均時(shí)間
??? 平均時(shí)間=總時(shí)間/總次數(shù)
讀文件操作一共執(zhí)行兩次,第一次是計(jì)算出文件中出現(xiàn)的總方法數(shù),第二次是計(jì)算出每個(gè)方法執(zhí)行的平均時(shí)間。
轉(zhuǎn)載于:https://www.cnblogs.com/everever/archive/2012/07/24/2607279.html
總結(jié)
以上是生活随笔為你收集整理的读文件计算方法执行时间的实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: songsoft-关于加薪的策略
- 下一篇: PostgreSQL学习手册(系统表)