如何使用StreamWriter与StreamReader读写数组值?
使用StreamWriter和StreamReader读写char数组的解决方案
要实现用StreamWriter和StreamReader读写数组,需要解决两个核心问题:访问私有数组和流的读写逻辑实现,以下是修改后的完整代码和说明:
1. 调整Arrays类,提供数组访问权限
原Arrays类中的AlphabetValues是私有成员,需要添加公共属性让外部类可以访问:
using System; namespace writeReadArray { public class Arrays { private char[] AlphabetValues = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J' }; // 公共属性,对外暴露私有数组 public char[] GetAlphabetValues => AlphabetValues; } }
2. 完善Record类的读写方法
使用using语句自动管理流资源(无需手动调用Close()),同时实现数组的写入和读取逻辑:
using System; using System.Collections.Generic; using System.IO; namespace writeReadArray { public class Record { // 写入char数组到文件(每行一个字符) public void WriteFile(string filename, char[] arrayToWrite) { using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write)) using (StreamWriter sw = new StreamWriter(fs)) { foreach (char c in arrayToWrite) { sw.WriteLine(c); } } } // 从文件读取内容并还原为char数组 public char[] ReadFile(string filename) { List<char> resultList = new List<char>(); using (FileStream infile = new FileStream(filename, FileMode.Open, FileAccess.Read)) using (StreamReader reader = new StreamReader(infile)) { string line; // 逐行读取,取每行第一个字符(对应写入时的格式) while ((line = reader.ReadLine()) != null) { if (!string.IsNullOrWhiteSpace(line)) { resultList.Add(line[0]); } } } return resultList.ToArray(); } } }
3. 调用示例
在主程序中完成数组的写入和读取验证:
using System; namespace writeReadArray { class Program { static void Main(string[] args) { Arrays arrays = new Arrays(); Record record = new Record(); string filePath = "alphabet.txt"; // 写入数组到文件 record.WriteFile(filePath, arrays.GetAlphabetValues); // 从文件读取数组 char[] readArray = record.ReadFile(filePath); // 输出读取结果 Console.WriteLine("读取到的数组内容:"); foreach (char c in readArray) { Console.Write(c + " "); } } } }
关键说明
- 资源管理:
using语句会自动在代码块结束后释放流资源,避免手动关闭时可能出现的异常或资源泄漏。 - 读写格式匹配:写入时用
WriteLine()让每个字符占一行,读取时对应逐行读取并提取字符;如果需要更紧凑的格式(比如逗号分隔),可以修改写入逻辑为sw.Write($"{c},"),读取时按逗号分割字符串再转换为char数组。 - 访问权限:私有成员无法直接跨类访问,必须通过公共属性、方法等方式暴露。
内容的提问来源于stack exchange,提问作者gon
相关产品推荐
相关产品推荐

