1.面试题目:
1、业务需求
现有一些从不同网站采集下来的网络资源,需要在网站进行统一展示,但由于内容和格式不一致,所以导入数据库时比较麻烦,现需要将这些资源加工处理成统一格式,方便导入数据库。
2、实现要求
1)文件命名
a)原文件名中带有”-“的,需截取”-“后面的内容作为新的文件名,不带”-“的则保留原文件名。
b)显示新文件夹下的所有文档的行数。
2)文件编码
所有输出文件统一编码为GBK。
3)文件内容
a)去掉所有以”<#”开头的内容(一整行)。
b)去掉文档中的所有空行。
3、提交要求
1)提交可执行的java代码。
2)生成以下效果的文件目录。
源文件
目标结果:
JAVA源码解答:
package com.navinfo.aerozh.ni.serverStation.assembler;
import java.io.;
import java.util.;
/**
-
@Author: luyao
-
@Description:
-
@Date: Created in 2019/7/19 11:24
-
@Modified By:
/
public class Demo
{
/*- 用来保存文件的绝对路径的list
/
static LinkedList Filelist = new LinkedList();
/* - 用于记录每个文件夹下文件的行数
*/
static Map<String, Integer> lineMap = new HashMap<String, Integer>(16);
/**
- 读取文件夹下的所有文件并获取文件的绝对路径
- @param path
*/
public static void readFilesDir(String path)
{
//文件夹
LinkedList Dirlist = new LinkedList();
File dir = new File(path);
File[] files = dir.listFiles();
if(files.length > 0)
{
for (File file : files)
{
//判断是否为文件夹
if (file.isDirectory())
{
Dirlist.add(file);
} else
{
//将文件绝对路径放到list中
Filelist.add(file.getAbsolutePath());
System.out.println(file.getAbsolutePath());
}
}
}else{
System.out.println(“指定文件夹下没有任何数据!!!”);
}
}
/**
- 读取单个文件的内容
- @param file
- @return 文件的内容,String
*/
public static String readContents(File file, String mirLocal)
{
StringBuilder res = new StringBuilder();
BufferedReader br = null;
try
{
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), “GBK”);
br = new BufferedReader(isr);
int i = 0;
while (br.ready())
{
String lineContent = br.readLine();
//去掉已"<#“开的和空行的行
if (!lineContent.startsWith(”<#") && !lineContent.equals(""))
{
System.out.println(lineContent);
i++;
res.append(lineContent + “\n”);
}
}
if (!"".equals(mirLocal))
{
int lineNum =
lineMap.get(mirLocal) == null ? 0 : Integer.parseInt(lineMap.get(mirLocal).toString());
lineMap.put(mirLocal, lineNum + i);
}
br.close();
} catch (Exception e)
{
e.printStackTrace();
}
return res.toString();
}
/**
- 保存文件
*/
public static void saveFiles(String contents, String output, String mirLocal, String nameFile)
{
File file = new File(output + “//” + mirLocal);
//判断文件是否存在,不存在就创建出来
if (!file.exists())
{
file.mkdirs();//mkdirs用于创建文件夹
}
File outputFile = new File(output + “//” + mirLocal + “//” + nameFile);
try
{
if (!outputFile.exists())
{
outputFile.createNewFile();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile, true));
bw.write(contents);
bw.flush();
bw.close();
}
} catch (Exception e)
{
e.printStackTrace();
}
System.out.println(“保存成功!!!”);
}
/**
- 合并
*/
public static void mergeFiles(List files, String output)
{
if (files == null)
{
System.out.println(“Error:文件list为空”);
}
for (String filepath : files)
{
if (filepath.contains("-"))
{
String name = filepath.split("-")[1];
String nameFile = filepath.split("-")[0];
//文件夹名称
String mirLocal = nameFile.substring(nameFile.lastIndexOf("\") + 1);
int lineNum = lineMap.get(mirLocal) == null ? 0 : Integer.parseInt(lineMap.get(mirLocal).toString());
lineMap.put(mirLocal, lineNum);
String contents = readContents(new File(filepath), mirLocal);
saveFiles(contents, output, mirLocal, name);
} else
{
String name = filepath.substring(filepath.lastIndexOf("\") + 1);
String contents = readContents(new File(filepath), “”);
saveFiles(contents, output, “”, name);
}
}
System.out.println(“合并完成”);
}
/**
- 修改文件夹名称
*/
public static void mergeFiles(String out)
{
for (String key : lineMap.keySet())
{
File file = new File(out + “\” + key);
file.renameTo(new File(out + “\” + key + “(” + lineMap.get(key) + “)”));
}
}
public static void main(String[] args)
{
/**
* 目标文件夹数据,请修改指定文件夹路径
/
String path = “C:\Users\lenovo\Desktop\技术人员考核题目(7)\考核题目”;
/*
* 生成文件路径
/
String out = “D:/test”;
/*
* 文件不存在,直接新建
/
File file = new File(out);
if (!file.exists())
{
file.mkdirs();
}
/*
* 读取文件数据,绝对路径存储
/
readFilesDir(path);
/*
* 将文件内容经过筛选存到目标目录
/
mergeFiles(Filelist, out);
/*
* 修改文件夹名称
*/
mergeFiles(out);
}
} - 用来保存文件的绝对路径的list