mport java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.LineNumberReader;
import java.util.Calendar;

public class TestRowCount {
public static void main(String[] args) {
long datestart = Calendar.getInstance().getTimeInMillis();
int count = getFileLineCounts("XXX");
System.out.println(count);
long dateend = Calendar.getInstance().getTimeInMillis();
System.out.println((dateend - datestart) / 1000);
}

public static int getFileLineCount(String filename) {
int cnt = 0;
LineNumberReader reader = null;
try {
reader = new LineNumberReader(new FileReader(filename));
@SuppressWarnings("unused")
String lineRead = "";
while ((lineRead = reader.readLine()) != null) {
}
cnt = reader.getLineNumber();
} catch (Exception ex) {
cnt = -1;
ex.printStackTrace();
} finally {
try {
reader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return cnt;
}

public static int getFileLineCounts(String filename) {
int cnt = 0;
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(filename));
byte[] c = new byte[1024];
int readChars = 0;
while ((readChars = is.read(c)) != -1) {
for (int i = 0; i < readChars; ++i) {
if (c[i] == '\n') {
++cnt;
}
}
}
} catch (Exception ex) {
cnt = -1;
ex.printStackTrace();
} finally {
try {
is.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return cnt;
}
}
总结:
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.LineNumberReader;
import java.util.Calendar;
public class TestRowCount {
public static void main(String[] args) {
long datestart = Calendar.getInstance().getTimeInMillis();
int count = getFileLineCounts("XXX");
System.out.println(count);
long dateend = Calendar.getInstance().getTimeInMillis();
System.out.println((dateend - datestart) / 1000);
}
public static int getFileLineCount(String filename) {
int cnt = 0;
LineNumberReader reader = null;
try {
reader = new LineNumberReader(new FileReader(filename));
@SuppressWarnings("unused")
String lineRead = "";
while ((lineRead = reader.readLine()) != null) {
}
cnt = reader.getLineNumber();
} catch (Exception ex) {
cnt = -1;
ex.printStackTrace();
} finally {
try {
reader.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return cnt;
}
public static int getFileLineCounts(String filename) {
int cnt = 0;
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(filename));
byte[] c = new byte[1024];
int readChars = 0;
while ((readChars = is.read(c)) != -1) {
for (int i = 0; i < readChars; ++i) {
if (c[i] == '\n') {
++cnt;
}
}
}
} catch (Exception ex) {
cnt = -1;
ex.printStackTrace();
} finally {
try {
is.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
return cnt;
}
}每行的字符较多时, 使用第一个方法效率较高
每行的字符较少时, 使用第二个方法效率较高

本文介绍两种计算文件行数的方法:一种使用LineNumberReader适用于每行字符较多的情况;另一种通过读取字节流适合每行字符较少的场景。并对比了它们的效率。
880

被折叠的 条评论
为什么被折叠?



