private int getFileLineNumber(File file) throws IOException {
//读入文件数据
LineNumberReader lnr = new LineNumberReader(new FileReader(file));
//开始一个字符一个字符的跳过 一直到最后一个字符。读取完成
lnr.skip(Long.MAX_VALUE);
//有一个换行符
int lineNo = lnr.getLineNumber() + 1;
LOG.info(String.format("fileNo is %d", lineNo));
lnr.close();
return lineNo;
}
一开始我不明白为啥要加lnr.skip(Long.MAX_VALUE);这一行,所以特意查了一下资料:
java.io.LineNumberReader.skip(long n) 方法跳过n个字符。
声明
以下是java.io.LineNumberReader.skip(long n)方法的声明:
public long skip(long n)
参数
-
n -- 字符跳过的次数。
返回值
实际上跳过字符的个数
异常
-
IOException -- 如果发生I/O错误
-
IllegalArgumentException -- 如果n为负数
例子
下面的示例演示java.io.LineNumberReader.skip(long n) 方法的用法。
package com.yiibai;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
public class LineNumberReaderDemo {
public static void main(String[] args) throws IOException {
FileReader fr = null;
LineNumberReader lnr = null;
int i;
char c;
try{
// create new reader
fr = new FileReader("C:/test.txt");
lnr = new LineNumberReader(fr);
// read till the end of the stream
while((i=lnr.read())!=-1)
{
// skip one byte
lnr.skip(1);
// converts integer to char
c=(char)i;
// prints char
System.out.print(c);
}
}catch(Exception e){
// if any error occurs
e.printStackTrace();
}finally{
// closes the stream and releases system resources
if(fr!=null)
fr.close();
if(lnr!=null)
lnr.close();
}
}
}
假设我们有一个文本文件c:/ test.txt,它具有以下内容。该文件将被用作输入到我们的示例程序:
ABCDE
让我们编译和运行上面的程序,这将产生以下结果:
ACE