public class ReadFileDemo1 {
/**
* 获取错误文件中的记录号
* @param sourceFile
* @return
*/
public static int[] readBadFile(String sourceFile){
FileReader in = null;
LineNumberReader reader = null;
int[] array = new int[0];
try {
//获取文件总行数
long totalLine = Files.lines(Paths.get(sourceFile)).count();
//构建数组
array = new int[(int)(totalLine)];
in = new FileReader(sourceFile);
reader = new LineNumberReader(in);
String s = reader.readLine();
int i = 0;
while(s != null){
System.out.println(s);
int index = s.indexOf(":");
array[i++] = Integer.parseInt(s.substring(2,index)) + 1;
s = reader.readLine();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
closeResource(in, reader);
}
return array;
}
/**
* 读取文件指定行数(读取一行)
* @param filePath
* @param lineNumber
*/
public static String readAppointedLineNumber(String filePath,int lineNumber){
String appointedLine = "";
FileReader in = null;
LineNumberReader reader = null;
try {
in = new FileReader(filePath);
reader = new LineNumberReader(in);
long totalLine = Files.lines(Paths.get(filePath)).count();
if(lineNumber < 0 || lineNumber > totalLine){
return "指定行【"+lineNumber+"】不在文件行数范围内";
}
int line = 1;
reader.setLineNumber(lineNumber);
long i = reader.getLineNumber();
String s = "";
while((s = reader.readLine()) != null){
if(i == line){
appointedLine = s;
break;
}
line++;
}
return appointedLine;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeResource(in, reader);
}
return appointedLine;
}
/**
* 读取文件指定行数(读取多行)
* @param filePath
* @param lineArray
*/
public static List readAppointedLineNumberArray(String filePath,int[] lineArray){
FileReader in = null;
LineNumberReader reader = null;
List resultStr = new ArrayList();
//对数组按从小到大排序
lineArray = sortArray(lineArray);
if(lineArray.length == 0){
return new ArrayList();
}
try {
in = new FileReader(filePath);
reader = new LineNumberReader(in);
int lineNumber = lineArray.length;
int line = 1;
int i = 0;
String s = "";
while((s = reader.readLine()) != null){
if(i < lineNumber && line ==lineArray[i]){
i++;
System.out.println(s);
resultStr.add(s);
}
line++;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
closeResource(in, reader);
}
return resultStr;
}
/**
* 关闭资源
* @param in
* @param reader
*/
public static void closeResource(FileReader in,LineNumberReader reader){
try {
if(reader != null){
reader.close();
}
if(in != null){
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 冒泡排序
* @param array
* @return
*/
public static int[] sortArray(int[] array){
if(array.length == 0){
return array;
}
for(int i = 0; i < array.length; i++){
for(int j = 0; j < array.length-i-1; j++){
if(array[j+1] < array[j]){
int temp = array[j+1];
array[j + 1] = array[j];
array[j] = temp;
}
}
}
return array;
}
}
原文:https://www.cnblogs.com/baoqinghe/p/13277088.html