c# 操作文本文件
计算机在最初只支持ASCII编码,但是后来为了支持其他语言中的字符(比如汉字)以及一些特殊字符(比如€),就引入了Unicode字符集。基于Unicode字符集的编码方式有很多,比如UTF-7、UTF-8、Unicode以及UTF-32。
在Windows操作系统中,一个文本文件的前几个字节是用来指定该文件的编码方式的
如果你使用NotePad或WordPad来打开一个文本文件,你并不用担心该文件的编码方式,因为这些应用程序会先读取文件的前几个字节来确定该文件的编码方式,然后用正确的编码将文本中的每个字符显示出来。下面的图
中,可以看到当用NotePad记事本保存一个文档时,可以选择的编码(Encoding)方式有哪些
用.Net读取文本文件或写入文本文件,你都不需要担心编码方式,.Net已经将这些封装好了。在读取一个文本文件的时候,如果你已经知道文本使用的是什么编码方式,你可以指定使用哪种编码方式读取文本,否则如果不指定编码方式,.Net会读取文本的前几个字节来确定使用哪种编码方式读取文件内容的。在写入文本文件的时候,你也可以指定你想使用的编码方式。如果你没有指定编码,.Net会根据写入的文本是否含有特殊字符来决定编码方式。如果没有特殊字符,就采用ASCII编码,如果有特殊字符,就采用UTF-8编码
读取txt文件
如果你要读取的文件内容不是很多,可以使用 File.ReadAllText(filePath) 或指定编码方式 File.ReadAllText(FilePath, Encoding)的方法。它们都一次性将文本内容全部读完,并返回一个包含全部文本内容的字符串
string str1 = File.ReadAllText(@"c:\temp\a.txt");
//也可以指定编码方式
string str2 = File.ReadAllText(@"c:\temp\a.txt", Encoding.ASCII);
string str1 = File.ReadAllText(@"c:\temp\a.txt");
//也可以指定编码方式
string str2 = File.ReadAllText(@"c:\temp\a.txt", Encoding.ASCII);
也可以使用方法File.ReadAllLines,该方法一次性读取文本内容的所有行,返回一个字符串数组,数组元素是每一行的内容
string[] strs1 = File.ReadAllLines(@"c:\temp\a.txt");
// 也可以指定编码方式
string[] strs2 = File.ReadAllLines(@"c:\temp\a.txt", Encoding.ASCII);
.Net为我们封装了StreamReader类,它旨在以一种特定的编码从字节流中读取字符。StreamReader类的方法不是静态方法,所以要使用该类读取文件首先要实例化该类,在实例化时,要提供读取文件的路径。实例化
StreamReader类有很多种方式。下面我罗列出几种:
StreamReader sR1 = new StreamReader(@"c:\temp\a.txt");
// 同样也可以指定编码方式
StreamReader sR2 = new StreamReader(@"c:\temp\a.txt", Encoding.UTF8);
FileStream fS = new FileStream(@"C:\temp\a.txt", FileMode.Open, FileAccess.Read, FileShare.None);
StreamReader sR3 = new StreamReader(fS);
StreamReader sR4 = new StreamReader(fS, Encoding.UTF8);
FileInfo myFile = new FileInfo(@"C:\temp\a.txt");
// OpenText 创建一个UTF-8 编码的StreamReader对象
StreamReader sR5 = myFile.OpenText();
// OpenText 创建一个UTF-8 编码的StreamReader对象
StreamReader sR6 = File.OpenText(@"C:\temp\a.txt");
初始化完成之后,你可以每次读一行,也可以每次读一个字符 ,还可以每次读几个字符,甚至也可以一次将所有内容全部读完
// 读一行
string nextLine = sR.ReadLine();
// 读一个字符
int nextChar = sR.Read();
// 读100个字符
int n = 100;
char[] charArray = new char[n];
int nCharsRead = sR.Read(charArray, 0, n);
// 全部读完
string restOfStream = sR.ReadToEnd();
使用完StreamReader之后,不要忘记关闭它: sR.Close();
假如我们需要一行一行的读,将整个文本文件读完,下面看一个完整的例子:
StreamReader sR = File.OpenText(@"C:\temp\a.txt");
string nextLine;
while ((nextLine = sR.ReadLine()) != null)
{
Console.WriteLine(nextLine);
}
sR.Close();
写入txt文件
写文件和读文件一样,如果你要写入的内容不是很多,可以使用File.WriteAllText方法来一次将内容全部写如文件。如果你要将一个字符串的内容写入文件,可以用File.WriteAllText(FilePath) 或指定编码方式
File.WriteAllText(FilePath, Encoding)方法
string str1 = "Good Morning!";
File.WriteAllText(@"c:\temp\test\a.txt", str1);
// 也可以指定编码方式
File.WriteAllText(@"c:\temp\test\a.txt", str1, Encoding.ASCII);
如果你有一个字符串数组,你要把数组的每一个元素作为一行写入文件中,可以用File.WriteAllLines方法
string[] strs = { "Good Morning!","Good Afternoon!","Good Evening!"};
File.WriteAllLines(@"c:\temp\a.txt", strs);
// 也可以指定编码方式
File.WriteAllLines(@"c:\temp\a.txt", strs, Encoding.ASCII);
使用File.WriteAllText或File.WriteAllLines方法时,如果指定的文件路径不存在,会创建一个新文件;如果文件已经存在,则会覆盖原文件
当要写入的内容比较多时,同样也要使用流(Stream)的方式写入
.Net为我们封装了StreamWriter类,它以一种特定的编码向字节流中写入字符。StreamWriter类的方法同样也不是静态方法,所以要使用该类写入文件首先要实例化该类,实例化StreamWriter类同样有很多方式:
// 如果文件不存在,创建文件; 如果存在,覆盖文件
StreamWriter sW1 = new StreamWriter(@"c:\temp\a.txt");
// 也可以指定编码方式, true 追加是 Appendtext, false 为覆盖原文件
StreamWriter sW2 = new StreamWriter(@"c:\temp\a.txt", true, Encoding.UTF8);
// FileMode.CreateNew: 如果文件不存在,创建文件;如果文件已经存在,抛出异常
FileStream fS = new FileStream(@"C:\temp\a.txt", FileMode.CreateNew, FileAccess.Write, FileShare.Read);
StreamWriter sW3 = new StreamWriter(fS);
StreamWriter sW4 = new StreamWriter(fS, Encoding.UTF8);
// 如果文件不存在,创建文件; 如果存在,覆盖文件
FileInfo myFile = new FileInfo(@"C:\temp\a.txt");
StreamWriter sW5 = myFile.CreateText();
初始化完成后,可以用StreamWriter对象一次写入一行,一个字符,一个字符数组,甚至一个字符数组的一部分
// 写一个字符
sw.Write('a');
// 写一个字符数组
char[] charArray = new char[100];
sw.Write(charArray);
// 写一个字符数组的一部分(10~15)
sw.Write(charArray, 10, 15);
同样,StreamWriter对象使用完后,不要忘记关闭。sW.Close(); 最后来看一个完整的使用StreamWriter一次写入一行的例子:
FileInfo myFile = new FileInfo(@"C:\temp\a.txt");
StreamWriter sW = myFile.CreateText();
string[] strs = { "早上好", "下午好" ,"晚上好};
foreach (var s in strs)
{
sW.WriteLine(s);
}
sW.Close();
c# 操作文本文件的更多相关文章
- YTU 2925: 文件操作--文本文件读入
2925: 文件操作--文本文件读入 时间限制: 1 Sec 内存限制: 128 MB 提交: 38 解决: 16 题目描述 现有100名学生的姓名(name).学号(num).英语(Englis ...
- delphi操作文本文件的方法简介
delphi操作文本文件的方法简介减小字体 增大字体 作者佚名来源不详发布时间2008-5-31 10:31:16发布人xuedelphi1 文件类型和标准过程 Delphi同Object ...
- 使用Java操作文本文件的方法详解
使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...
- C#--I/O流操作文本文件之StreamWrite类和StreamReader类
使用I/O流操作文本文件时主要用到StreamWrite类和StreamRead类. 1.StreamWrite类 (1)StreamWrite类专门用来处理文本文件的类.能够方便地想文本文件里写入字 ...
- C++入门到理解之文件操作(文本文件的读写+二进制文件的读写)
原文地址http://www.javayihao.top/detail/168 一:概述 1.程序在运行中产生的数据都是临时数据,程序一旦运行结束会被释放,可以通过文件相关的操作将数据持久保存. 2. ...
- Java BufferedWriter与BufferedReader操作文本文件
/** * 采用字符流读取写入文本文件 */ public class FileUtil { /** * 写文件 * @param fileName * @param content */ publi ...
- linux操作文本文件
打开文件 #vi 文件名 保存退出 从编辑模式退到命令行模式,按esc键 保存退出命令 #:wq 强制退出,不保存 #:q!
- python文件(概念、基本操作、常用操作、文本文件的编码方式)
文件 目标 文件的概念 文件的基本操作 文件/文件夹的常用操作 文本文件的编码方式 01. 文件的概念 1.1 文件的概念和作用 计算机的 文件,就是存储在某种 长期储存设备 上的一段 数据 长期存储 ...
- 使用python操作json文本文件
使用python读写文本文件内容时,我们知道如果文本文件里的内容无规律,那么修改起来比较麻烦.但是如果文本文件存储是有规律的,比如JSON格式,在利用python内置的函数把JSON格式的数据转成py ...
随机推荐
- Unity3D代码动态修改材质球的颜色
代码动态修改材质球的颜色: gameObject.GetComponent<Renderer>().material.color=Color.red;//当材质球的Shader为标准时,可 ...
- ZooKeeper分布式过程协同技术详解2——了解ZooKeeper
这个服务如何实现这些协作方面的原语? ZooKeeper基础
- Linux 解决 firefox 中文页面乱码问题
1.由于 firefox 默认是允许网页自己选择字体,在 Linux 上便会出现部分网站的乱码情况.因此可以取消允许页面自己选择字体这个选项便能解决部分乱码情况.
- HDU 5985 Lucky Coins(概率)
http://acm.split.hdu.edu.cn/showproblem.php?pid=5985 题意:有多种类型的硬币,每种类型的硬币都有一定的数量,现在每次抛硬币,除去朝下的硬币,知道最后 ...
- 【Selenium2】【selenium之 定位以及切换frame(iframe)】
参考:http://blog.csdn.net/huilan_same/article/details/52200586 总有人看不明白,以防万一,先在开头大写加粗说明一下: frameset不用切, ...
- 获取IP及判断IP是否在区间
/// <summary> /// 获取客户端IP /// </summary> /// <returns></returns> public stat ...
- _pvp_killed_loot
该表控制玩家被击杀时掉落物品,包括角色身上装备,背包物品,银行物品 comment 备注 entry 掉落的物品ID lootCount 掉落的物品数量 chance 掉落的几率,例如50,则50%几 ...
- 【BZOJ】3139: [Hnoi2013]比赛
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3139 可以发现,答案之和得分的序列有关,而且和序列中每个元素的顺序无关.考虑HASH所有的 ...
- 算法时间复杂度的表示法O(n²)、O(n)、O(1)、O(nlogn)等是什么意思?
Java中 Set 和 List 集合 的contains()方法,检查数组链表中是否包含某元素检查数组链表中是否包含某元素,使用 Set 而不使用 List 的原因是效率问题, 前者的 set ...
- 整数m去掉n位后剩下最大(小)值
题目描述 给定一个正整数(<=255位),从中删去n位后,使得剩下的数字组成的新数最小(大): 思路:从左到右开始扫描,两两比较,如果是前一位比后一位大,则删去前大的一位,直到删完所有的n位: ...