/**
* 读取日志文件地址,每行根据指定字符分割开,每行分割成一个数组.每20000行(可传入参数指定,linesOnce)放到一个list中,
* 进行一个操作,然后list清空,重复下一个20000行(可传入参数指定,linesOnce)
* 注意:现在是把传入的参数取出来在检查一下,重新付给新的map当参数传入,如果传入的map中参数齐全,就可以直接传入的map参数往下传
* splitCharacter 分割用的字符,linesOnce为一次读取的行数,fileFrom需要分析的文件的地址和文件名,需要完整的路径和扩展名
* fileTo是文件复制到什么地方,如果为空则是在fileFrom同样的位置,文件名是在文件名的扩展名前面加上"_copy",如:E:\\text.txt,
* 则默认的fileTo为E:\\text_copy.txt.
* @param map
* @throws Exception
*/
public static void readAndOperateLog(Map<String, String> map) throws Exception {
String splitCharacter = ""; // 分隔符,如果没有默认为"-";
String linesOnce = ""; // 一次读取多少行
String fileFrom = "E:\\test.txt"; // 源文件地址,不能为空
String fileTo = ""; // 源文件复制到地址.
if (map != null) {
splitCharacter = map.get("splitCharacter");
linesOnce = map.get("linesOnce");
fileFrom = map.get("fileFrom");
fileTo = map.get("fileTo");
}
if (ifNull(splitCharacter)) {
splitCharacter = "-";
}
if (ifNull(linesOnce)) {
linesOnce = "20000";
}
if (ifNull(fileFrom)) {
throw new Exception("源文件不能为空");
}
if (ifNull(fileTo)) {
int indexDot = fileFrom.lastIndexOf(".");
if (indexDot == -1) {
throw new Exception("请输入完成的文件路径和名称,包括扩展名!");
}
fileTo = fileFrom.substring(0, indexDot) + "_copy" + fileFrom.substring(indexDot);
}
HashMap<String, String> mapAnlayze = new HashMap();
mapAnlayze.put("splitCharacter", splitCharacter);
mapAnlayze.put("linesOnce", linesOnce);
mapAnlayze.put("fileFrom", fileFrom);
mapAnlayze.put("fileTo", fileTo);
List logInfo = logAnalyze(mapAnlayze); // 注意,如果 传入的map参数直接包含有这些参数,可以直接传入map即可
}
public static List logAnalyze(Map<String, String> map) {
List logInfo = new ArrayList();
String splitCharacter = ""; // 分割用的字符
String linesOnce = ""; // 一次读取多少行
String fileFrom = ""; // 源文件地址.
String fileTo = ""; // 复制到文件地址.
if (map != null) {
splitCharacter = map.get("splitCharacter");
linesOnce = map.get("linesOnce");
fileFrom = map.get("fileFrom");
fileTo = map.get("fileTo");
}
int linesOnceInt = Integer.parseInt(linesOnce);
int lineread = 0; // 现在读到了那一行
FileReader fr = null;
try {
HashMap<String, String> mapCopy = new HashMap();
mapCopy.put("fileFrom", fileFrom);
mapCopy.put("fileTo", fileTo);
String copyFileInfo = copyFile(mapCopy); // copy 一份文件.如果
fr = new FileReader(fileTo);
BufferedReader br = new BufferedReader(fr);
String line;
int listNum = 0;
try {
do {
line = br.readLine();
lineread++; // 假如linesOnceInt=2
if (line == null) {
break;
}
HashMap<String, String> mapOneLine = new HashMap<String, String>();
mapOneLine.put("splitCharacter", splitCharacter);
String[] oneLine = (String[]) operateOneLine(mapOneLine, line); // 对读入的一行进行操作
logInfo.add(oneLine);
if ((lineread % linesOnceInt) == 0) {
// 在这里进行一些操作。
// 在这里进行一些操作。
listNum++;
// 在这里可以打印出来查看结果.
/*
* if (logInfo != null) {
for (int i = 0; i < logInfo.size(); i++) {
String[] logInfoOneLine = (String[]) logInfo.get(i);
for (int j = 0; j < logInfoOneLine.length; j++) {
System.out.println(listNum + "::第" + ((listNum - 1) * linesOnceInt + i) + "行,数组中的第" + j + "个数据的值为" + logInfoOneLine[j]);
}
}
}
*/
logInfo.clear();
//如果不清空,差不多60000行,占用内存10M
}
} while (line != null);
br.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return logInfo;
}
public static String copyFile(Map<String, String> map) {
String errorInfo = "";
String fileFrom = "";
String fileTo = "";
String copyWhere = ""; // 如果需要复制到指定地方或者
if (map != null) {
fileFrom = map.get("fileFrom");
fileTo = map.get("fileTo");
}
if ("".equals(fileFrom)) { // 如果输入的复制源和复制地址为空,则提示返回信息 。
errorInfo = "复制源文件路径和文件名为空!";
return errorInfo;
}
if ("".equals(fileTo)) {
errorInfo = "复制到文件路径和文件名为空!";
return errorInfo;
}
FileInputStream fis = null;
FileOutputStream fos = null;
byte[] buff = new byte[1024];
int readed = -1;
try {
try {
fis = new FileInputStream(fileFrom);
} catch (FileNotFoundException e) {
e.printStackTrace();
errorInfo = "系统找不到指定文件!";
return errorInfo;
}
try {
fos = new FileOutputStream(fileTo);
} catch (FileNotFoundException e) {
e.printStackTrace();
errorInfo = "无法复制到指定地址!";
return errorInfo;
}
try {
while ((readed = fis.read(buff)) > 0)
fos.write(buff, 0, readed);
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (fis != null) {
fis.close();
}
if (fos != null) {
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return errorInfo;
}
public static String[] operateOneLine(Map<String, String> map, String line) {
List oneline = new ArrayList();
String splitCharacter = "";
if (map != null) {
splitCharacter = map.get("splitCharacter");
}
String[] splitCharacters = line.split(splitCharacter);
/* 可以打印出来查看下.
for (int i = 0; i < splitCharacters.length; i++) {
// System.out.println(splitCharacters[i]);
}
*/
return splitCharacters;
}
/**
* 判断输入的字符串是否为空,如果是则返回true,否则为false;
* @param str
* @return
*/
public static boolean ifNull(String str) {
if ("".equals(str) || str == null) {
return true;
} else {
return false;
}
分享到:
相关推荐
SAS的导入过程可以用于读取分隔符文件,例如csv、txt、xls等文件格式。读者可以使用导入过程读取分隔符文件来快速读取和处理数据。 用 DDE读取 PC文件 SAS可以使用DDE(Dynamic Data Exchange)技术读取PC文件,...
程序自动识别这些分隔符,可以方便地将接收到的数据按行处理,这对于解析日志、命令响应等文本格式的数据十分有用。 实现这样的串口通信工具,首先需要创建`SerialPort`对象,然后配置串口参数,例如: ```csharp ...
例如,串口数据通常由一系列连续的字节流组成,没有明确的行分隔符,这使得直接阅读和分析变得困难。 报文格式化就是将这些原始的、未结构化的报文转换成结构化的、易于理解的形式。这个过程通常包括以下几个步骤:...
- 导入导出过程中可能出现错误,如格式不匹配、权限问题等,可以通过日志文件分析错误原因并进行调整。 - 在生产环境中,建议先在测试环境中验证导入导出命令,确保无误后再应用到生产系统。 总之,Db2 提供了...
当用户提交这些信息时,程序会使用QFile和QTextStream逐行读取'user.txt'的内容,对每一行进行解析,通常每行包含一个账号和对应的密码,以某种分隔符(如逗号或冒号)分开。找到匹配的账号和密码后,登录过程就成功...
- **将表中数据记录导出为字段值用分隔符'|'分开的dat文件**: 例如,使用`SELECT * FROM table_name INTO OUTFILE 'data.dat' FIELDS TERMINATED BY '|'`。 - **将数据导入到相应表中**: 使用SQL*Loader或直接的SQL ...
- **将表中数据记录导出为字段值用分隔符'|'分开的.dat文件**: ```sql spool data.dat; set linesize 1000; set pagesize 0; set feedback off; set heading off; set trimspool on; set colsep '|'; ...
按第一种方式和第三种方式统计,代码行+注释行+空白行一定等于总行数,而第二种方式统计代码行+注释行+空白行大于总行数,两者之差就是既有代码又有注释符的行数。《源码统计器》缺省设置为第二种统计方法。 ...
按第一种方式和第三种方式统计,代码行+注释行+空白行一定等于总行数,而第二种方式统计代码行+注释行+空白行大于总行数,两者之差就是既有代码又有注释符的行数。《源码统计器》缺省设置为第二种统计方法。 &...
switches=任何 RAR 开关,用空格分开 例如: switches=-m5 -s 环境变量 ~~~~~~~~ 可以通过建立"RAR"环境变量来添加默认参数到命令行中. 例如,在 Unix 中,下列命令行可以被添加到你的配置中: RAR='-s...
switches=任何 RAR 开关,用空格分开 例如: switches=-m5 -s 环境变量 可以通过建立"RAR"环境变量来添加默认参数到命令行中. 例如,在 UNIX 中,下列命令行可以被添加到你的配置中: RAR='-s -md1024'...
出处:风流的CG网络日志 时间:Mon, 28 Aug 2006 07:24:34 +0000 作者:yufeng 地址:http:///read.php?38 内容: 提供给新手学习的 PHP新手教程,是一个比较有价值的PHP新手教程! 一、PHP简介 PHP是一种易于...