笔记 -11- File. IO概述 字节流 缓冲流 练习

day11-File与IO课后作业题

题目1[File]

请在D盘根目录下创建一个文件:test1.txt(随意录入一些内容),再创建一个目录:测试目录

要求:

  1. 获取、打印file1和file2的绝对路径;

  2. 获取、打印file1和file2的文件名和目录名;

  3. 获取、打印file1和file2的文件大小;

  4. 分别判断file1和file2是否存在;

  5. 分别判断file1和file2是否是文件?是否是目录?

效果:

在这里插入图片描述

在这里插入图片描述

参考代码:

public static void main(String[] args) {
        File file1 = new File("D:\\test1.txt");
        File file2 = new File("D:\\测试目录");
        //1. 获取、打印file1和file2的绝对路径;
        System.out.println("文件1的绝对路径是:"+file1.getAbsolutePath());
        System.out.println("文件夹2的绝对路径是:"+file2.getAbsolutePath());
        //2. 获取、打印file1和file2的文件名和目录名;
        System.out.println("文件1的名称是:"+file1.getName());
        System.out.println("文件夹2的名称是:"+file2.getName());
        //3. 获取、打印file1和file2的文件大小;
        System.out.println("文件1的大小是:"+file1.length());
        System.out.println("文件夹2的大小是(文件夹获取的不准确):"+file2.getName());
        //4. 分别判断file1和file2是否存在;
        System.out.println("file1表示的文件存在吗?"+file1.exists());
        System.out.println("file2表示的文件夹存在吗?"+file2.exists());
        //5. 分别判断file1和file2是否是文件?是否是目录?
        System.out.println("file1表示的是文件吗?"+file1.isFile());
        System.out.println("file2表示的是文件吗?"+file2.isFile());
    }

题目2[File]

请编写main()方法,创建以下File对象:

​ File file1 = new File(“test.txt”);//相对路径

​ File file2 = new File(“一级目录”);

​ File file3 = new File(“目录A/目录B/目录C”);

要求:

(相对路径,可以相对于项目也可以相对于模块)

  1. 判断file1是否存在?如果不存在,创建这个文件。

  2. 判断file2是否存在?如果不存在,创建这个目录。

    1. 判断file3是否存在?如果不存在,创建这个多级目录。

效果:

在这里插入图片描述

参考代码:

public static void main(String[] args) throws IOException {
        File f1 = new File("test.txt");//相对路径,(我设置的是相对于模块的)
        File f2 = new File("abc");
        File f3 = new File("a\\b\\c");
        //1. 判断f1是否存在?如果不存在,创建这个文件。
        if (!f1.exists()) {
            f1.createNewFile();
        }
        //2. 判断f2是否存在?如果不存在,创建这个目录。
        if (!f2.exists()) {
            f2.mkdirs();
        }
        //3. 判断file3是否存在?如果不存在,创建这个多级目录。
        if (!f3.exists()) {
            f3.mkdirs();
        }
    }

题目3[File]

请在D盘下创建一个目录“多级目录”,下面随意创建一些文件和目录。

​ 请编写main()方法,创建以下File对象:

​ File file = new File(“D:\多级目录”);

要求:

​ 遍历这个多级文件夹下的所有内容(包含子文件夹的内容),判断每个File对象是否文件

​ 如果是文件,打印:【文件】+ 绝对路径

​ 如果是目录,打印:【目录】+ 绝对路径

效果
在这里插入图片描述
在这里插入图片描述

参考代码:

public static void main(String[] args) {
        File file = new File("D:\\a");
        //处理文件夹的方法
        dir(file);
    }

    public static void dir(File file) {
        File[] arr = file.listFiles();
        for (File f : arr) {
            if(f.isFile()){
                System.out.println("文件:"+f.getAbsolutePath());
            }else {
                //说明f是文件夹,先打印,然后再递归处理
                System.out.println("文件夹:"+f.getAbsolutePath());
                dir(f);
            }
        }
    }

题目4[File综合题有难度]

请使用代码计算出你电脑上的任意一个文件夹中的大小。

要求:

必须是一个多层文件夹;

效果
在这里插入图片描述

(每个人的具体数据都不一样,以实际情况为准)

参考代码:

public static void main(String[] args) {
        File file = new File("E:\\Java学习专用\\神器资料-很重要!!\\常用API");
        //处理文件夹的方法
        dir(file);
        //直接输出成员变量的值即可
        System.out.println(file.getName()+"文件夹的总大小是:"+len+" 个字节!");
    }
    private static long len = 0;//统计总大小的静态变量
    public static void dir(File file) {
        File[] arr = file.listFiles();
        for (File f : arr) {
            if(f.isFile()){
                //文件就获取大小并累加起来
                len+=f.length();
            }else {
                //说明f是文件夹,递归处理
                dir(f);
            }
        }
    }

题目5[IO]

使用键盘输入多个学生的信息,并将这些学生的信息保存到模块的1.txt文件中;

要求:

1:学生信息包含姓名、年龄(用一行字符串表示即可,无需创建学生对象);

2:每个学生信息占一行,学生信息之间使用逗号分隔;

3:至少输入3个学生信息;

效果

在这里插入图片描述

在这里插入图片描述

参考代码:

public static void main(String[] args) throws Exception {
        //创建文件对象,准备写数据
        FileOutputStream fout = new FileOutputStream("1.txt");
        Scanner sc = new Scanner(System.in);
        for (int i = 1; true; i++) {
            System.out.println("请输入第"+i+"个学生姓名和年龄,学生信息之间使用逗号分隔(ok表示结束):");
            String s = sc.next();
            if("ok".equalsIgnoreCase(s)){
                System.out.println("拜拜!");
                break;
            }
            // \r\n表示换行
            fout.write((s+"\r\n").getBytes());
        }
        fout.close();
    }

题目6[IO-综合题2有难度-明天做会更简单]

将上一题产生的文件中的学生按照年龄升序排序后重新写回原文件;

效果

1.txt文件排序前:

在这里插入图片描述

1.txt文件排序后:

在这里插入图片描述

参考代码:

public static void main(String[] args) throws Exception {
        File f = new File("1.txt");
        //创建文件对象,准备读数据
        FileInputStream fin = new FileInputStream(f);
        byte[] arr = new byte[(int)f.length()];//文件中有多少字节,就创建多大的数组,一次性读完
        fin.read(arr);//读到的数据都保存到了arr中
        //把数组转成字符串
        String s = new String(arr);
        //使用换行符切分字符串
        String[] split = s.split("\r\n");
        //再使用逗号切分数组中的每一个元素,可以得到学生的姓名和年龄
        //创建set集合并指定排序规则
        TreeSet<Student> set = new TreeSet<>((s1,s2)->s1.getAge()-s2.getAge()==0?s1.getName().compareTo(s2.getName()):s1.getAge()-s2.getAge());
        for (String s1 : split) {
            String[] split1 = s1.split(",");
            //把按照切分出来的数组的第1个值作为name,第二个值作为age创建学生对象,并按照年龄排序
            Student stu = new Student(split1[0],Integer.parseInt(split1[1]));
            set.add(stu);
        }
        //创建输出流,并把set集合中的学生信息重新写入1.txt文件中;(重写Student的toString方法了)
        FileOutputStream fout = new FileOutputStream("1.txt");
        for (Student stu : set) {
            fout.write((stu.toString()+"\r\n").getBytes());
        }
        fin.close();
        fout.close();
        System.out.println("排序已完成");
    }
  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值