Java基础针对自己薄弱环节总结07(递归、IO流)

一、递归

a)        概述

递归是方法中调用方法本身的现象

b)       注意事项

            i.  递归次数不能太多,否则内存溢出

           ii.   一定要有出口,否则死递归

           iii.  构造方法不能递归

c)        小例子:N的阶乘

    public static int jc(int n){

     if(n ==1){

          return 1;

     else

          return n* jc(n -1);

     }

               }

二、IO流

a)        分类

i.             字节流

1.        输入流:

                 InputStream(抽象类)

                intread()

                 intread(byte[] bys)

                 FileInputStream(常用基本流)

                 BufferedInputStream

2.        输出流:

                  OutputStream(抽象类)

                          write(intby)

                          write(byte[]bys,int index,int len)

                   FileOutputStream(常用基本流)

                   BufferedOutputStream

ii.             字符流:
1.        输入流:

                   Reader(抽象类)

                        intread()

                        intread(char[] chs)

                    FileReader(常用基本流)

                    BufferedReader

                         String readLine()

2.        输出流:

                    Writer(抽象类)

                         write(intch)

                         write(char[]chs,int index,int len)

                     FileWriter(常用基本流)

                     BufferedWriter

                           write(String line)

                           void newLine()

 



三、递归和IO流结合使用操作文件的例子

a)        删除文件夹下的所有内容

packagecn.itcast.digui;
importjava.io.File;
/**
 * 用递归删除多级文件
 * @author LBK
 *
 */
public classDiGuiDelete {
       public static void main(String[] args) {
              //封装要删除的目录
              File srcFile =newFile("e:\\java");
              //递归删除
              delete(srcFile);
              System.out.println("删除成功");
       }
 
       public static void delete(File srcFile) {
              //获取文件数组
              File [] files=srcFile.listFiles();
             
              //判断目录是否存在文件
              if(files!=null){
                     //遍历数组
                     for(File file:files){
                            if(file.isDirectory()){
                                   delete(file);
                            }else{
                                   file.delete();
                            }
                     }
              }
              //完成遍历删除该级文件夹
              srcFile.delete();
       }
}


b)       复制多级文件

packagecn.itcast.digui;
importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
/**
 * 递归复制多级文件夹中的文件
 * @author LBK
 *
 */
public classDiGuiCopy {
       public static void main(String[] args)throws IOException {
              // 封装源目录
              File srcFile = newFile("d:\\test");
 
              // 封装目的目录
              File destFile = newFile("e:\\test");
 
              // 递归复制
              copyFile(srcFile, destFile);
              System.out.println("复制成功");
       }
 
       public static void copyFile(File srcFile,File destFile) throws IOException {
 
              // 检查目的路径是否存在,不存在创建
 
              if (!destFile.exists()) {
                     destFile.mkdirs();
              }
              // 获取源目录中所用的文件到数组中
              File[] ArrayFiles =srcFile.listFiles();
 
              // 遍历文件数组
 
              for (File file : ArrayFiles) {
 
                     // 判断是否是文件夹
                     if (!file.isFile()) {
                            copyFile(file,destFile);
                     } else {
                            // 是文件开始复制
 
                            File newFile = newFile(destFile, file.getName());
 
                            // 创建输入流
                            BufferedInputStreambis = new BufferedInputStream(
                                          newFileInputStream(file));
                            // 创建输出流
                            BufferedOutputStreambos = new BufferedOutputStream(
                                          newFileOutputStream(newFile));
                            byte[] bys = newbyte[1024];
                            int len = 0;
                            while ((len =bis.read(bys)) != -1) {
                                   bos.write(bys,0, len);
                                   bos.flush();
 
                            }
                            bis.close();
                            bos.close();
                     }
              }
 
       }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值