1.将一个文本文档上的文本反转,第一行和倒数第一行交换,第二行和倒数第二行交换
/**
* 将一个文本文档上的文本反转,第一行和倒数第一行交换,第二行和倒数第二行交换
* 使用高效字符流按行读取,然后放入集合中,倒着遍历集合,将读取的内容输出到文本中
*/
@Test
public void reversalFile(){
BufferedReader reader = null;
BufferedWriter writer = null;
try {
String sourceFileUrl = "C:\\Users\\admin\\Desktop\\testIO\\a.txt";
String targetFileUrl = "C:\\Users\\admin\\Desktop\\testIO\\b.txt";
reader = new BufferedReader(new FileReader(sourceFileUrl));
writer = new BufferedWriter(new FileWriter(targetFileUrl));
ArrayList<String> list = new ArrayList<>();
String line;
while ((line=reader.readLine())!=null){
list.add(line);
}
//反向遍历集合,输出内容
for (int i=list.size()-1; i>=0;i--){
writer.write(list.get(i));
writer.newLine();
}
}catch (Exception e){
e.printStackTrace();
}finally {
//在finally中关闭开启的流
if (reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (writer!=null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.获取一个文本上每个字符出现的次数,将结果写在b.txt上
/**
* 获取一个文本上每个字符出现的次数,将结果写在b.txt上
*/
@Test
public void statCharCountInFile(){
BufferedReader reader = null;
BufferedWriter writer = null;
try {
String sourceFileUrl = "C:\\Users\\admin\\Desktop\\testIO\\a.txt";
String targetFileUrl = "C:\\Users\\admin\\Desktop\\testIO\\b.txt";
reader = new BufferedReader(new FileReader(sourceFileUrl));
writer = new BufferedWriter(new FileWriter(targetFileUrl));
Map<Character,Integer> map = new TreeMap<>();
int c;
while ((c=reader.read())!=-1){
//将读取到的内容强转为char类型,判断map集合中是否已存在,存在,value+1,不存在,value初始化为1
char key = (char) c;
map.put(key, map.containsKey(key) ? map.get(key) + 1 : 1);
}
//遍历集合,将结果写入b.txt中,注入特殊字符转换
for (Character key : map.keySet()) {
switch (key){
case '\t':
writer.write("\\t出现了:"+map.get(key)+"次");
break;
case '\r':
writer.write("\\r出现了:"+map.get(key)+"次");
break;
case '\n':
writer.write("\\n出现了:"+map.get(key)+"次");
break;
default:
writer.write(key+"出现了:"+map.get(key)+"次");
}
writer.newLine();
}
}catch (Exception e){
e.printStackTrace();
}finally {
//在finally中关闭开启的流
if (reader!=null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (writer!=null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}