IOストリーム-一般的に使用されるストリームオブジェクト(5)

IOストリーム-一般的に使用されるストリームオブジェクト(5)

  1. ファイル文字ストリーム

    上記で紹介したファイルバイトストリームは、すべてのファイルを処理できます。テキストファイルを扱う場合は、文字単位で動作するファイル文字ストリームを使用することもできます

    • ファイル文字入力ストリーム

      import java.io.FileReader;
      
      public class FileReaderDemo {
              
              
          public static void main(String[] args) {
              
              
              FileReader frd=null;
              try {
              
              
                  //创建文件字符输入流对象
                  frd=new FileReader("d:/a.txt");
                  int temp=0;
                  while ((temp=frd.read())!=-1){
              
              //read()它跟字节流最大的区别就是,返回的是文本文件字符的Unicode的值,而字节流返回的就是字节数
                      System.out.println((char) temp);
                  }
              }catch (Exception e){
              
              
                  e.printStackTrace();
              }finally {
              
              
                  try {
              
              
                      if (frd!=null){
              
              
                          frd.close();
                      }
                  }catch (Exception e){
              
              
                      e.printStackTrace();
                  }
              }
          }
      }
      
    • ファイル文字出力ストリーム

      import java.io.FileWriter;
      
      public class FileWriterDemo {
              
              
          public static void main(String[] args) {
              
              
              FileWriter fw=null;
              FileWriter fw2=null;
              try {
              
              
                  //创建字符输出流对象
                  fw=new FileWriter("d:/sxt.txt");
                  fw.write("你好尚学堂\r\n");
                  fw.write("你好Oldlu\r\n");
                  fw.flush();
      
                  fw2=new FileWriter("d:/sxt.txt",true);//如果这里没有true,fw写入的数据就会被覆盖掉,而不是加在后面
                  fw2.write("何以解忧\r\n唯有尚学堂");
                  fw2.flush();
      
              }catch (Exception e){
              
              
                  e.printStackTrace();
              }finally {
              
              
                  try {
              
              
                      if (fw !=null){
              
              
                          fw.close();
                      }
                      if (fw2 !=null){
              
              
                          fw2.close();
                      }
      
                  }catch (Exception e){
              
              
                      e.printStackTrace();
                  }
              }
          }
      }
      
    • 文字ストリームを使用して、テキストファイルのコピー処理を実現します

      import java.io.FileReader;
      import java.io.FileWriter;
      
      public class FileCopyTools2 {
              
              
          public static void main(String[] args) {
              
              
              FileReader fr=null;
              FileWriter fw=null;
              try {
              
              
                  fr=new FileReader("d:/sxt.txt");
                  fw=new FileWriter("d:/xun.txt");
                  //加一个缓冲区,不再是byte[],因为是字符流数组,;所以用char[]
                  char[] buffer=new char[1024];//这个char[1024]的数组长度只能自己来定义,以2的整数幂,而不能用available预估大小的值
                  int temp=0;
                  while ((temp=fr.read(buffer))!=-1){
              
              
                      fw.write(buffer,0,temp);
                  }
                  fw.flush();
      
              }catch (Exception e){
              
              
                  e.printStackTrace();
              }finally {
              
              
                  try {
              
              //在文件字符流中,关闭流的顺序没有关系,谁先关闭都可以
                      if (fr!=null){
              
              
                          fr.close();
                      }
                      if (fw!=null){
              
              
                          fw.close();
                      }
      
                  }catch (Exception e){
              
              
                      e.printStackTrace();
                  }
              }
          }
      }
      
  2. 文字出力バッファストリーム

    • BufferedWriterは、文字出力ストリーム用のバッファオブジェクトです。文字出力バッファストリームでnewLine()使用できます。つまり、改行メソッドを使用して改行処理を実行できます。

      import java.io.BufferedWriter;
      import java.io.FileWriter;
      
      public class BufferedWriterDemo {
              
              
          public static void main(String[] args) {
              
              
              FileWriter fw=null;
              BufferedWriter bw=null;
              try {
              
              
                  fw=new FileWriter("d:/sxt2.txt");
                  //创建字符缓冲流对象
                  bw=new BufferedWriter(fw);
                  bw.write("你好尚学堂");
                  bw.write("你好Oldlu");
                  bw.newLine();//换行
                  bw.write("何以解忧");
                  bw.newLine();
                  bw.write("唯有尚学堂");
                  bw.flush();
              }catch (Exception e){
              
              
                  e.printStackTrace();
              }finally{
              
              
                  try {
              
              
                      //关闭流的顺序:肯定是处理先关闭,节点流后关闭
                      if (bw!=null){
              
              
                          bw.close();
                      }
                      if (fw!=null){
              
              
                          fw.close();
                      }
                  }catch (Exception e){
              
              
                      e.printStackTrace();
                  }
              }
          }
      }
      
  3. 文字バッファストリームを介してテキストファイルのコピーを実現します

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    
    public class FileCopyTools3 {
          
          
        public static void main(String[] args) {
          
          
                copyFile("d:/sxt2.txt","d:/22.txt");
        }
        /**
         * 基于字符缓冲流实现文件的拷贝
         */
        public static void copyFile(String src,String des){
          
          
            BufferedReader br=null;
            BufferedWriter bw=null;
            try {
          
          
                br=new BufferedReader(new FileReader(src));
                bw=new BufferedWriter(new FileWriter(des));
                String temp="";
                while ((temp=br.readLine())!=null){
          
          //readLine())!=null判断读一行是否为空
                    bw.write(temp);
                    bw.newLine();//他以行单位读出来的,我们写数据也要以行为单位,但是如果没有写换行,第二行的数据在第一行追加了
                }
                bw.flush();
    
            }catch (Exception e){
          
          
                e.printStackTrace();
            }finally {
          
          
                try {
          
          
                    //这里先关闭哪个流都可以
                    if (br!=null){
          
          
                        br.close();
                    }
                    if (bw!=null){
          
          
                        bw.close();
                    }
                }catch (Exception e){
          
          
                    e.printStackTrace();
                }
            }
        }
    }
    
  4. 文字バッファストリームを介してファイルの内容に行番号を追加します

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileReader;
    import java.io.FileWriter;
    
    public class LineNumberDemo {
          
          
        public static void main(String[] args) {
          
          
            BufferedReader br=null;
            BufferedWriter bw=null;
            try {
          
          
                br=new BufferedReader(new FileReader("d:/sxt2.txt"));
                bw=new BufferedWriter(new FileWriter("d:/sxt3.txt"));
                String temp="";
                int i=1;//序号生成的变量
                while ((temp=br.readLine())!=null){
          
          
                    bw.write(i+","+temp);
                    bw.newLine();
                    i++;
                }
                bw.flush();
            }catch (Exception  e){
          
          
                e.printStackTrace();
            }finally {
          
          
                try {
          
          
                    if (br!=null){
          
          
                        br.close();
                    }
                    if (bw!=null){
          
          
                        bw.close();
                    }
                }catch (Exception e){
          
          
                    e.printStackTrace();
                }
            }
        }
    }
    

おすすめ

転載: blog.csdn.net/Xun_independent/article/details/114851834