第一个文件读写的例子
2018-06-18 04:43:28来源:未知 阅读 ()
首先,我们打开VS2013,新建一个窗体应用程序如图:
需求:我们要实现这样的功能,点击文本框,然后弹出文件对话框,让我们选择文件,然后点击确定之后,读取指定文件的内容,随后我们将读取到的数据,写入文本中。
文件读写原理:前面,我们在学习文件读写原理的时候,已经知道,硬盘的数据和内存之间的关系,在磁盘中,我们将数据读取成二进制的数据,存放到byte数组中,然后在内存中,我们需要将byte数组转化为原始的文本数据。
然后看下截图的代码:
我们通过OpenFileDialog类,来创建一个对话框。通过其实例对象的ShowDialog方法,来显示对话框,这个方法的返回值是DialogResult类型。图中的代码意思是:当我们打开对话框,点击确定之后,显示所选的文件的全路径。
代码这样写,通过filenames也可以达到一样的效果:看图:
现在我们已经达到了这样的效果,显示了文件的路径,然后现在我们要点击读取按钮,把所选的文件文件,数据读取到另一个文件中。
我们测试的文本是:
可以看到这个文本是293个字节:(在代码中,我们创建数组的时候,怎么知道创建的多大的呢??)
这里有个技巧:
先读取传过来的文本的路径,在文件流中的length属性就标志了,我们需要读取的文件的大小。我们就可以知道要创建的数组的大小了。
所有的代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace FileReadDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void txtPath_Click(object sender, EventArgs e) { //文件打开对话框 OpenFileDialog openDialog = new OpenFileDialog(); //显示对话框的方法。返回值是DialogResult类型 //openDialog.ShowDialog(); if (openDialog.ShowDialog() == DialogResult.OK) { txtPath.Text = openDialog.FileName; //获取全路径 } } private void btnRead_Click(object sender, EventArgs e) { //1.读取文件的话,我们需要使用文件的读写类,这里使用FileStream类,引用命令空间System.IO. //读文件,模式选择Open FileStream fileRead = new FileStream(txtPath.Text, FileMode.Open); //创建byte类型的数组(注意这个时候,有个疑问了,数组大小应该创建多大的呢?) byte[] fileByte = new byte[fileRead.Length]; //2.将文件中所指定的数据读取到数组中 fileRead.Read(fileByte, 0, fileByte.Length); //现在已经按照文件读写原理,把磁盘的数据转为二进制,存到数组了,现在需要写入到文件中 //但FileStream类只能做一件事,要么读文件,要么写文件。解决方法,我们可以再创建一个FileStream //备注;这里先不管,文件流的释放的问题了。测试阶段,后面会优化。 //这里为测试方便,就选择把读取的文件,读到D盘aaa.txt文件中。 //写文件,模式选择Create FileStream fileWrite = new FileStream(@"D:\aaa.txt", FileMode.Create); //然后就是写入文件中了 fileWrite.Write(fileByte, 0, fileByte.Length); //测试代码,完毕之后,显示OK MessageBox.Show("OK"); } } }
注意;这个例子需要执行成功之后,需要将程序停止,才可以看到文件文件中读取到的数据,FileStream的缓存作用。。
下面来优化一下代码:
上面的代码,只能执行一次,因为文件流没有被释放:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace FileReadDemo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void txtPath_Click(object sender, EventArgs e) { //文件打开对话框 OpenFileDialog openDialog = new OpenFileDialog(); //显示对话框的方法。返回值是DialogResult类型 //openDialog.ShowDialog(); if (openDialog.ShowDialog() == DialogResult.OK) { txtPath.Text = openDialog.FileName; //获取全路径 } } private void btnRead_Click(object sender, EventArgs e) { //1.读取文件的话,我们需要使用文件的读写类,这里使用FileStream类,引用命令空间System.IO. //读文件,模式选择Open using (FileStream fileRead = new FileStream(txtPath.Text, FileMode.Open)) { //创建byte类型的数组(注意这个时候,有个疑问了,数组大小应该创建多大的呢?) byte[] fileByte = new byte[fileRead.Length]; //2.将文件中所指定的数据读取到数组中 fileRead.Read(fileByte, 0, fileByte.Length); //现在已经按照文件读写原理,把磁盘的数据转为二进制,存到数组了,现在需要写入到文件中 //但FileStream类只能做一件事,要么读文件,要么写文件。解决方法,我们可以再创建一个FileStream //备注;这里先不管,文件流的释放的问题了。测试阶段,后面会优化。 //这里为测试方便,就选择把读取的文件,读到D盘aaa.txt文件中。 //写文件,模式选择Create using (FileStream fileWrite = new FileStream(@"D:\aaa.txt", FileMode.Create)) { //然后就是写入文件中了 fileWrite.Write(fileByte, 0, fileByte.Length); //测试代码,完毕之后,显示OK MessageBox.Show("OK"); } } } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 项目经理说这种代码必须重构,我同意了,这代码是写的是有多 2020-06-11
- 来看看阿里架构师Java 代码打日志姿势!你也是这样写的吗 2020-06-08
- Spring Boot 实现配置文件加解密原理 2020-06-08
- Java跨平台原理(字节码文件、虚拟机) 以及Java安全性 2020-06-07
- 【Java-jxl插件】【Excel文件读写报错】jxl.read.biff.BiffE 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash