前言
- 读取文件指定行数据
/**
* 读取文件指定行数(读取一行)
*
* @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) {
logger.error("指定行【 " + lineNumber + "】不在文件行数范围内");
return null;
}
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<String> readAppointedLineNumberArray(String filePath, int[] lineArray) {
FileReader in = null;
LineNumberReader reader = null;
List<String> resultStr = new ArrayList<String>();
//对数组按从小到大排序
lineArray = sortArray(lineArray);
if (lineArray.length == 0) {
return new ArrayList<String>();
}
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;
}
- 删除文件文件夹
/**
* 删除文件,可以是文件或文件夹
*
* @param fileName 要删除的文件名
* @return 删除成功返回true,否则返回false
*/
public static boolean delete(String fileName) {
File file = new File(fileName);
if (!file.exists()) {
logger.error("删除文件失败:" + fileName + "不存在!");
return false;
} else {
if (file.isFile()) {
return deleteFile(fileName);
} else {
return deleteDirectory(fileName);
}
}
}
/**
* 删除单个文件
*
* @param fileName 要删除的文件的文件名
* @return 单个文件删除成功返回true,否则返回false
*/
public static boolean deleteFile(String fileName) {
File file = new File(fileName);
//如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if (file.exists() && file.isFile()) {
if (file.delete()) {
logger.info("删除单个文件" + fileName + "成功!");
return true;
} else {
logger.error("删除单个文件" + fileName + "失败!");
return false;
}
} else {
logger.error("删除单个文件失败:" + fileName + "不存在!");
return false;
}
}
/**
* 删除目录及目录下的文件
*
* @param dir 要删除的目录的文件路径
* @return 目录删除成功返回true,否则返回false
*/
public static boolean deleteDirectory(String dir) {
//如果dir不以文件分隔符结尾,自动添加文件分隔符
if (!dir.endsWith(File.separator)) {
dir = dir + File.separator;
}
File dirFile = new File(dir);
//如果dir对应的文件不存在,或者不是一个目录,则退出
if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
logger.error("删除目录失败:" + dir + "不存在!");
return false;
}
boolean flag = true;
//删除文件夹中的所有文件包括子目录
File[] files = dirFile.listFiles();
for (int i = 0; i < files.length; i++) {
// 删除子文件
if (files[i].isFile()) {
flag = deleteFile(files[i].getAbsolutePath());
if (!flag) {
break;
}
}
//删除子目录
else if (files[i].isDirectory()) {
flag = deleteDirectory(files[i]
.getAbsolutePath());
if (!flag) {
break;
}
}
}
if (!flag) {
logger.error("删除目录" + dir + "失败!");
return false;
}
//删除当前目录
if (dirFile.delete()) {
logger.info("删除目录" + dir + "成功!");
return true;
} else {
return false;
}
}
- 读取JSON文件内容
/**
* 读取文件内容
*
* @param fileName 文件地址+名称
* @return
*/
public static String readJsonFile(String fileName) {
String jsonStr = "";
try {
File jsonFile = new File(fileName);
FileReader fileReader = new FileReader(jsonFile);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
fileReader.close();
reader.close();
jsonStr = sb.toString();
return jsonStr;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}