Java計算同一格式文本文件行數

在網絡上搜了下快速計算文本行數的,基本上都是用如下方法

long fileLength = File.length();
LineNumberReader.skip(fileLength);
LineNumberReader.getLineNumber

但運行結果發現該方法會少掉一行(在windows環境下,linux沒測過),原因在於file.length()返回的是字節長度,而LineNumberReader.skip跳躍的是字符數,除非最後多出一行空行,該方法結果纔會正確,但是又不能直接在結果加1,因爲很多文本文件確實最後會多出一行空行。於是自己寫了個方法,該方法僅適用於每一行格式統一的文本文件,比如批量導入數據


	/**
	 * 獲取文件實際內容行數
	 * @author lmiky
	 * @date 2014-4-18
	 * @param file	文件
	 * @param lineContent	文件單行實際內容,即無排除空格無格式化等,讀出來一行是什麼內容,就傳入什麼內容
	 * @return
	 */
	public static int getFileLine(File file, String lineContent) {
		//獲取總字節數,之所以加2是因爲文本文件結束符佔兩個字節
		long fileLength = file.length() + 2;
		int lines = 0;
		try {
			//內容長度加結束符
			int lineLength = lineContent.getBytes().length + 2; 
			System.out.println(lineLength);
			//總字節數已經加2了,所以無需四捨五入,直接取最接近並小於的整數,這樣即使最後多出一行空格,也不會影響到計算結果
			lines = (int)(fileLength/lineLength);
		} catch (Exception e) {
			LoggerUtils.logException(e);
		}
		return lines;
	}

之所以參數上有lineContent,是因爲系統業務上的原因,在調用本方法之前已經創建了FileReader,所以不需要再耗資源在方法中創建文件流,可根據需要修改方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章