IO流的基础

来源:互联网 发布:交大 汉芯 知乎 编辑:程序博客网 时间:2024/06/05 08:12

                  IO流呢,与其他语言相比,Java的IO功能显得复杂。在其他语言中,许多IO功能(比如读取文件),是被封装好的,可以用一两行程序实现。在Java中,程序员往往需要多个层次的装饰(decoration),才能实现文件读取。

       相对的复杂性带来的好处是IO的灵活性。在Java中,程序员可以控制IO的整个流程,从而设计出最好的IO方式.


IO流:用在设备和设备之间的数据传输

          IO流分为: 1)按流的方向分类 2)按数据类型分类

              1)  输入流:用来读取数据的

                           字节输入流

                           字节输出流

                  输出流:用来写出数据的

                            字节输出流

                            字符输出流

               2)  字节流:

                           字节输入流(读数据) :InputStream

                           字节输出流(写数据) :OutputStream

                    字符流:

                            字符输入流:Reader 

                            字符输出流:Writer



输出流:OutputStream

    输出流的开发步骤:

       1)创建文件输出流对象

       2)写数据

       3)释放资源------>也就是关闭流,为什么关闭流?---->是为了让当前的流对象变成垃圾,能及时的被垃圾回收期回收掉 -------->如果已经关闭了,不能再写数据了,否则异常

    写数据:应用OutputStream,OutputStream能实例化吗?  

                 由于该类是抽象类,所以不能实例化

    抽象类                   具体类

 InputStream             XXXInputStream

  OutputStream           XXXOutputStream

  Reader                 XXXReader

  Writer                 XXXWriter

   


输出流写数据的方法:

    public void  write(int  b)  ---->将指定的字节写入到输出流对象中

    public void  write(byte[ ] b) ---->写入字节数组

    public void  write(byte[ ] b,int  off,int len) --->写入字节数组的一部分


public class FileOutputStreamDemo{

     public Static void  main(String [ ] args) throws IOException {

               //创建文件输出流对象   

               FileOutputStream  fos =new FileOutputStream("fos.txt");


              //写数据

              //将制定的字节写入到输出流对象中

              fos.write(97);

              fos.write(55);

              fos.write(53);

          

               //写入字节数组

              //定义一个字节数组

              byte [ ] bys ={97,98,99,100,101};

               fos.write(bys);


             // 写入字节数组的一部分

             fos.write(bys,1,3);


                //释放资源

                fos.close();

}

}


其他的构造方法:

     public FileOutputStream(File file,boolean append) --->追加写入:append指定为true,则表示将字节写入到文件的末尾

 

问题:为什么写入数据没有换行呢?

         现在只是写入数据,并没有个当前文本文件写入换行符号,而且换行符号针对不同的系统操作

           Windows : \r\n

           Linux:  \n

           mac:  \r

    目前Windows的操作系统,IO流要换行--->必须写入换行符号 newLine();

 

递归

      递归算法是一种直接或间接地调用自身的算法。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
           方法嵌套不属于递归!

Math.max(Math.max(a,b),c);
  
         public  void  show(int n){
            if(n< 0){
               System.exit(0);
             }
             System.out.println(n);
             show(--n);
        }

         
         
       
递归条件:
 
         1)必须有一个递归的方法存在
          2)必须有出口条件
          3)必须有某一种规律
 
        
                           注意:构造方法没有递归
  
    
            

      举例:99乘法表
   普通的实现99乘法表:
  public  class Test{
       public static void main(String [ ]  args){
        for(int x =1;x<=9;x++){
                for(int i=1;i <=x;i++){
              System.out.println(i+"---"+x+"---"+(x*i)+"----");
}
   System.out.println();
         }
     }
}
 

//使用递归方式实现
 public  class DiGui{
    public  static  void  main(String [ ]  args){
             m(9);
 }
 
     public static  void m(int  i){
    if(i==1){
          System.out.println("1*1=1");
}else{
          m(i-1);
     for(int j =1;j<=i;j++){
                System.out.println( j + " * " + i + " = " + j * i + "  ");
}
   System.ot.println();
}


}
}

总结

IO流FileOutputStream方法
递归:   for循环和递归实现比较呢------>使用for循环就执行一个方法,比较节省内存;而递归使用时候会影响到内存,非常消耗内存.
原创粉丝点击