文本文件导入导出校验工具[原创]

原创 2007年09月21日 13:56:00

package com.chen;

import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;

/**
因为客户导入的数据经常有一些错误,为了自动检查文件而开发
20070920
 parm:1.文件所在路径 2.分隔符号 3.大小限制
 java f:/123 -1 300
 判断每个文件的行分隔符号,换行是否成比例
如果汉字中有半个汉字而造成跳行,不可见字符等,或者有繁体字造成多出分隔符,可查出来

此工具可配合另外一个小程序(按行查询每行分隔数是否一致)一起使用。
*/
public class chektxtbyte {
  public static void main(String[] args) {
    System.out.println(
        "//////////////////////////////////////////////////////////////////////////");
    System.out.println("Txt文本校验工具(Java)v1.01/r/n异常一:行数据不完整。校验行分隔和列分隔是否成比例。/r/n" +
                       "       /r/nchengg0769 2007-09-20");
    System.out.println("//////////////////////////////////////////////////////////////////////////");

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm");
    Date dates;
    dates = new Date();
    long timebegin = dates.getTime();
    System.out.println("日期:" + sdf.format(dates));
    System.out.println();

    if (args.length < 1) {
      System.out.println("请输入文件名或者文件夹名称!");
      return;
    }

    byte[] SPLITERCOL = new byte[2]; //列分隔符号
    SPLITERCOL[0] = '|';
    SPLITERCOL[1] = '|';

    byte[] SPLITERROW = new byte[2];
    SPLITERROW[0] = 13;
    SPLITERROW[1] = 10;

    long FileLengthMax = 300;  //500M限制

    if (args.length >=2){
     if (args[1].equalsIgnoreCase("-1"));
     {
        SPLITERCOL[0] = ',';
        SPLITERCOL[1] = '/0';
     }
     if (args[1].equalsIgnoreCase( "-2"))
     {
        SPLITERCOL[0] = ';';
        SPLITERCOL[1] = '/0';
     }
     if (args[1].equalsIgnoreCase( "-3"))
     {
        SPLITERCOL[0] = '|';
        SPLITERCOL[1] = '/0';
     }
     if (args[1].equalsIgnoreCase( "-4"))
     {
        SPLITERCOL[0] = '|';
        SPLITERCOL[1] = '|';
     }
   }

    if (args.length ==3){
      FileLengthMax = Long.parseLong(args[2]);
    }

    File[] filelist;

    try
    {
        File f = new File(args[0]);
        if (f.isDirectory())
        {
          filelist = f.listFiles(new txtFilenameFilter("txt"));
          System.out.println("文件清单: -----------------------begin----------------------------");
          printFileNameArray(filelist); //Out print file name
          System.out.println("文件清单: -----------------------end------------------------------");
          System.out.println();

          FileInputStream fis;
          String LineString; //单行数据
          String LastLineString; //上行数据,便于比较

          long QtyRows =0;
          long QtyComma = 0;  //标准分隔符数量
          int SleepIdle=0;
          byte[] ReadByte = new byte[1];
          int readLen=0;
          boolean PreColSpiliter;  //首次比较等于列的第一个分隔符
          boolean PreRowSpiliter;  //首次比较等于行的第一个分隔符

          for (int i = 0; i < filelist.length; i++) {
            if (filelist[i].length() > 1000000 * FileLengthMax)
            {
              System.out.println("体积超过限制的:" + FileLengthMax + "M,程序不检查,进入下一个!");
              continue;
            }
            Thread.sleep(1000);
            fis = new FileInputStream(filelist[i]);

            SleepIdle = 0;
            QtyRows = 0;
            QtyComma = 0;
            PreColSpiliter = false;
            PreRowSpiliter = false;

            System.out.println(filelist[i].getName() + " -----------------begin--------------");
            while ((readLen = fis.read(ReadByte,0,1)) > 0){
              //System.out.println(ReadByte[0]);
              if (ReadByte[0] !=SPLITERCOL[0] && ReadByte[0] !=SPLITERCOL[1] && ReadByte[0] !=SPLITERROW[0] && ReadByte[0] !=SPLITERROW[1]) {
                PreColSpiliter = false;
                PreRowSpiliter = false;
                continue;
              }
              //匹配列分隔第一个
              if (ReadByte[0] == SPLITERCOL[0] && !PreColSpiliter && !PreRowSpiliter){
                if (SPLITERCOL[1] == '/0') {
                    QtyComma++;
                  }
                  else {
                    if (PreColSpiliter) {
                      QtyComma++;
                      PreColSpiliter = false; //复位
                    }
                    else {
                      PreColSpiliter = true; //置位
                    }
                  }
              }
              else if(ReadByte[0] == SPLITERCOL[1] && PreColSpiliter && !PreRowSpiliter){
                QtyComma++;
                PreColSpiliter = false; //复位
              }
              else if(ReadByte[0] == SPLITERROW[0] && !PreRowSpiliter &&!PreColSpiliter){
                if (SPLITERROW[1] == '/0') {
                    QtyRows++;
                  }
                  else {
                    if (PreColSpiliter) {
                      QtyRows++;
                      PreRowSpiliter = false; //复位
                    }
                    else {
                      PreRowSpiliter = true; //置位
                    }
                  }
              }
              else if(ReadByte[0] == SPLITERROW[1] && PreRowSpiliter && !PreColSpiliter){
                QtyRows++;
                PreRowSpiliter = false; //复位
              }

              if (SleepIdle++ == 100000) {
                Thread.sleep(100);
                SleepIdle = 0;
              }
            }
            fis.close();

            if (QtyRows ==0 ||QtyComma==0){
              System.out.println("       行分隔符数量: " + QtyRows +
                                 "  列分隔数: " + QtyComma + "/n       异常: 行分隔或列分隔符号数量为0");
            }
            else{
              if (QtyComma % QtyRows == 0) {
                System.out.println("       行分隔符数量: " + QtyRows +
                                   "  列分隔数: " + QtyComma + "/n       结果OK");
              }
              else {
                System.out.println("       行分隔符数量: " + QtyRows +
                                   "  列分隔数: " + QtyComma +
                                   "/n       结果--比例不匹配!!!");
              }
            }
            System.out.println(filelist[i].getName() + " ----------------end-----------------");
          }
        }
        long timeend=new Date().getTime();
        System.out.println();
        System.out.println();
        System.out.println("工作耗时:"+(timeend - timebegin)/1000 + "秒");
        System.gc();

    }catch(Exception e)
    {
        e.printStackTrace();
    }
  }
  static void printFileNameArray(File[] filelist)
  {
      for(int i=0;i<filelist.length;i++)
      {
          System.out.println(filelist[i].getName());
      }
  }
}

