目录
IO 流是什么
C# 代码
本文使用 C# 的流操作,实现对指定文件夹路径下的文件进行读取与判断,并将符合条件的结果存入 Oracle 数据库。
IO流_百度百科
流是一种抽象概念,它代表了数据的无结构化传递。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为IO流。换句话说,IO流就是以流的方式进行输入输出。
简单来说就是通过 IO 流的方式,实现对文件的一系列操作,例如复制、删除等基本功能,一般来说高级语言都会有相应封装好的方法以供直接调用。
using Oracle.DataAccess.Client;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
namespace GetLogValues2
{
class Program
{
static void Main(string[] args)
{
// 需要读取的路径
string contentPath = "D:\\AllLogs\\";
DirectoryInfo di = new DirectoryInfo(contentPath);
FileInfo[] ff = di.GetFiles("*.log");// 读取的文件类型
string sFileName;// 完整目录
int i = 1;// 文件个数
Console.WriteLine("执行期间,请勿对文件夹内部文件 移动 / 复制 / 删除 / 插入!");
Console.WriteLine("\t按回车键开始");
Console.ReadKey();
Console.WriteLine("\t现在开始");
if (ff.Count() > 0)// 如果该目录下 log 文件个数不小于0
{
foreach (FileInfo temp in ff)// 遍历文件夹下所有 log 文件
{
Stopwatch sw = new Stopwatch();
sw.Restart();// 计时开始
sFileName = contentPath + temp.ToString();// 完整目录赋值
List ls = ReadDocument(sFileName);// 遍历一个文件
if (ls.Count <= 0)
{
Console.WriteLine("无符合条件的文件,按回车键结束!");
Console.ReadKey();// 等待用户输入
Process.GetCurrentProcess().Kill();// 此方法完全奏效,绝对是完全退出。
}
insertSQL(ls);// List 中数据存入数据库
Console.WriteLine("已完成第 " + i + " 个 ,剩余 " + (ff.Count() - i) + " 个");
i++;
sw.Stop();// 计时结束
Console.WriteLine("\t耗时 " + sw.ElapsedMilliseconds + " ms");
}
Console.ReadKey();
}
else
{
Console.WriteLine("该目录:" + contentPath + " 下无设定的文件,按回车键结束!");
Console.ReadKey();// 等待用户输入
Process.GetCurrentProcess().Kill();// 此方法完全奏效,绝对是完全退出。
}
}
//读取文件,并返回文件中的内容
public static List ReadDocument(string sFileName)
{
// 创建 List 用于存储结果,List 会自动扩容,不使用数组(数组无法自动扩容)
List list = new List();
// 注册字符集编码
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
// 创建一个 StreamReader 的实例来读取文件,using 语句也能关闭 StreamReader
using (StreamReader sr = new StreamReader(sFileName, Encoding.GetEncoding("gb2312")))// 使用 gb2312 编码,否则中文字符会乱码
{
string line;
// 从文件读取并显示行,sr.ReadLine() 读取下一行
while ((line = sr.ReadLine()) != null)
{
// 根据判定条件筛选
if (line.IndexOf("开始") >= 0)
{
list.Add(line);
}
}
}
return list;
}
public static void insertSQL(List lists)
{
string status;// 状态
string start_time;// 开始时间
string end_time;// 结束时间
string sSql;
status = "";
start_time = "";
end_time = "";
// sql 语句,与下方的 paramATIO 相对应
sSql = @"insert into students (start_time,end_time,status) values (:starttime,:endtime,:status)";
// 对于以下情况不予插入数据库:status == "Failure" : 失败的结果
if (status == "Failure") { }
else
{
// sql 赋值
OracleParameter[] paramATIO = new OracleParameter[] {
new OracleParameter(":starttime",start_time),
new OracleParameter(":endtime",end_time),
new OracleParameter(":status",status)
};
OracleHelper.ExecuteNonQuery(sSql, paramATIO);// 执行sql
}
}
}
}