C#使用StreamReader类读取文件文件

输入流用于从外部源读取数据。在很多情况下,数据源是磁盘上的文件或网络的某些位置。任何可以发送数据的位置都可以是数据源,比如网络应用程序、Web服务,甚至是控制台。

用来从文件中读取数据的类是StreamReader。同StreamWriter一样,这是一个通用类,可以用于任何流。

StreamReader对象的创建方式非常类似于StreamWriter对象。创建它的最常见方式是使用前面创建的FileStream对象:

FileStream fs = new FileStream("test.txt",FileMode.Open);
StreamReader sr = new StreamReader(fs);

同StreamWriter一样,StreamReader类可以直接在包含具体文件路径的字符串中创建:

StreamReader sr = new StreamReader("test.txt");

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
class Program
{
static void Main(string[]args)
{
   try
   {
    FileStream aFile = new FileStream(@"c:\祝福.txt", FileMode.Open);
    StreamReader sr = new StreamReader(aFile);
    string strLine = sr.ReadLine();
    while(strLine != null)
    {
     Console.WriteLine(strLine);
     strLine = sr.ReadLine();
    }
    sr.Close();
   }
   catch (IOException ex)
   {
    Console.WriteLine(ex.Message);
    Console.ReadLine();
    return ;
   }
Console.ReadKey();

}
}

FileStream构造函数找不到该文件,就会抛出异常。

这个应用程序非常类似于前面的应用程序。其明显的区别就是,它是在读取数据,而不是写入数据。同前面一样,必须导入System.IO命名空间,才能访问需要的类。

使用ReadLine()方法从文件中读取文本。这个方法读取回车符之前的文本,并以字符串的形式返回结果文本。当到达文件尾时,该方法就返回空值,通过这种方法可以测试文件是否已到达了尾部。注意使用while循环时,在执行循环体的代码之前进行检查,确保读取的行不为空,这样就只显示文件的有效内容:

strLine = sr.ReadLine();
while(strLine != null)
{
   Console.WriteLine(strLine);
   strLine = sr.ReadLine();
}

ReadLine()方法不是在文件中访问数据的惟一方法。StreamReader类还有许多读取数据的方法。

读取数据最简单的方法是Read()。此方法将流的下一个字符作为正整数值返回,如果到达了流的结尾处,则返回–1。使用Convert实用类可以把这个值转换为字符。在上面的示例中,程序的主体可以按如下方式编写:

StreamReader sr = new StreamReader(aFile);
int nChar;
nChar = sr.Read();
while(nChar != -1)
{
   Console.Write(Convert.ToChar(nChar));
   nChar = sr.Read();
}
sr.Close();

对于小型文件,可以使用一个非常方便的方法,即ReadToEnd()方法。此方法读取整个文件,并将其作为字符串返回。在此,前面的应用程序可以简化为:

StreamReader sr = new StreamReader(aFile);
strLine = sr.ReadToEnd();
Console.WriteLine(strLine);
sr.Close();

这似乎非常容易和方便,但必须小心。将所有的数据读取到字符串对象中,会迫使文件中的数据放到内存中。应根据数据文件的大小禁止这样处理。如果数据文件非常大,最好将数据留在文件中,并使用StreamReader的方法访问文件。

转载于:https://www.cnblogs.com/tanding/archive/2012/07/02/2572691.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三种不使用中间参数,交换两个参数的值的方法

第一种:要求必须是整数 int i 50,j 60; i i^j; j i^j; i i^j;第二种:可以不是整数类型 i i j; j i - j; i i - j;第三种:很巧妙 i i j - (j i);

双边滤波

双边滤波 高斯滤波是最常用的图像去噪方法之一,它能很好地滤除掉图像中随机出现的高斯噪声,但是在之前的博客中提到过,高斯滤波是一种低通滤波(有兴趣的点击这里,查看之前的博客),它在滤除图像中…

java代码做repeat次运算,从键盘输入几个数,比最值

总结:今天这个题目有点灵活,因为它不但要求输出结果,还要进行几次相同的输入,不退出循环 import java.util.Scanner;//从键盘一次输入更多的数,然后把每一次的数进行---可比较,或输出 public class ertyw {…

与C语言有关的面试题目

1. 用预处理指令#define 声明一个常数&#xff0c;用以表明1年中有多少秒&#xff08;忽略闰年问题&#xff09; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2. 写一个“标准”宏MIN&#xff0c;这个宏输入两个参数并返回较小的一个。 #define MIN(A,B) ((A) < (B) …

用SQL语句更改数据库名,表名,列名

参考SQL Server联机丛书的 sp_renamedb与sp_rename一、更改数据库名sp_renamedb更改数据库的名称。语法sp_renamedb [ dbname ] old_name ,[ newname ] new_name 参数[ dbname ] old_name 是数据库的当前名称。old_name 为 sysname 类型&#xff0c;无默认值…

将区块链哈希转化为文字标题?IPSE哈希技术Hashlink解释

