zoukankan      html  css  js  c++  java
  • 操作文件方法简单总结(File,Directory,StreamReader,StreamWrite )

      对于文件夹,文档的操作一直处于一知半解状态,有时间闲下来了,好好练习了一把,对文档,文件的操作有了一个基本的认知,

    若要深入了解,还是得通过实际的项目才行了,好了废话不多说,上酸菜!!

    注:红色标题为园友@李大菜鸟与@flyher补充的方法再次感谢

    一 基本介绍

        操作文档,文件夹,需要用到的类

        1 Directory(静态类) :     用于创建、移动和删除等操作通过目录和子目录

          DirectoryInfo(非静态):

        2 File(静态类)  :提供用于创建、复制、删除、移动和打开文件的静态类,并协助创建 FileStream 对象   

          FileInfo(非静态)

        3 StreamReader实现一个 TextReader,使其以一种特定的编码从字节流中读取字符

        StreamWriter:实现一个 TextWriter,使其以一种特定的编码向流中写入字符

    二   文件夹操作

      操作文件夹用Directory 或者 DirectoryInfo

      2.1 创建文件夹

     
     1        string path = @"F:TestFile";
     2       //创建文件夹
     3         public void CreatFolder(string path)
     4         {
     5             if (Directory.Exists(path))
     6             {
     7                 Directory.Delete(path);
     8             }
     9            Directory.CreateDirectory(path);
    10             
    11         }

         2.2 删除文件夹

     1          string path = @"F:TestFile";
     2 
     3         //删除文件夹
     4         public void DeleteFolder(string path)
     5         {
     6             //先删除文件夹中所有文件
     7             DirectoryInfo directoryInfo = new DirectoryInfo(path);
     8             foreach (var directory in directoryInfo.GetFiles())
     9             {
    10                 File.Delete(directory.FullName);
    11             }
    12             //文件夹必须为空
    13             if (Directory.Exists(path))
    14             {
    15                 Directory.Delete(path);
    16             }
    17         }

         2.3 移动文件夹

                 string path = @"F:TestFile";
                string newPath = @"F:NewFile";
           //移动文件夹
            public void MoveFolder(string path, string newPath)
            {
                if (Directory.Exists(path))
                {
                    //移动包括文件夹在内的所有文件
                    Directory.Move(path,newPath);
                }
            }

        2.4 获取文件夹下所有文件名

           string path = @"F:TestFile";
    
            //获取文件夹下所有文件名
            public void GetFolderAllFiles(string path)
            {
                DirectoryInfo directory = new DirectoryInfo(path);
                var files = directory.GetFiles();
                foreach (var file in files)
                {
                    Console.WriteLine(file.Name);
                    Console.WriteLine(file.FullName);//带文件路径全名
                }
            }
     

         2.5  文件夹重命名

      其实与移动文件夹方法是一样的,.net并没有提供重命名的方法,而是用新路径替换原路径以达到重命名的交果

            string name = @"F:TestFile";
            string newName = @"F:NewFile";
            //文件夹重命名
            public void Rename(string name ,string newName)
            {
                if (Directory.Exists(name))
                {
                    File.Move(name,newName);
                }
            }

        2.6 获取文件夹下所有文件夹名

            string path = @"F:TestFile";
            //获取路径下所有文件夹
            public void GetAllFolder(string path)
            {
                DirectoryInfo directory = new DirectoryInfo(path);
                DirectoryInfo[] allFolder = directory.GetDirectories();//返回当前目录的子目录(文件夹)
                foreach (var folder in allFolder)
                {
                    Console.WriteLine(folder.Name);
                    Console.WriteLine(folder.FullName);//带全路径的名称
                    //还可以再遍历子文件夹里的文件,或文件夹(最好用递归的方式)
                    folder.GetDirectories();
                }
            }    

        2.7 处理路径得到文件名和文件后缀

           string path = @"F:TestFile";
           //处理路径得到文件名和文件后缀,
            public void FormatFile(string path)
            {
                DirectoryInfo directory = new  DirectoryInfo(path);
                FileInfo[] files = directory.GetFiles();
                foreach (var file in files)
                {
                    string name = Path.GetFileNameWithoutExtension(file.Name);//取文件名
                    string extension = Path.GetExtension(file.Name);//取后缀名
                    Console.WriteLine("文件名:{0} 后缀名:{1}",name,extension);
                }
            }

       2.8 判断路径是文件或者文件夹(无效路径返回0)

            string path = @"F:TestFile";
            //判断路径是文件或者文件夹(无效路径返回0)
            public void IsFileOrFolder(string path)
            {
                DirectoryInfo directory = new DirectoryInfo(path);
                if (directory.Exists)//指定的目录是否存在
                    Console.WriteLine("Folder");
                else if (File.Exists(path))//指定的文件是否存在
                    Console.WriteLine("File");
                else
                    Console.WriteLine("0");
            }

    三 文档操作(txt)

      需要以下几个类:Directory 或者DirectoryInfo ,File 或者 FileInfo

      3.1 创建文档

            string path = @"F:TestFile	est.txt";
            //创建文档
            public void CreateFile(string path)
            {
                //文件路径用Directory判断是否存在
                if (Directory.Exists(path))
                {
                    //先删除存在的文件 
                    if (File.Exists(path))
                    {
                        File.Delete(path);
                    }
                    File.Create(path);
                }
            }

       3.2 复制文档

          string path = @"E:TestFile	est.txt";
          string newPath = @"E:Test2File
    ewTest.txt";
          //复制文档
            public void CopyFile(string sourcePath, string destPath)
            {
                //只能针对同一卷轴(盘)下的文件
                //destPath 为要复制的新地址,(destPath指定的文件名必须是未创建的,执行Copy方法时才会创建该文件)
                if (File.Exists(sourcePath))
                {
                    File.Copy(sourcePath, destPath);
                }
            }

      3.3  移动文档

           string path = @"E:TestFile	est.txt";
           string newPath = @"E:Test2File
    ewTest.txt";
           //移动文档
            public void MoveFile(string SourcePath, string destPath)
            {
                //只能针对同一卷轴(盘)下的文件
                //destPath 为要移动的新地址(destPath指定的文件名必须是未创建的,执行Move方法时会将Source文件移动到新地址可以重新命名)
                if (File.Exists(SourcePath))
                {
                    File.Move(SourcePath, destPath);
                }
            }
     

      3.4  删除文档

            string path = @"E:TestFile	est.txt";
           //删除文档
            public void DeleteFile(string path)
            {
                if (File.Exists(path))
                {
                    File.Delete(path);
                }
            }

    四 文档读写操作(文档流操作) 对 第三点  的扩充

         需要以下类:FileStream 此类继承了Stream 类并重写了大部分方法,并提供多个带参构造函数,注意:要读取的目标流不是保持恒定的,而是每读一次就会相应的减少,在练习时

    没注意,纠结了很久

       4.1 写入字符

            string path = @"E:TestFile	est.txt";
            //往以有文档中写入字符
            public void CreateText(string path)
            {
                StreamWriter writer=File.CreateText(path);
                //直接写入字符的write方法,每次写入都会覆盖之前的内容
                writer.Write("你好!");
                //把缓存流的数据写入到基础流
                writer.Flush();
                //关闭StreamWriter对象及基础流
                writer.Close();
            }

      4.2 以流的形式写入文档

    //将一个文件内的数据,以流的方式读取,然后以流的形式写入到另一个文件中
            public void ReadAndWriteFile()
            {
                string readPath = @"E:TestFileReadStream.txt";
                string writePath = @"E:TestFileWriteStream.txt";
    
                //Read
                //打开现有文件以进行读取
                FileStream rs = File.OpenRead(readPath);
                byte[] buffer = new byte[rs.Length];
                rs.Read(buffer, 0, buffer.Length);  //将文件内容读到字节流中
                rs.Close();
                //Write
                //打开现有文件以进行写入
                FileStream stream = File.OpenWrite(writePath);
                stream.Write(buffer, 0, buffer.Length);
                stream.Flush();
                stream.Close();
    
            }

       4.3 以流的形式追加到文档

            //将一个文件内的数据,以流的方式读取,然后以流的形式写入到另一个文件中(追加内容)
            public void ReadAndWriteNewFile()
            {
                string readPath = @"E:TestFileReadStream.txt";
                string writePath = @"E:TestFileWriteStream.txt";
                //Read
                FileStream rd = File.Open(readPath,FileMode.Open);
                byte[] buffer = new byte[rd.Length];
                rd.Read(buffer, 0, buffer.Length);
                rd.Close();
    
                //Write
                FileStream wt = File.Open(writePath,FileMode.Append);//设为追加到原文件中
                wt.Write(buffer,0,buffer.Length);
                wt.Flush();
                wt.Close();
            }

       4.4 读取目标文档指定的一行数据

            string paths = @"F:TestFileReadStream.txt";
            int readNum = 3;
            //读取目标文本指定的某一行数据
            public void ReadoneLine(string path,int readNum)
            {
                //可以循环读每一行,然后到Add到集合中,再到集合中做处理
                StreamReader reader = new StreamReader(path,Encoding.Default);
                var streamList = new List<string>();
                int count=0;
                string lineText = string.Empty;
    
                while ((lineText = reader.ReadLine()) != null)//对于流的读取每ReadLine一次流中就少一行,所直接在While用读到的流做判断,避免二次读
                {
                    streamList.Add(lineText);
                }
    
                foreach (var item in streamList)
                {
                    if (count == readNum - 1)
                    {
                        Console.WriteLine(item);
                    }
                    count++;
                }
                
            }

    五 读写流操作文档

    需要以下几个类:StreamReader StreamWriter

      5.1 字符串读取写操作

            //读取文档并写入到另一文档中(用字符串写入的方法)
            public void ReadFile() 
            {
                string readPath = @"E:TestFileReadStream.txt";
                string writePath = @"E:TestFileWriteStream.txt";
               
               using (StreamReader reader = new StreamReader(readPath,Encoding.Default)) //用默认的编码格式(必须要转格式否则乱码)
               {
    
                   var rd = reader.ReadToEnd();
                   
                   StreamWriter writer = new StreamWriter(writePath,true,Encoding.UTF8);//需要转成UTF-8的格式(可转可不转格式)
                   writer.Write(rd);
                   writer.Flush();
                   writer.Close();
    
               }
            }

      5.2 字符流读写操作

            //用字符流的方式读写文档
            public void ReadWriteByByte()
            {
    
                string readPath = @"F:TestFileReadStream.txt";
                string writePath = @"F:TestFileWriteStream.txt";
                using (StreamReader reader = new StreamReader(readPath,Encoding.Default))//需要指定编码,否则读到的为乱码
                {
                    #region 错误方法
                    //Read  注意:文本中的字符只能被读取一次,第二次时读取不到了
                    //var readStr =reader.ReadToEnd();//第一次读取
                    //char[] buffer = new char[readStr.Length];
                    //reader.Read(buffer, 0, buffer.Length);//第二次读取时,读不到值
                    #endregion
                    //Read 
                    char[] buffer = new char[10000];
                    reader.Read(buffer, 0, buffer.Length);
                    //Write
                    StreamWriter writer = new StreamWriter(writePath,true,Encoding.UTF8);
                    writer.Write(buffer, 0, buffer.Length);
                    writer.Flush();
                    writer.Close();
                }
  • 相关阅读:
    JDBC的PreparedStatement是什么?
    Jquery的基本使用方式
    ArrayList,LinkedList,Vector的区别
    数据库连接池的原理。为什么要使用连接池
    .java.util.Date和java.sql.Date有什么区别?
    JDBC的PreparedStatement是什么?
    .Spring Boot 有哪些优点?
    Redis中的常用命令哪些?
    【mybatis-plus】分页、逻辑删除
    MySQL全面瓦解15:视图
  • 原文地址:https://www.cnblogs.com/jameslif/p/3342931.html
Copyright © 2011-2022 走看看