>>>First:

    递归!

 1. 定义: 在函数自身内部,调用函数本身的方式,称为递归。

 2. 注意: 递归包括递进去、归出来两步。

     首先,依次执行【函数调自身语句】上半部分的代码,直到最里层;{ 递进去 }

        然后,再从最里层开始,依次执行【函数调自身语句】下半部分的代码。{ 归出来 }

 3. 下面用示意图来分析一下:  

    

   !!!递归必须通过合适的语句,及时的跳出,否则容易造成死循环。

 4. 用一个例子帮助你理解递归的用法:

        用递归实现一个数的阶乘

  首先,定义一个jiecheng类:

  方法一:

  方法二: 

  其次,在main方法中输出:

      

  运行验证:以5的阶乘为例输出结果

      

 

以上便是关于递归的基础知识,So easy,看到这想必就已经学会了!再来看一下今天下一个主角:

>>>Second:

    IO流

 1、I/O流分类:

    根据流的方向:输入流和输出流

    根据读取文字的大小:字节流和字符流

             (字节流按字节读取,读取中文时容易乱码;字符流按照字符读取,通常用于读取中文)

    根据读取的方式:节点流和缓存流

 2、读取文件内容:(3种方法 ↓↓↓)

    FileInputStream fis = new FileInputStream("F:/test.txt");

    StringBuffer sb = new StringBuffer();

  ① 按照字节,一个一个字节读取文件

    

  ② 将byte数组直接声明为输入流的长度,一次性读出所有文字

    

  ③ 一次性读取1024个字节

    

 3、写入新文件:

     // FileOutputStream fos = new FileOutputStream("F:/out.txt",true);

    如果第二个参数省略,或传入false,则表示每次写入时将原文件清空,从文件头部开始写入;

    如果第二个参数传入true,则表示不清空原文件,在文件末尾处添加新内容。

    FileOutputStream fos = new FileOutputStream("F:/out.txt");

   首先,读取文件内容(见上),然后写入:↓↓↓

    

 4、捕获异常

  (有关异常的内容还有很多,在这就先不详解了)

  读写文件时,易出现异常,故,需要在读写过程中进行异常处理,例如捕获异常

    try{
      FileInputStream fis = new FileInputStream("F:/test.txt");

      FileOutputStream fos = new FileOutputStream("F:/out.txt");

      StringBuffer sb = new StringBuffer();

      // 读取文件

      int n = -1;
      while((n=fis.read()) != -1){
        sb.append((char)n);
      }
      System.out.println(sb);

      sb.reverse();

      fos.write(sb.toString().getBytes());
      System.out.println(sb);
    } catch(FileNotFoundException e){
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

 5、BufferedInputStream / BufferedOutputStream

  ① 作用:在基本流的基础上进行包装,读取或者写入文件时,将通过缓存进行。
    即,先将内容写入到缓存区,缓存区满以后,再进行读取或者写入操作。
    可以大大减少文件的操作次数,提高写入效率。
  ② 缓存流的使用
    在基本流的基础之上,进行包装:
      new BufferedInputStream(new FileInputStream("F:/test.txt"));
    这种写法。我们称之为IO链,IO关闭时,只需要关闭最外层流,内层流将自动关闭。
  ③ BufferedOutputStream在关闭前,通常调用bos.flush();
    表示关闭前将缓存进行刷新,将缓存区剩余未满的内容写入文件。
    但是,一般.close()方法,自带刷新功能。

  ④ 代码示例:

 6、DateInputStream / DateOutputStream

   采用二进制对文件进行读写操作。

   与基本流相比,可以直接读写java中的基本数据类型。

   另外,如果操作的文件是一个二进制文件,需要使用DataOutputStream替代FileOutputStream。

   同样,Date系列的流,也有read和write方法,操作与基本相同。

   注意:只用DataOutputStream写入文件为二进制文件,只能使用DataInputStream进行读取。

      String name = "zhangsan";

      int age = 12;

      double height = 178.5;

      String ads = "山东烟台";

      DataOutputStream dos = null;

      DataInputStream dis = null;

      try {

        dos = new DataOutputStream(new FileOutputStream("F:\\zhangsan.txt"));

        dos.writeUTF(name);
dos.writeInt(age);

        dos.writeDouble(height);

        dos.writeUTF(ads);

        dis = new DataInputStream(new FileInputStream("F:\\zhangsan.txt"));

        String uname = dis.readUTF();

        int uage = dis.readInt();

        double uheight = dis.readDouble();

        String uads = dis.readUTF();

        System.out.println(uname+"---"+uage+"---"+uheight+"---"+uads);

      } catch(FileNotFoundException e){

        e.printStackTrace();

      }catch (IOException e) {

        // TODO: handle exception

        e.printStackTrace();

      } finally{

        try {

          dis.close();

          dos.flush();

          dos.close();

        } catch (IOException e) {

          // TODO: handle exception

          e.printStackTrace();

        }

      }

  

 7、ObjectOutputStream / ObjectInputStream

   直接继承自:java.io.OutputStream 抽象类

  ① 与基本流相同,可以使用read、write方法进行读写。

  ② 与DateInputStream相同,可以对Java基本数据类型进行直接读写:readInt() writeDouble()

  ③ 可以只用readObject()和writeObject() 直接对对象进行操作。

  【对象的序列化和反序列】

  ① 对象的序列化:将程序中的对象,持久化的保存在文件中的过程;ObjectOutputStream

  ② 对象的反序列化:将文件中保存的对象,重新读取到程序中的过程。ObjectInputStream

   

   

   如果,要将对象进行序列化操作,那么实体类必须实现可序化接口。

    class Person implements Serializable{}

  ③ 注意:当一个实体类,实现可序化接口后,可以添加一个序列化版本号ID。

  (实现序列化接口以后,根据警告提示,选择:Add default serial version ID。)

    添加以后,可以用ID表示序列化和反序列化时操作的对象,是同一个对象。

   会自动生成一个静态属性:

    private static final long serialVersionUID = 1L;

   如果不添加版本ID,给序列化一个对象后,如果实体类对象有增删,再进行反序列化时,会造成错误。

   因为系统认为这已经不是一个类。

    

    +get、set方法,并重写toString方法。

Java必须了解的“递归”与“IO流”!!!的更多相关文章

  1. JAVA第09次实验(IO流)

    JAVA第09次实验(IO流) 0.字节流与二进制文件 我的代码 import java.io.DataInputStream; import java.io.DataOutputStream; im ...

  2. Java的递归、IO流

    .t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.递归 [递归] 1. 在函数自身内部,调用函数本身的方式,称为递归. ...

  3. 详谈JAVA中的file类与IO流

    File类 位置于java.io包构造方法:File(String parent, String child)new file("d:\\","a.txt") ...

  4. java基础知识——网络编程、IO流

    IO流 字节流:处理字节数据的流对象,计算机中最小数据单元就是字节.InputStream OutputStream 字符流:字符编码问题,将字节流和编码表封装成对象就是字符流.Reader Writ ...

  5. 零基础学习java------day16-----文件,递归,IO流(字节流读写数据)

    1.File 1.1 构造方法(只是创建已经存在文件的对象,并不能创建没有的文件) (1)public File(String pathname) (2)public File(String pare ...

  6. java基础(十九)IO流(二)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  7. java基础(十八)IO流(一)

    这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是 ...

  8. java学习第21天(IO流的使用)

    IO流分类: A:流向 输入流 读取数据 输出流 写出数据 B:数据类型 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 注意: a:如果我们没有明确说明按照什么分,默认按照数据类型分 ...

  9. java写文件读写操作(IO流,字节流)

    package copyfile; import java.io.*; public class copy { public static void main(String[] args) throw ...

随机推荐

  1. XMAN-level4

    [XMAN] level4 首先checksec,信息如下 [*] '/root/Desktop/bin/pwn/xman-level4/level4' Arch: i386-32-little RE ...

  2. 高级软件工程2017第5次作业—— 团队项目:需求改进&系统设计

    Deadline:2017-10-23(周一) 21:00pm 注:以下内容参考 集大作业 1.评分规则: 按时交 - 有分,检查的项目包括后文的四个方面 需求&原型改进 - 20分 系统设计 ...

  3. ArcGIS地图打印那些事

    记录了通过ArcGIS的PringTask进行地图打印,以及借助html2canvas实现屏幕截图的方法.两个方法各有适用的情景.过程中涉及的相关资源和问题给出链接,自行查看. 1.需求背景 地图打印 ...

  4. 在ArcGIS中导出现有mxd的style文件

     做好的地图包含许多地图符号,这是之前花了很多功夫做的,怎么把它导出来再用呢?     在ArcGIS中右键工具栏,customize,选择command选项卡,在搜索框中输入style ,选择too ...

  5. js 点击 返回顶部 动画

    附上效果图 触发前 触发后 HTML代码: CSS代码 JS代码 由于复制文本太丑了 所以直接放的图片  但是我在评论区把js代码又复制了一边 以便你们使用

  6. 源码解析flask的路由系统

    源码解析flask的路由系统 当我们新建一个flask项目时,pycharm通常已经为项目定义了一个基本路由 @app.route('/') def hello_world(): return 'He ...

  7. XPath编写规则学习

    XPath编写规则学习   辅助工具:firefox安装findbugs,view Xpath firefox :Xpath验证方式:$x("xpath"); 粘贴xpath语句回 ...

  8. 【笔记】HybridApp中使用Promise化的JS-Bridge

    背景: HybridApp,前端采用JS-bridge的方式调用Native的接口,如获取设备信息.拍照.人脸识别等 前端封装了调用库,每次调用Native接口,需要进行两步操作(1.在window下 ...

  9. python入门(14)定义函数和接收返回值

    定义函数: 定义一个求绝对值的my_abs函数为例: def my_abs(x): if x >= 0: return x else: return -x 如果没有return语句,函数执行完毕 ...

  10. 判断一个字符串是不是一个合法的IP地址

    最近在笔试的时候遇到碰一道算法题, 要求判断一个字符串是不是合法的ip地址. 将我的思路发出来分享一下,不一定正确,也不一定是最优的方法.希望能分享一些交流 要求用java或者c来实现,我的java代 ...