zoukankan      html  css  js  c++  java
  • 15.io流,递归

    一。file的常用api

    二。算法:递归
    1.定义:递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
    一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).

    案例:计算10的阶乘: 10*9*8*7*6*5*4*3*2*1

    三。文件处理IO
    1.字节流:可以处理任何文件类型
    字节输入流
    InputStream in = BufferedInputStream FileInputStream File
    in.read()
    字节输出流
    OutputStream os = BufferedOutputStream FileOutputStream File
    in.write(byte[])
    2.字符流:只能处理文本型文件类型
    Reader r = BufferedReader FileReader File
    r.readerLine()
    Write w = BufferedWrite FileWrite File
    w.write

    四、作业及练习

    1.做一个模拟dos窗口的命令集合:dir和cd功能
    dir是显示当前目录下的所有子目录和文件名 还有文件大小
    cd是将当前目录进入到指定文件目录下
    要求从d盘开始

    2.输入一个字符串,要求把字符串从第一个字符每次叠加一个字符输出,用递归算法
    例如:“白日依山尽” 输出:白 白日 白日依 白日依山 白日依山尽

    3.输入一个文件夹路径,打印输出该文件夹下所有文件路径

    test
        html
            html
                index.html
            index.html
        java
            First.java
            HelloWorld.java
        oracle
            sql
                my.sql
            hard.txt
            read.txt
        hello.txt
        Huwa.java
    
    public void directory(String path){
        //构造file
        //拿到目录结构下的所有file
        //循环file数组,判断如果是文件打印输出,如果是目录则继续调用自己递归
    }

    4.写一个方法,用来替换文章中的字符串

    5.写一个方法,用来统计文章中字符串出现的次数

    1.将一篇没有自动换行的文章按规则实现换行。
    规则为:句号,分号,省略号,感叹号,疑问号。
    遇到以上符号就换行

    2.将成绩文档中的所有成绩求平均成绩,最高分,和总人数?

    学号,姓名,学科,成绩
    1,张安,语文,88
    2,刘鹗,语文,67
    3,修改,语文,87
    4,鳄鱼,语文,55
    5,没地方,语文,45
    6,大飞哥,语文,66
    7,苟富贵,语文,78
    8,表单,语文,98
    9,放到,语文,78
    10,二维热无,语文,99
    11,都是,语文,87
    12,放到,语文,67
    13,的v,语文,56
    14,地方,语文,76
    15,水电费,语文,87
    16,大飞,语文,99
    17,同意,语文,89
    18,回滚,语文,78
    19,交换机,语文,67
    20,玩儿,语文,87

    五、例子

      文件基本操作+dos操作系统模拟实例:

     1 package com.demo1120;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 import java.util.Scanner;
     6 
     7 import org.junit.Test;
     8 
     9 public class FileDemo {
    10     @Test
    11     public void test(){
    12         File file = new File("d:/test/stu.txt");
    13         try {
    14             file.createNewFile();
    15         } catch (IOException e) {
    16             e.printStackTrace();
    17         }
    18         file.delete();
    19         System.out.println(file.exists());
    20         
    21         File test = new File("d:/test");
    22         File[] files = test.listFiles();
    23         for (int i = 0; i < files.length; i++) {
    24             System.out.println(files[i].getName());
    25         }
    26     }
    27     
    28     @Test
    29     public void dos(){
    30         Scanner sc = new Scanner(System.in);
    31         String path = "d:/";
    32         
    33         System.out.println("d:/>");
    34         while(true){
    35             String command = sc.nextLine();
    36             if("dir".equals(command)){
    37                 File file = new File(path);
    38                 File[] files = file.listFiles();
    39                 for (int i = 0; i < files.length; i++) {
    40                     System.out.println(files[i].getName()); 
    41                 }
    42                 System.out.println(path+">");
    43             }
    44             
    45             if(command.startsWith("cd")){
    46                 path += "/"+command.substring(command.indexOf(" ")+1); 
    47                 File file = new File(path);
    48                 System.out.println(path+">");
    49             }
    50         }
    51     }
    52 }

      递归实例:

     1 package com.demo1120;
     2 
     3 import org.junit.Test;
     4 
     5 public class RecursionDemo {
     6     public static void main(String[] args) {
     7         RecursionDemo r = new RecursionDemo();
     8 //        int result = r.factoril(10);
     9 //        System.out.println(result);
    10         r.string("白日依山尽");
    11     }
    12     
    13     //计算阶乘
    14     public int factoril(int num){
    15         if(num==1){
    16             return 1;
    17         }else{
    18             int result = num*factoril(num-1);
    19             System.out.println(result);
    20             return result;
    21         }
    22     }
    23     
    24     public String string(String s){
    25         if(s.length()==1){
    26             System.out.println(s);
    27             return s;
    28         }else{
    29             String result = s+string(s.substring(0,s.length()-1));
    30             System.out.println(s);
    31             return result;
    32         }
    33     }
    34 }

      打印文件夹下所有文件实例

     1 package com.demo1120;
     2 
     3 import java.io.File;
     4 
     5 public class Work {
     6     public static void main(String[] args) {
     7         Work w = new Work();
     8         w.directory("d:/test",0);
     9     }
    10     
    11     public void directory(String path,int table){
    12         //构造file
    13         File file = new File(path);
    14         //拿到目录结构下的所有file
    15         File[] files = file.listFiles();
    16         
    17         
    18         //循环file数组,判断如果是文件打印输出,如果是目录则继续调用自己递归
    19         for (int i = 0; i < files.length; i++) {
    20             for (int j = 0; j < table; j++) {
    21                 System.out.print("	");
    22             }
    23             if(files[i].isFile()){
    24                 System.out.println(files[i].getName());
    25             }
    26             if(files[i].isDirectory()){
    27                 System.out.println(files[i].getName());
    28                 directory(path+"/"+files[i].getName(),table+1);
    29             }
    30         }
    31     }
    32 }

      读取一个文件中的内容并写入到另一个文件中的实例(字节流):

     1 package com.demo1120;
     2 
     3 import java.io.BufferedInputStream;
     4 import java.io.BufferedOutputStream;
     5 import java.io.File;
     6 import java.io.FileInputStream;
     7 import java.io.FileNotFoundException;
     8 import java.io.FileOutputStream;
     9 import java.io.IOException;
    10 import java.io.InputStream;
    11 import java.io.OutputStream;
    12 
    13 public class StreamDemo {
    14     
    15     public static void main(String[] args) {
    16         StreamDemo sd = new StreamDemo();
    17         byte[] b = sd.readFile("d:/test/笔记");
    18         sd.writeFile("d:/海文", b);
    19     }
    20     public byte[] readFile(String path){
    21         
    22         File file = new File(path);
    23         //把文件读成字节输入流
    24         InputStream in = null;
    25         byte[] bytes = new byte[(int)file.length()];
    26         try{
    27             in = new BufferedInputStream(new FileInputStream(file));
    28             //从流中把字节内容存入到java内存,字节数组
    29             int offset = 0;//记录每次读取的初始位置
    30             int num = 0;//记录每次读取的量
    31             //循环从流中把字节存储到字节数组中
    32             while(offset<bytes.length&&num>=0){
    33                 num = in.read(bytes, offset, bytes.length-offset);
    34                 offset = num;
    35             }
    36             //将字节数组构造成字符创  “gbk”是支持中文的字符集编码
    37             System.out.println(new String(bytes, "gbk"));
    38         }catch (Exception e) {
    39             e.printStackTrace();
    40         }finally{
    41             try {
    42                 in.close();//关闭资源
    43             } catch (IOException e) {
    44                 e.printStackTrace();
    45             }
    46         }
    47         return bytes;
    48     }
    49     
    50     public void writeFile(String path,byte[] bytes){
    51         //字节输出流
    52         OutputStream os = null;
    53         try {
    54             os = new BufferedOutputStream(new FileOutputStream(new File(path)));
    55             os.write(bytes);
    56             os.flush();//清空缓存,如果不清空有可能有一部分在缓存中无法输出到文件
    57         } catch (Exception e) {
    58             e.printStackTrace();
    59         }finally{
    60             try {
    61                 os.close();
    62             } catch (Exception e) {
    63                 e.printStackTrace();
    64             }
    65         }
    66     }
    67 }

      读取一个文件中的内容并写入到另一个文件中的实例(字符流):

     1 package com.demo1120;
     2 
     3 import java.io.BufferedReader;
     4 import java.io.BufferedWriter;
     5 import java.io.File;
     6 import java.io.FileNotFoundException;
     7 import java.io.FileReader;
     8 import java.io.FileWriter;
     9 import java.io.IOException;
    10 import java.io.Reader;
    11 import java.io.Writer;
    12 
    13 /**
    14  * 字符流案例
    15  */
    16 public class CharStreamDemo {
    17     
    18     public static void main(String[] args) {
    19         CharStreamDemo cd = new CharStreamDemo();
    20 //        cd.readFile("d:/test/笔记");
    21         cd.writeFile("d:/测试");
    22     }
    23     
    24     public String readFile(String path){
    25         File file = new File(path);
    26         BufferedReader reader = null;
    27         StringBuilder sb = new StringBuilder();
    28         try {
    29             reader = new BufferedReader(new FileReader(file));
    30             String s;
    31             while((s = reader.readLine())!=null){
    32                 sb.append(s+"
    ");
    33             }
    34             System.out.println(sb.toString());
    35         } catch (Exception e) {
    36             // TODO Auto-generated catch block
    37             e.printStackTrace();
    38         } finally{
    39             try {
    40                 reader.close();
    41             } catch (IOException e) {
    42                 e.printStackTrace();
    43             }
    44         }
    45         return sb.toString();
    46     }
    47     
    48     public void writeFile(String path){
    49         File file = new File(path);
    50         Writer w = null;
    51         try {
    52             w = new BufferedWriter(new FileWriter(file));
    53             w.write("你好啊。
    我不好");//内存输出到文件,换行符是
    
    54             w.flush();//清空缓存
    55         } catch (IOException e) {
    56             e.printStackTrace();
    57         } finally {
    58             try {
    59                 w.close();
    60             } catch (IOException e) {
    61                 e.printStackTrace();
    62             }
    63         }
    64     }
    65 }
  • 相关阅读:
    移植ssh到mini2440
    VMware中Ubuntu安装VMware Tools步骤及问题解决方法
    Linux的网卡由eth0变成了eth1,如何修复
    mini2440移植所有驱动到3.4.2内核详细解说
    单片机的一生(感觉在说大部分人)
    mini2440移植linux-3.4.2内核详细解说
    Ubuntu中恢复桌面的上下默认面板命令
    mini2440移植最新u-boot-2012.04.01详细解说
    MyEclipse CI 2018.8.0 官方最新免费版(破解文件+激活工具+破解教程)
    cocos 获取一个骨骼动画多次显示播放
  • 原文地址:https://www.cnblogs.com/wlxslsb/p/10671752.html
Copyright © 2011-2022 走看看