一。文本校驗,因為要工作在window,Linux,所以用Java寫app
package com.cttmis;
import Java.io.*;
import Java.util.*;
import Java.text.SimpleDateFormat;
/**
因為客戶導入的數據經常有一些錯誤,為了自動檢查文件而開發
20070907
parm:文件所在路徑 體積限制(M為單位)
cmd: Java com.cttmis.checktxt 目錄 體積限制(300)
異常一:行數據不完整。校驗逗號分隔符號(,)的數量是否一致。(中間折行的也能校驗出)
異常二:存在空行
我現在發現的錯誤是字符字段切斷形成亂碼而造成的。
*/
public class checktxt {
public static void main(String[] args) {
System.out.println("//////////////////////////////////////////////////////////////////////////");
System.out.println("Txt文本校驗工具(Java)v1.01\r\n異常一:行數據不完整。校驗逗號分隔符號(,)的數量在每行是否一致。\r\n"+
" (中間折行的,數據缺少的,都應該能校驗出)\r\n異常二:存在空行(空白行,或跳行)\r\n實際上只要校驗每行的分隔符數量即可。\r\nchengg0769 2007-09-06");
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;
}
final char SPLITERCOL = ','; //列分隔符號
long FileLengthMax = 300; //300M限制
if (args.length ==2){
FileLengthMax = Long.parseLong(args[1]);
}
File[] filelist;
try
{
File f = new File(args[0]);
if (f.isDirectory())
{
&nb
sp; filelist = f.listFiles(new txtFilenameFilter("txt"));
System.out.println("文件清單: -----------------------begin----------------------------");
printFileNameArray(filelist); //Out print file name
System.out.println("文件清單: -----------------------end------------------------------");
System.out.println();
FileReader fr;
BufferedReader br;
String LineString; //單行數據
String LastLineString; //上行數據,便於比較
int TotalRows =0;
int QtyCommaPerLine = 0; //標准分隔符數量
int QtyComma = 0; //標准分隔符數量
int ErrCount = 0; //錯誤計數器
int SleepIdle=0;
for (int i = 0; i < filelist.length; i++) {
if (filelist[i].length() > 1000000*FileLengthMax){
System.out.println("體積超過限制的:" + FileLengthMax + "M,程序不檢查,進入下一個!");
continue;
}
Thread.sleep(1000);
fr = new FileReader(filelist[i]);
br = new BufferedReader(fr);
SleepIdl
e = 0;if (QtyComma != QtyCommaPerLine)
}catch(Exception e)
{
e.printStackTrace();
}
}
static void printFileNameArray(File[] filelist)
{
for(int i=0;i<filelist.length;i++)
{
System.out.println(filelist[i].getName());
}
}
//查找某個字符在字符穿中出現的個數
static int QtyCharInString(String s,char c)
{
int count = 0;
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)==c)
count++;
}
return count;
}
}
//filter interface class
class txtFilenameFilter implements FilenameFilter
{
String ext;
txtFilenameFilter(String ext){
this.ext= "." +ext;
}
public boolean accept(File dir,String name)
{
return name.endsWith(ext);
}
}
二。bat批處理(window下)
1. 不輸出文本,只作屏幕顯示:
@@echo off
set path = "%path%;C:\Program Files\Java\j2re1.4.2_04\bin"
Java -classpath "%classpath%;." com.cttmis.checktxt E:\FTPFILE
pause
2. 作檢查並輸出到err.log
@@echo off
set path = "%path%;C:\Program Files\Java\j2re1.4.2_04\bin"
Java -classpath "%classpath%;." com.cttmis.checktxt E:\FTPFILE >>err.log
pause
//Note: "%classpath%;." 後面的點代表當前路徑,這樣不用關心class文件的路徑名。
//這是一個習作,是學習Java的第一個程序。也許有不足的地方。