A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

zzdhm

初级黑马

  • 黑马币:91

  • 帖子:61

  • 精华:0

利用递归查找D盘下是否存在number.txt文件,如果没有该文件则创建;提示用户输入10个字符串,以追加的方式写入到number.txt中

4 个回复

倒序浏览
这里递归的运用在于判断了是文件夹就再次调用本方法,思路是:1.先遍历文件夹,是文件,就获取文件名,判断是不是以number开头,以,txt结尾,是提示输入,不是 的话就进行下一次循环,2.判断了如果是文件夹,就调用方法自身,遍历这个文件夹,重复第一个步骤,3.全部遍历完后都没有number.txt这个文件,就new一个文件就行啦
回复 使用道具 举报
package com.whn.practice;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Scanner;
public class Test7 {
        private static FileOutputStream fos;
        public static void main(String[] args) throws Exception {
                File file = new File("D:\\test");
                File have = isHave(file);
                if (have==null) {
                        System.out.println("没有这个文件,创建number.txt");
                        File file2 = new File("D:\\test\\number.txt");
                        file2.createNewFile();
                }
                Scanner sc = new Scanner(System.in);
                for (int i = 0; i < 10; i++) {
                        System.out.println("请输入字符串");
                        String nextLine = sc.nextLine();
                        fos = new FileOutputStream("D:\\test\\number.txt",true);
                        fos.write((nextLine+" ").getBytes());
                }
                System.out.println("输入完毕");
                fos.close();
        }
       
        /**
         * 判断是否存在
         */
        private static File isHave(File file) {
                File[] files = file.listFiles();
                for (File subFile : files) {
                        if (subFile.isDirectory()) {
                                isHave(subFile);
                        }else{
                                if("number.txt".equals(subFile.getName())){
                                        return subFile;
                                }
                        }
                }
                return null;
        }
}
回复 使用道具 举报
somnus-sir 发表于 2016-9-16 20:58
package com.whn.practice;
import java.io.File;
import java.io.FileOutputStream;

大神,  这只能判断D:\\test目录下有没有number.txt文件,不能判定D:\\test子目录下或者是 子目录的子目录下有没有number.txt文件,递归没有起到作用啊,你在帮我瞧瞧.
回复 使用道具 举报
zzdhm 发表于 2016-9-16 23:15
大神,  这只能判断D:\\test目录下有没有number.txt文件,不能判定D:\\test子目录下或者是 子目录的子目录 ...

package com.whn.practice;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Scanner;
public class Test7 {
        private static FileOutputStream fos;
        private static File numberFile=null;                //一个numFile用来接受递归中返回的参数
        public static void main(String[] args) throws Exception {
                File file = new File("D:\\test");
                isHave(file);                                                        //递归方法去掉返回值
                if (numberFile==null) {                                        //用numFile来做判断
                        System.out.println("没有这个文件,创建number.txt");
                        File file2 = new File("D:\\test\\number.txt");
                        file2.createNewFile();
                        fos = new FileOutputStream("D:\\test\\number.txt",true);                //字符串输出路径
                }else{
                        System.out.println("文件存在    "+numberFile.getAbsolutePath());
                        fos = new FileOutputStream(new File(numberFile.getAbsolutePath()),true);//如果文件存在,就往这个文件存
                }
               
                Scanner sc = new Scanner(System.in);
                for (int i = 0; i < 10; i++) {
                        System.out.println("请输入字符串");
                        String nextLine = sc.nextLine();
                        fos.write((nextLine+" ").getBytes());
                }
                fos.close();
                System.out.println("输入完毕");
        }
       
        /**
         * 判断是否存在
         */
        private static void isHave(File file) {
                File[] files = file.listFiles();
                for (File subFile : files) {
                        if (subFile.isDirectory()) {
                                isHave(subFile);
                        }else{
                                if("number.txt".equals(subFile.getName())){
                                        numberFile = subFile; //如果存在这个number.txt文件,就附给numFile
                                }
                        }
                }
        }
}

//呀,我的锅,递归中的return只返回了一层递归,没有反出去,修改部分我加注释了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马