前几天做了一道感觉有点技术含量的练习题(高手看到不要喷哦 小弟是菜鸟中的菜鸟 所有小弟认为有点技术含量)
大概题目是这样的:
有3个txt文档 分别是三篇分章 第一篇是我国百家姓的介绍 第二篇是一百个好听的女孩的名字 第三篇是一百个好听的男孩的名字(名字都是两个字的)
在百家姓中随机生成一个姓氏firstName 在一百个好听的男孩的名字中随机生成一个名字boyName 女孩如此 girlsName
再随机生成一个性别gender 男或者女(现在至少在我们国家官方承认的只用这两种性别 哈哈)
如果随机生成的gender是“男” 那么只能随机生成boyName 如果gender是"女" 同理只能生成girlsName
最后再从1~100中随机生成一个年龄age
例如:王小二 男 21 分别对应着 firstName+boyName gender age
生成后 插入到数据库中(我原来做的是生成sql脚本文件 所以以下给出的源码是生成sql脚本文件的源码)
在这道题中 我大概使用到了以下技术点:
1.文件的读写操作
2.正则表达式匹配字符串
3.泛型集合的使用
4.随机函数
5.字符串处理函数
6.sql语句
7.ado.net
在之后的几篇文章中我会依依为大家介绍这些 介绍的方式全部是我的课堂笔记 有不对的地方 还希望大牛拍砖
这篇介绍的是“文件以及文件流的操作” 好了 废话不多少 开始!!!!
1.读取文件中所有行 放在数组中 ↑
string[] strs = System.IO.File.ReadAllLines(@"D:\115账号.txt", Encoding.Default);
2. 读取文件中所有行 放在字符串中 ↑
string str=System.IO.File.ReadAllText(@"D:\115账号.txt", Encoding.Default);
3. 文件的复制 ↑
System.IO.File.Copy(@"D:\115账号.txt", @"D:\1.txt",true);//将原来的文件覆盖掉
System.IO.File.Copy(@"D:\115账号.txt", @"D:\1.txt",false);//不能和已经存在的文件重名
4. 文件的创建 ↑
System.IO.File.Create(@"D:\10.txt");
5. 文件的删除 ↑
System.IO.File.Delete(@"D:\10.txt");
6. 判断文件是否存在 ↑
if (System.IO.File.Exists(@"D:\100.txt")==true)
{
Console.WriteLine("这个文件存在");
}
else
{
Console.WriteLine("不存在");
}
7. 文件的拷贝 / 复制 ↑
System.IO.File.Copy(@"D:\100.txt", @"E:\2.txt");//(旧路径,新路径)
8. 文件的移动 / 剪贴 ↑
System.IO.File.Move(@"D:\10.txt", @"E:\200.txt");//(旧路径,新路径)
9. 文件的写入 / 同时创建文件 并且覆盖掉以前的内容 ↑
string str = "你好 哈哈!!!"; System.IO.File.WriteAllText(@"D:\100.ppt", str,Encoding.Default);
10. 文件的追加 ↑
string str = "你好 哈哈!!!"; System.IO.File.AppendAllText(@"D:\100.txt", str,Encoding.Default);
11. 新建一个文件夹 ↑
System.IO.Directory.CreateDirectory(@"D:\新建文件夹");
12. 显示出文件夹中的所有内容(只显示文件名字 不显示文件夹名字)↑
string [] strs=System.IO.Directory.GetFiles(@"D:\如鹏","*.txt");
13. 显示出 文件夹 和 文件 的名字中的所有内容 ↑
string[] strs = System.IO.Directory.GetFileSystemEntries(@"D:\如鹏");
14. 检测本地磁盘的盘符名称以及盘符个数 ↑
string[] strs = System.IO.Directory.GetLogicalDrives();//strs中存放的是盘符的名称 strs的长度就是盘符的个数
15. 删除文件夹和里面的内容 ↑
System.IO.Directory.Delete(@"D:\1",true);
16.获得当前执行程序的路径 ↑
string str=Assembly.GetExecutingAssembly().Location;
string str1 = Directory.GetCurrentDirectory();
什么是文件流操作
文件流就在文件传输时 传输的是文件的二进制数据 就是01代码 文件流可以控制每次读取文件二进制数据的宽度 这个宽度 就是我们所说的缓存
使用文件流时 需要添加命名空间
using System.IO;
创建一个读的文件流 ↑
StreamReader reader = new StreamReader(file_read,Encoding.Default);
// 创建一个读文件的流
创建一个写的文件流 ↑
StreamWriter writer = new StreamWriter(file_write, Encoding.Default);
// 创建一个写文件的流
创建一个读文本文件的流(读出带汉字的文件) ↑
FileStream file_read = new FileStream(path, FileMode.Open, FileAccess.Read);
// 创建一个读取文本文件的流
创建一个写文本文件的流(能将汉字写去文件中) ↑
FileStream file_write = new FileStream(path, FileMode.Create, FileAccess.Write);
//创建一个写文本文件的流
如何使用文本文件流(File.ReadAllText和File.WrteAllText的原理就是利用了文本文件的流操作) ↑
FileStream file_Read = new FileStream(@"C:\Users\宋方舟\Desktop\linq.txt", FileMode.Open, FileAccess.Read);
FileStream file_Write = new FileStream(@"C:\Users\宋方舟\Desktop\哈哈.txt", FileMode.Create, FileAccess.Write);
using (file_Read)
{
int count = 0;
byte[] MyByte = new byte[200];
using (file_Write)
{
while ((count = file_Read.Read(MyByte, 0, MyByte.Length)) != 0)
{
file_Write.Write(MyByte, 0, count);
}
}
}
将文件复制到指定路径(使用单个字节的方式依次传输) ↑
// 使用前必须创建文件的所有对象
using (file_write)
{
using (file_read)
{
int res = 0; // 存放 返回 int型字符的unicoad码
while ((res = file_read.ReadByte()) >= 0) // 读文件 返回 int型字符的unicoad码
{
file_write.WriteByte((byte)res); // 将文件写入文件中
}
}
}
将文件复制到指定路径(使用读取数据块的形式) ↑
// 使用前必须创建所有流操作对象
using (file_read)
{
using (file_write)
{
int count = 0; // 一次读取的字节数
byte[] myByte=new byte[10]; // 一次读的数据
while ((count = file_read.Read(myByte, 0, myByte.Length)) > 0) // 记录一次读出来的个数 如果为0 则说明文件已经读完了 // file_read.Read(缓冲区,从第几个位置开始读取,一次读取的长度)
{
file_write.Write(myByte, 0, count); // 将数据块写入硬盘
}
}
}
从一个文本文件中读到数据 再将数据写到一个新的文件中(带有汉字的文件) ↑
// 在操作前 必去创建所有的流对象
string str = "";
using (file_read) // 使用完自动释放file_read
{
using (file_write) // 使用完自动释放file_write
{
using (reader) // 使用完自动释放reader
{
using (writer) // 使用完自动释放write
{
str = reader.ReadToEnd(); // 将文本文件读都str中
writer.Write(str); // 将str中的内容写到指定文件中
}
}
}
}
关于using{} ↑
在进行流操作的时候 使用
using
{
//
}
将操作括起来
这条语句就相当于自动释放了非托管成员,花括号结束的时候自动组调用Dispose();方法
就等于在末尾加上了
流操作对象.Close();
流操作对象.Dispose();
其他类使用using
其他类如果使用using 必须实现IDisposable接口
下一篇文章我会介绍 正则表达式匹配字符串
(作者注释:由于我的笔记是.doc格式的 所有的标题都有超链接以及标题颜色 如果直接复制过来的话会有格式不支持的情况 为了统一 我在全部转换成了txt 所以会没有颜色 希望大家见谅)