背景
主要实现以下功能:从指定目录下获取所有txt文件并读取其中的手机号,拼装成字符串,处理失败的数据存回原来的目录。
1. 获得目录下所有txt文件的路径
public List getFileList(String dirPath){
//dirPath是由配置文件导入的文件夹所在路径
File file = new File(dirPath);
List result = new ArrayList();
//file是文件夹且不为空
if(file.isDirectory() && file.list().length > 0){
//获得文件夹里的所有txt文件
File[] dirList = file.listFiles(new FileFilter() {
@Override
public boolean accept(File file1) {
if(file1.isFile() && file1.getName().indexOf("txt") > -1){
return true;
}else{
return false;
}
}
}
);
for(int i = 0; i < dirList.length; i++){
result.add(dirList[i].getPath());
}
}
return result;
}
2. 从txt文件中读取手机号
public String txt2String(File file){
StringBuilder sb = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String s = null;
//项目中每一个file里都是按行分布的手机号,这里将手机号取出并以逗号间隔组成字符串
while((s = br.readLine()) != null){
sb.append(s + ",");
}
br.close();
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString().substring(0, sb.length() - 1);
}
3. 根据路径创建文件
//创建txt文件
public void createFile(String filepath){
File file = new File(filepath);
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
4. 主方法
小工具使用springboot写成,并使用了
@EnableScheduling
注解完成定时任务,此处不多赘述。
@Scheduled(cron = "${cronTimer}")
@PostConstruct
public void method(){
//得到由txt文件路径组成的list
List list = getFileList(dirPath);
String str = null;
String res = null;
if(list.size() <= 0){
return;
}else{
for(int i = 0; i < list.size(); i++){
//循环获得每个txt文件,并将每个txt文件中的手机号取出并以逗号间隔组成字符串
File file = new File(String.valueOf(list.get(i)));
if(!file.exists()){
continue;
}
str = txt2String(file);
String[] num = str.split(",");
//failNum用来存储后续处理失败的数据
List<String> failedNum = new ArrayList<>();
for(int j = 0; j < num.length; j++){
try {
//对取出的数据进行处理
******
if(!result){
failedNum.add(num[j]);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
if(failedNum.size() > 0){
try {
FileWriter fileWriter = new FileWriter(file);
fileWriter.write("");
fileWriter.flush();
StringBuilder stringBuilder = new StringBuilder();
for(int k = 0; k < failedNum.size(); k++){
stringBuilder.append(failedNum.get(k));
if(k != failedNum.size() - 1){
stringBuilder.append(System.getProperty("line.separator"));
}
}
fileWriter.write(stringBuilder.toString());
fileWriter.close();
//处理失败的数据存回原来的目录,并将目录重命名留待后续处理
if(!file.getName().contains("_failed_")){
file.renameTo(new File(file.getParent() + System.getProperty("file.separator") + "_failed_" + file.getName()));
}
} catch (IOException e) {
e.printStackTrace();
}
}else{
return;
}
}