前言 在人类历史中&#xff0c;有多次的转化改变了信息文明走向。第一个是人类语言的诞生。将人类从抽象的声音识别交流转化为具体的文字交流。第二个是二进制的广泛使用。二进制是电子信息技术的巨大进步&#xff0c;让机器用0和1就能处理各类信息&#xff0c;二进制成就了今天…

Gabor滤波器原理

一、什么是Gabor函数&#xff08;以下内容含部分翻译自维基百科&#xff09; 在图像处理中&#xff0c;Gabor函数是一个用于边缘提取的线性滤波器。Gabor滤波器的频率和方向表达同人类视觉系统类似。研究发现&#xff0c;Gabor滤波器十分适合纹理表达和分离。在空间域中&#x…

Linux中的MAN命令

学习Linux的同学&#xff0c;都会使用man来查阅一些命令的帮助信息&#xff0c;常见的使用方法就是“man 命令名称”这样简单的格式。本文就对man命令简要介绍一下。 l man命令的章节 man就是manual的缩写&#xff0c;用来查看系统中自带的各种参考手册&#xff0c;但是手册页分…

java程序调用Oracle 存储过程 获取返回值(无返回,非结果集,结果集)

oracle中procedure是不能有返回值的&#xff0c;要想返回值&#xff0c;就得有输出参数&#xff0c;同样要想返回记录集&#xff0c;可以把游标类型作为输出参数。 下面是详细情况说明&#xff1a; 一&#xff1a;无返回值的存储过程调用 存储过程&#xff1a; create or repl…

jeecms附件标签用法

[#if content.attachments?size gt 0] [#list content.attachments as attach] <a id"attach${attach_index}">附件下载</a> [/#list] [/#if] 转载于:https://www.cnblogs.com/Jeely/p/11195310.html

递归的理解

其实就解决两个问题 1、当前应该怎么做&#xff1b; 2、下一步应该怎么做&#xff1b; 见下面的一个短小的例子&#xff1a;倒着输出刚才输入的整数。 #include<stdio.h>void fun(int);int main(void) {int a 0;printf("value of a \n");scanf("%d&quo…

点云配准

https://www.cnblogs.com/endlesscoding/p/10033527.html https://www.cnblogs.com/yhlx125/p/4955337.html https://blog.csdn.net/qq_41581769/article/details/89460153

支持多并发的单例有哪几种写法

一.什么是单例以及单例的使用场景就不多说了&#xff0c;不清楚的可以看我上篇文章或者自行查找 二.单例和多并发之间的规则 单例就是只能创建一个实例对象&#xff0c;而多并发情况下如果不处理一下单例的写法很难保证只创建一个实例对象&#xff0c;所以后面会出问题 处理的思…

兼容各种浏览器的自动左右滚动兼左右点击滚动代码

直接切入正题 红色表示要统一&#xff08;所有的id&#xff09; 演示地址&#xff1a;http://www.er-china.com/index.php?mcontent&cindex&alists&catid772 本框架为phpcms&#xff0c;大家可根据自己的框架更改循环。 <div class"rollBox"> <…

同步数据库仅在Worker内,目前只有Chrome6支持

Database.html <!DOCTYPE HTML><html> <head> <meta charset"UTF-8"> <title></title> </head> <body> <script> if(window.Worker){ var workernew Worker(worker.js); //向worker发送消息 wo…

全局曝光和卷帘曝光的区别

全局曝光和卷帘曝光是常见的相机曝光方式。一般来说&#xff0c;CCD相机是全局曝光&#xff0c;而CMOS相机则存在卷帘曝光。那么&#xff0c;这两种方式孰优孰劣呢&#xff1f;或者说&#xff0c;他们两者的差别在哪里呢&#xff1f;那么&#xff0c;先从两者的定义说起。 全局…

*p++、*(p++)、*++p、*(++p)的区别

1、*p 与 *(p)的区别 因为“”的优先级大于“*”&#xff0c;所以*p 相当于*(p)。 但是p表示先运算再&#xff0c;所以*p或者*(p)&#xff0c;其实等价于“先(*p)&#xff0c;然后再p”。 注意&#xff0c;“先(*p)&#xff0c;然后再p”不能表示成“ (*p)”&#xff0c;因为(*…

MySQL常用总结

创建数据库&#xff0c;指定编码utf8 create database wish charset utf8; 删除库 drop database wish; 使用库 use wish; 查看有什么表 show tables; 删除表 drop table wish; 清空表所有数据(主键从1开始) truncate stu; 显示表结构 desc wish; show create table wish; 设置…

Titanium 列表显示TableView

效果&#xff1a; Titanium中列表显示需要创建TableView var tableView Ti.UI.createTableView({style: Ti.UI.iPhone.TableViewCellSelectionStyle.NONE //TableView样式}); TableView的每一个行叫做TableViewRow 设置TableViewRow的hasChild为true便可显示这样的效果&#x…

Matlab的fspecial函数

函数原型 h fspecial(type) h fspecial(type&#xff0c;para) 根据函数原型对fspecial函数作个说明&#xff0c;fspecial是用来生成滤波器&#xff08;也叫算子&#xff09;的函数&#xff0c;使用type参数来指定滤波器的种类&#xff0c;使用para来对具体的滤波器种类添…