将数据保存至文件中,是一个比较常用的功能,数据源可以是多种形式,文件也可以是多种。
这里简单的介绍将List数据导入到CSV文件中的方法。
代码如下所示:
Student类:
public class Student
{
public string Id { get ; set ; }
public string Name { get ; set ; }
public string Age { get ; set ; }
}
模拟一个简单的List数据源:
private List< Student> GetStudentData ( )
{
List< Student> studentList = new List < Student> ( ) {
new Student ( ) { Id = "1" , Name = "haha" , Age = "10" } ,
new Student ( ) { Id = "2" , Name = "xixi" , Age = "20" } ,
new Student ( ) { Id = "3" , Name = "lolo" , Age = "30" } ,
} ;
return studentList;
}
根据文件路径创建相应的文件:
private string CreateFile ( string folder, string fileName, string fileExtension)
{
FileStream fs = null ;
string filePath = folder + fileName + "." + fileExtension;
try
{
if ( ! Directory. Exists ( folder) )
{
Directory. CreateDirectory ( folder) ;
}
fs = File. Create ( filePath) ;
}
catch ( Exception ex)
{ }
finally
{
if ( fs != null )
{
fs. Dispose ( ) ;
}
}
return filePath;
}
获取类的属性集合(以便生成CSV文件的所有Column标题):
private PropertyInfo[ ] GetPropertyInfoArray ( )
{
PropertyInfo[ ] props = null ;
try
{
Type type = typeof ( EricSunApp. Student) ;
object obj = Activator. CreateInstance ( type) ;
props = type. GetProperties ( BindingFlags. Public | BindingFlags. Instance) ;
}
catch ( Exception ex)
{ }
return props;
}
对List进行遍历,将数据导入CSV文件中(宗旨就是在一行数据中以逗号进行分割):
private bool SaveDataToCSVFile ( List< Student> studentList, string filePath)
{
bool successFlag = true ;
StringBuilder strColumn = new StringBuilder ( ) ;
StringBuilder strValue = new StringBuilder ( ) ;
StreamWriter sw = null ;
PropertyInfo[ ] props = GetPropertyInfoArray ( ) ;
try
{
sw = new StreamWriter ( filePath) ;
for ( int i = 0 ; i < props. Length; i++ )
{
strColumn. Append ( props[ i] . Name) ;
strColumn. Append ( "," ) ;
}
strColumn. Remove ( strColumn. Length - 1 , 1 ) ;
sw. WriteLine ( strColumn) ;
for ( int i = 0 ; i < studentList. Count; i++ )
{
strValue. Remove ( 0 , strValue. Length) ;
strValue. Append ( studentList[ i] . Id) ;
strValue. Append ( "," ) ;
strValue. Append ( studentList[ i] . Name) ;
strValue. Append ( "," ) ;
strValue. Append ( studentList[ i] . Age) ;
sw. WriteLine ( strValue) ;
}
}
catch ( Exception ex)
{
successFlag = false ;
}
finally
{
if ( sw != null )
{
sw. Dispose ( ) ;
}
}
return successFlag;
}
简单例举具体的调用:
private bool EricSunExportData(string folder, string fileName, string fileExtension)
{
List<Student> studentList = GetStudentData();
string filePath = CreateFile(folder, fileName, fileExtension);
bool flag = SaveDataToCSVFile(studentList, filePath);
return flag;
}