class txtFilenameFilter implements FilenameFilter
{
   String ext;

   txtFilenameFilter(String ext){
      this.ext= "." +ext;
    }

    public boolean accept(File dir,String name)
    {
      return name.endsWith(ext);
    }

}

 

 

文件完整性校验

转自:http://jmchxy.blog.163.com/blog/static/746082322013121113818518/ 近期有网友在博客中留言,希望俺介绍散列值校验文件的知识。所以俺...
  • hulinku
  • hulinku
  • 2017年12月29日 19:06
  • 147

文本文件导入导出校验工具[原创]

package com.chen;import java.io.*;import java.util.*;import java.text.SimpleDateFormat;/**因为客户导入的数据经...
  • chengg0769
  • chengg0769
  • 2007年09月21日 13:56
  • 815

【伪原创工具】最好的伪原创工具

【伪原创工具】最好的伪原创工具,原创,这个对个人站长来说,几乎不可能,因为没有那么多时间和精力去搞,一般是大站招聘编辑来做这个工作。 靠采集更新网站,早年在火车头采集出现之前还有用,因为在火车头出来...
  • i_like_cpp
  • i_like_cpp
  • 2011年10月10日 18:54
  • 5657

【伪原创工具】伪原创工具有用吗?

伪原创工具有用吗?难道伪原创就行不通吗?并不是的,真正的通过人工来操作的伪原创,比如把几篇常见的一样性质内容的文章进行重新组合,这样还是有效果的,不过需要手工编辑修改很多地方才有效果,如果简单的比几篇...
  • i_like_cpp
  • i_like_cpp
  • 2011年11月12日 19:26
  • 1676

windows下校验文件签名

程序:sigverif.exe路径:WINDOWS/SYSTEM32功能:校验系统里的可执行文件有没有经过微软的数字签名的(包括微软自己的程序).一般都不知道,偶尔可以用用. ...
  • greenerycn
  • greenerycn
  • 2007年04月16日 12:57
  • 1037

jQuery实现上传附件为空和文件格式校验

HTML代码片段正式文本: JS校验方法的实现代码 //正式文本校验
  • warylee
  • warylee
  • 2015年04月07日 09:48
  • 2770

『伪原创工具 』英文在线伪原创工具

现代软件工业已具相当规模,『伪原创工具』英文在线伪原创工具,很多软件的完成需要的是大兵团作战。一名精通飞秋局域网聊天接受编写某一块的任务后,往往只是英文在线伪原创工具,发挥的余地很小。在大项目中,很多...
  • i_like_cpp
  • i_like_cpp
  • 2011年11月16日 17:16
  • 3596

原创Oracle数据库导入导出工具

因为自己记忆力比较差,经常记不住命令,注意不是一般的差,是太差了,另外也比较懒惰,所以想写个小东西,释放下劳动力.于是有了个想法,写个导入导出数据库的小工具,免得每次敲命令麻烦,尤其是文件路径,在cm...
  • sunyujia
  • sunyujia
  • 2008年09月29日 16:17
  • 7550

Hash校验 插件形式的文件校验

  • 2009年04月13日 09:45
  • 576KB
  • 下载

JQuery校验是否上传文件以及文件格式是否正确

$(document).ready(function () { $("#AddPosButton").click(function () { v...
  • u010304557
  • u010304557
  • 2017年03月25日 16:41
  • 2714
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文本文件导入导出校验工具[原创]
举报原因:
原因补充:

(最多只允许输入30个字)