C# 如何在Program.cs中调用自定义类封装的文本文件读取功能
解决方案
第一步:重构各自定义类的读取逻辑
你当前的books类里直接写了Main方法,这是C#控制台程序的入口方法,一个项目只能保留一个入口,所以你需要把每个类中的文件读取逻辑抽离为独立的公共方法,同时支持外部传入文件路径,不要硬编码路径在类内部。
重构后的books类参考代码:
using System; using System.IO; namespace ConsoleApplication4 { class books { // 封装读取books文件的公共静态方法,支持传入文件路径 public static void ReadBooksFile(string filePath) { string line; try { // 用using语句自动释放StreamReader资源,不需要手动Close using (StreamReader sr = new StreamReader(filePath)) { line = sr.ReadLine(); while (line != null) { Console.WriteLine($"[books文件内容] {line}"); line = sr.ReadLine(); } } } catch (Exception e) { Console.WriteLine($"读取books文件出错:{e.Message}"); } } } }
剩下的id、teachers、courses三个类也按照相同的规则修改,各自封装对应的公共读取方法即可,比如id类写ReadIdFile(string filePath)、teachers类写ReadTeachersFile(string filePath)、courses类写ReadCoursesFile(string filePath)。
第二步:在Program.cs中调用各方法
你只需要在Program.cs的入口Main方法中,先向用户收集四个文件对应的路径,再依次调用各个类的读取方法即可,示例代码如下:
using System; using System.IO; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { try { // 依次向用户获取四个文件的路径 Console.WriteLine("请输入books文件的完整路径:"); string booksPath = Console.ReadLine().Trim(); if(!File.Exists(booksPath)) { Console.WriteLine("books文件不存在,请检查路径"); return; } Console.WriteLine("请输入id文件的完整路径:"); string idPath = Console.ReadLine().Trim(); if(!File.Exists(idPath)) { Console.WriteLine("id文件不存在,请检查路径"); return; } Console.WriteLine("请输入teachers文件的完整路径:"); string teachersPath = Console.ReadLine().Trim(); if(!File.Exists(teachersPath)) { Console.WriteLine("teachers文件不存在,请检查路径"); return; } Console.WriteLine("请输入courses文件的完整路径:"); string coursesPath = Console.ReadLine().Trim(); if(!File.Exists(coursesPath)) { Console.WriteLine("courses文件不存在,请检查路径"); return; } // 调用各封装好的读取方法 books.ReadBooksFile(booksPath); id.ReadIdFile(idPath); teachers.ReadTeachersFile(teachersPath); courses.ReadCoursesFile(coursesPath); } catch (Exception ex) { Console.WriteLine($"程序运行出错:{ex.Message}"); } Console.WriteLine("所有文件读取完成,按任意键退出"); Console.ReadKey(); } } }
可选优化点
- 如果每个类的读取逻辑差异很小,可以抽取公共父类或者通用读取方法减少重复代码
- 可以把读取到的每行内容解析为对应类的实例存储,方便后续业务逻辑调用
内容的提问来源于stack exchange,提问作者safdasfasfasfa
相关产品推荐
相关产品推荐

