文本数据展示需求:两个文本文件,不同行数,相同数据保留,差异数据输出到另一文件中
可输出为TXT、CSV、HTML格式
package text;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description TODO
* @Date 2022-04-21 20:10
* @Author Mr.J
*/
public class Text
{
public static void main(String[] args)
{
Text text = new Text();
text.read();
}
public void read()
{
String s;
BufferedReader bufferedReader1 = null;
BufferedReader bufferedReader2 = null;
try
{
//读取本地指定盘符文件
// bufferedReader1 = new BufferedReader(new InputStreamReader(new FileInputStream(new File("F:\文本1.txt"))));
// bufferedReader2 = new BufferedReader(new InputStreamReader(new FileInputStream(new File("F:\文本2.txt"))));
//读取项目中指定文件
bufferedReader1 = new BufferedReader(new InputStreamReader(new FileInputStream(new File("文本1.txt"))));
bufferedReader2 = new BufferedReader(new InputStreamReader(new FileInputStream(new File("文本2.txt"))));
ArrayList<String> arrayList1 = new ArrayList<>();
ArrayList<String> arrayList2 = new ArrayList<>();
StringBuffer stringBuffer = new StringBuffer("/cum/");
while ((s = bufferedReader1.readLine()) != null)
{
/**
* 1、先判断这个字符串前5位中是否包含/cum/
* 2、如果不包含就存入数组
* 3、如果包含就截取掉,存入数组中
* 4、判断没有前缀字符是否不足5位
*/
//第一种写法
s = s.contains(stringBuffer)? s.substring(5) : s;
arrayList1.add(s);
//第二种写法
// if (s.contains(stringBuffer))
// {
// //存储数组中
// arrayList1.add(s.substring(5));
// }
// arrayList1.add(s);
}
while ((s = bufferedReader2.readLine()) != null)
{
//存储数组中
arrayList2.add(s);
}
//过滤不同数据进行存储
List<String> collect = arrayList2.stream().filter(s1 -> !arrayList1.contains(s1)).collect(Collectors.toList());
//输出查看是否正确
System.out.println(collect);
System.out.println("保存文件");
/**
* 创建指定盘符文件
* 可以指定输出TXT格式、CSV格式、HTML格式
*/
File outFile = new File("F:/输出文件.txt");
//设置编码格式以及大小
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile, true), "UTF-8"), 10240);
//遍历输出并进行存储
for (int i = 0; i < collect.size(); i++)
{
out.write(collect.get(i) + "\r\n");
}
out.flush();
out.close();
System.out.println("输出结束~~~~~");
} catch (IOException e)
{
e.printStackTrace();
} finally
{
// 释放资源
if (bufferedReader1 != null)
{
try
{
bufferedReader1.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
if (bufferedReader2 != null)
{
try
{
bufferedReader2.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}
控制台输出差异,并进行存储
- 控制台展示
- 本地指定盘符查看是否输出
- 更换存储格式
测试成功!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)