读文件计算方法执行时间的实例
學習了幾個關于java讀寫文件和計算方法執(zhí)行時間的程序。
?
一、關于讀文件的實例
第一個是讀一個指定目錄中.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)建一個File類,并判斷一下指定文件是否存在 11 String s = null; 12 //檢驗內(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)建一個FileInputStream類,從文件系統(tǒng)中的某個文件中獲取輸入字節(jié)。 20 * 把讀到的字節(jié)流交給InputStreamReader對象來處理。*/ 21 while ((s = br.readLine()) != null) { 22 /*用BufferedReader類來處理讀到的字符集合 23 * readLine()方法可以讀取當前的一行字符 24 * 把這些字符串都放進一個StringBuffer中*/ 25 sb.append(s); } 26 //字符串"null"追加到此字符序列 27 System.out.println(sb); 28 br.close();} 29 catch (Exception e) { 30 e.printStackTrace();} 31 //打印錯誤 32 } 33 else { System.out.println("該文件不存在!"); } 34 } 35 }?
還有一個程序是:寫一個Java類,讀取自己,并按照原來的格式輸出到控制臺。
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 //每讀一行,加一個回車 16 lineStr=lineNumberReader.readLine(); 17 } 18 lineNumberReader.close(); 19 System.out.println(sb.toString()); 20 } 21 }錯誤: 找不到或無法加載主類 TestFile
程序運行錯誤:
?檢查了jdk與java的版本匹配問題,也修改了環(huán)境變量,但是輸出還是有錯誤。。。
?
?
二、計算方法執(zhí)行時間
測試代碼的運行時間,網(wǎng)上的總結(jié)有兩種:
1、以毫秒為單位計算
1 long startTime=System.currentTimeMillis(); //獲取開始時間 2 doSomeThing(); //測試的代碼段 3 long endTime=System.currentTimeMillis(); //獲取結(jié)束時間 4 System.out.println("程序運行時間: "+(end-start)+"ms");2、以納秒為單位計算
1 long startTime=System.nanoTime(); //獲取開始時間 2 doSomeThing(); //測試的代碼段 3 long endTime=System.nanoTime(); //獲取結(jié)束時間 4 System.out.println("程序運行時間: "+(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 //以毫秒為單位返回當前時間 12 } 13 public void stop() 14 { 15 if (!isRunning) return; 16 isRunning = false; 17 long endTime = System.currentTimeMillis(); 18 elapsedTime = elapsedTime + endTime - startTime; 19 //兩時間相減得運行時間 20 } 21 public long getElapsedTime() 22 { 23 if (isRunning) 24 { 25 long endTime = System.currentTimeMillis(); 26 return elapsedTime + endTime - startTime; 27 //多次執(zhí)行可得方法總的執(zhí)行時間 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)過的時間 39 private long startTime; 40 private boolean isRunning; 41 }?
完成讀文件并計算每一個方法執(zhí)行的平均時間的步驟分析:
(1~4均使用數(shù)組實現(xiàn))
1、計算文件中出現(xiàn)的總方法數(shù)
先記錄第一個出現(xiàn)的方法,再分析第二個,若與第一個方法相同,跳過,若不同則記錄下來,同理再分析第三個方法,將其與第一、二個比較,若與其中一個相同則跳過,反之則記錄下來,依此類推,分析第n個方法,將其與之前的n-1個比較,若有相同的則跳過,若比較到第n-1個仍不相同,則記錄下來。
2、記錄每個方法每次出現(xiàn)的時間
數(shù)組數(shù)據(jù)類型為浮點型
3、記錄每個方法出現(xiàn)的次數(shù)
數(shù)組初始化為0
數(shù)組數(shù)據(jù)類型為整型
一個方法出現(xiàn)一次,則其記錄次數(shù)的數(shù)組的相應下標所對應的整數(shù)加1
4、求和計算每個方法出現(xiàn)的總時間
n個數(shù)組分別求和,存入一個新的數(shù)組中
5、計算每個方法執(zhí)行的平均時間
??? 平均時間=總時間/總次數(shù)
讀文件操作一共執(zhí)行兩次,第一次是計算出文件中出現(xiàn)的總方法數(shù),第二次是計算出每個方法執(zhí)行的平均時間。
轉(zhuǎn)載于:https://www.cnblogs.com/everever/archive/2012/07/24/2607279.html
總結(jié)
以上是生活随笔為你收集整理的读文件计算方法执行时间的实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: songsoft-关于加薪的策略
- 下一篇: PostgreSQL学习手册(系统表)