易截截图软件、单文件、免安装、纯绿色、仅160KB

Java实现CSV文件差异对比

在项目中经常会遇到使用CSV文件,比如从HR中得到的文件拿到其它地方去处理,实际会需要得到当前和上次文件中的差异,比如:添加,删除,修改, 那么如何来实现呢,可能有很的方法,在这里我说一下我的实现方法而且已投入实际使用。
首先, CSV文件典型以,分隔,当然还有其它的字符,由很多列的属性和属性值组成,那么两个文件变化之后,通常会是怎样的情况呢,
比如:添新的一行,删除已有一行,修改已有行某些值,没有任何变化。
所以实现思路是: 关键之一是能够找一个东西来唯一标识每一行,在这里我用的把某几个字段组合来作为ID,有了这个后就好办法,读取两个文件并把ID计算出来,但还有一个事情就是文件都读进来了,应该如何来决定添加,删除,修改呢,前面说了既然有了ID,那么拿去比较:
ID in old not in new   - > delete
ID in new not in old -> add
ID in both old and new -> modify
example:
old:
value1,value2,value3
test1,test2,test3
new:
hello,world,haha
value1,value2,value4
delta:
A, hello,world,haha
M, value1,value2,value4
D, test1,test2,test3
在修改情况下还要去判断修改了哪些值。使用Java的情况下,我的做法是读取两个文件然后封装为Entry, 再把entry存入Map(ID, Entry)中,然后再做比较,从左到右决定添加和修改,从右到左决定删除,使用Map的key,value查找特性,当然了比较结束后要把Delta数据写到新的csv文件中,目前处理8000行左右的时间远在1s内。下面是比较的代码片断
/**
* Compare the two Map then return the delta entry list
* @param input Map input Map where stored the entry and ID
* @param previous Map previous Map
*/
public List<Entry> deltaEntryList(Map<Object, Object> input, Map<Object, Object> previous){
List<Entry> deltaList = new ArrayList<Entry>();
Iterator iterInput = input.entrySet().iterator();
Util.log("debug", "Compare input with previous");
while (iterInput.hasNext()) {
Map.Entry entry = (Map.Entry) iterInput.next();
Object keyInput = entry.getKey();
Object valInput = entry.getValue();
//For Add
if( !previous.containsKey(keyInput) ){
Entry deltaAdd = (Entry)valI


相关文档:

java 使用eval.jar解析公式

eval.jar 需要到https://eval.dev.java.net/
下载
--下面是示例使用,支持中文变量
Expression exp = new
Expression("(x + y)/2"
);

Map<String, BigDecimal> variables = new
HashMap<String, BigDecimal>();
variables.put("x", new
BigDecimal("4.32"
)); ......

JAVA和PHP文件操作总结

JAVA文件操作总结
File类
File f = new File(path);
path为实际路径,该路径可以是文件,或文件夹,也可以是不存在的。
f.exists() 可以判断该路是否存在。
f.isDirectory() 可以判断是否是文件夹。
f.mkdirs(); 递归创建文件夹
File和输入输出流之间纽带FileInutStream,FileOutputStream
URL url = new URL(strUr ......

JAVA和PHP获取mysql最后插入的自增id值

php和java通用sql语句法
SELECT max(id) from table
该方法在多线程等情况下可能会造成不正确。
java三种方法
1、根据ps的getGeneratedKeys
PreparedStatement ps = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); //红色是关键
ps.executeUpdate(); //执行后
ResultSet rs = ps.getGeneratedKeys ......

java 注释 : annotations 元数据

annotations : 注释
好处
1.文档编制
2.编译器检查
3.代码分析
JSR 175 是编程语言的元数据工具,为将元数据合并到核心java语言中提供正式理由和说明
基本知识:
注释采用"@"标记形式,后面是注释名称,然后在需要数据时,通过name=value对向注释提供数据
注释的三个基本种类:
    标记注释 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号