Java基础练习题day06

package HomeWork.day06;

import java.util.Date;
import java.util.Objects;

/**
 * 定义私有属性:
 * String name;
 * int age;
 * String gender;
 * int salary;
 * Date hiredate;//入职时间
 * <p>
 * 定义构造方法,以及属性get,set方法.
 * 定义toString方法,格式如:
 * 张三,25,男,5000,2006-02-15
 * <p>
 * 定义equals方法,要求名字相同,则认为内容一致。
 *
 * @author Bonnie
 */
public class Emp {
    //定义私有属性:
    // * String name;
    // * int age;
    // * String gender;
    // * int salary;
    // * Date hiredate;//入职时间
    private String name;
    private int age;
    private String gender;
    private int salary;
    private Date hiredate;

    // * 定义构造方法,以及属性get,set方法.
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public Date getHiredate() {
        return hiredate;
    }

    public void setHiredate(Date hiredate) {
        this.hiredate = hiredate;
    }

    // * 定义toString方法,格式如:
    // *    张三,25,男,5000,2006-02-15

    @Override
    public String toString() {
        return "Emp{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", gender='" + gender + '\'' +
                ", salary=" + salary +
                ", hiredate=" + hiredate +
                '}';
    }

    // * 定义equals方法,要求名字相同,则认为内容一致。

    public Emp() {
    }

    public Emp(String name, int age, String gender, int salary, Date hiredate) {
        this.name = name;
        this.age = age;
        this.gender = gender;
        this.salary = salary;
        this.hiredate = hiredate;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Emp emp = (Emp) o;
        return Objects.equals(name, emp.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

package HomeWork.day06;

import java.io.File;
import java.text.SimpleDateFormat;

/**
 * 通过File输出当前项目目录下的文件"myfile.txt"的名字,大小,最后修改时间。
 * 最后修改时间格式如:2017-06-30 14:22:16
 *
 * @author Bonnie
 */
public class Test01 {
    public static void main(String[] args) {
        //通过File输出当前项目目录下的文件"myfile.txt"的名字,大小,最后修改时间。
        File file = new File("myfile");
        String name = file.getName();
        long length = file.length();
        System.out.println(name);
        System.out.println(length);
        //new Date -> 输出最后修改时间格式如:2017-06-30 14:22:16
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        System.out.println(file.lastModified());

    }

}

package HomeWork.day06;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

/**
 * 要求用户输入一个文件名并使用File在当前目录下创建出来。
 * 若该文件已经存在,则提示用户该文件已经存在。并创建该文件副本:
 * 例如:用户输入"test.txt".若该文件已存在,提示用户存在后,创建名为:test_副本1.txt 的文件
 * 若该文件也存在了,则创建名为:test_副本2.txt 的文件,以此类推
 *
 * @author Bonnie
 */
public class Test02 {
    public static void main(String[] args) throws IOException {
        //要求用户输入一个文件名并使用File在当前目录下创建出来。
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入文件名:");
        String input = scan.nextLine().trim();
        File file = new File("test.txt");
        boolean flag = file.exists();
        if (!flag) {//若不存在
            file.createNewFile();
        } else {
            //若该文件已经存在,则提示用户该文件已经存在。并创建该文件副本:
            System.out.println("用户该目录已经存在");
            int index = 0;
            while (flag) {
                index++;
                //例如:用户输入"test.txt".若该文件已存在,提示用户存在后,创建名为:test_副本1.txt 的文件
                // * 若该文件也存在了,则创建名为:test_副本2.txt 的文件,以此类推
                file = new File("test_副本" + index + ".txt");
                flag = file.exists();
            }
            file.createNewFile();
        }
        System.out.println("文件名:" + file.getName());
    }
}

package HomeWork.day06;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

/**
 * 要求用户输入一个目录名并使用File在当前目录下创建出来。
 * 若该目录已经存在,则提示用户该目录已经存在。并创建副本,原则与第二题一致。
 *
 * @author Bonnie
 */
public class Test03 {
    public static void main(String[] args) throws IOException {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入文件名:");
        String input = scan.nextLine().trim();
        File file = new File("test.txt");
        boolean flag = file.exists();
        if (!flag) {//若不存在
            file.createNewFile();
        } else {
            System.out.println("用户该目录已经存在");
            int index = 0;
            while (flag) {
                index++;
                file = new File("test_副本" + index + ".txt");
                flag = file.exists();
            }
            file.createNewFile();
        }
        System.out.println("文件名:" + file.getName());
    }
}

package HomeWork.day06;

import java.io.File;

/**
 * 获取并输出当前目录下的所有文件和目录的名字
 *
 * @author Bonnie
 */
public class Test04 {
    public static void main(String[] args) {
        File dir = new File("src");//获取当前目录下的文件以及文件夹的名称
        printDir(dir);
    }

    public static void printDir(File dir) {
        //获取子文件和目录
        File[] files = dir.listFiles();
        //循环打印
        /**
         * 判断:
         * 当是文件时,打印绝对路径。
         * 当是目录时,继续调用打印目录当方法,形成递归调用。
         * */
        for (File file : files) {
            //判断
            if (file.isFile()) {
                //是文件,输出文件绝对路径
                System.out.println("文件名:" + file.getAbsolutePath());
            } else {
                //是目录,输出目录绝对路径
                System.out.println("目录:" + file.getAbsolutePath());
                //继续遍历,调用printDir,形成递归
                printDir(file);
            }
        }
    }
}

package HomeWork.day06;

import java.io.File;
import java.util.Scanner;

/**
 * 要求用户输入一个文件或目录名,并删除当前目录下的该文件或目录。
 * 可自行手动先在当前项目目录中创建一个要删除的文件或目录,若是目录,还可以
 * 在该目录中继续创建若干级目录和文件。
 *
 * @author Bonnie
 */
public class Test05 {
    public static void main(String[] args) {
        //要求用户输入一个文件或目录名,并删除当前目录下的该文件或目录。
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入文件或目录名字:");
        //可自行手动先在当前项目目录中创建一个要删除的文件或目录,若是目录,还可以
        //在该目录中继续创建若干级目录和文件。
        String input = scan.nextLine().trim();//接收名字
        File file = new File(input);
        if (!file.exists()) {//要删除的文件或目录是否存在
            System.out.println("目录或文件不存在");
            return;
        }
        deleteFile(file);
    }

    //遍历过程中,元素为文件则删除,元素为有内容目录则继续遍历,
    //元素为空目录则执行if后,不会执行for循环,但要执行删除语句,将空目录删除,递归删除以上所有
    public static void deleteFile(File file) {
        //如果是目录,需要先删除当前目录下的所有子项
        if (file.isDirectory()) {
            for (File f : file.listFiles()) {//遍历子目录
                deleteFile(f);
            }
        }
        file.delete();//必定执行的语句
    }
}

package HomeWork.day06;

import java.io.File;

/**
 * 获取并输出当前目录下所有文件的名字
 *
 * @author Bonnie
 */
public class Test06 {
    public static void main(String[] args) {
        File dir = new File("Demo");//获取当前目录下的文件以及文件夹的名称
        printDir(dir);
    }

    public static void printDir(File dir) {
        //获取子文件和目录
        File[] files = dir.listFiles();
        //循环打印
        /**
         * 判断:
         * 当是文件时,打印绝对路径。
         * */
        for (File file : files) {
            //判断
            if (file.isFile()) {
                //是文件,输出文件绝对路径
                System.out.println("文件名:" + file.getAbsolutePath());
            }
        }
    }
}

package HomeWork.day06;

import java.io.File;
import java.util.Scanner;

/**
 * 要求用户输入一个文件名,并复制当前目录中该文件,并取名为"原文件名_copy.后缀名"
 * 定义两个方法分别使用单字节形式复制,以及字节数组形式复制
 *
 * @author Bonnie
 */
public class Test07 {
    public static void main(String[] args) {

    }

    /**
     * 使用单字节方式复制
     *
     * @param name 要复制的文件名
     */
    public void copy1(String name) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要创建的目录的名字:");
        String dirName = scanner.nextLine();
        File dir = new File(dirName);
        if (!dir.exists()) {
            dir.mkdir();
        } else {
            int index = 1;
            while (true) {
                //修改目录名,添加"_copy"内容
                name = dirName + "_copy" + index;
                //打桩查看生成的新目录名
                System.out.println(name);
                //创建File表示该目录
                dir = new File(name);
                //若不存在就创建,并停止循环,否则继续判断
                if (!dir.exists()) {
                    dir.mkdir();
                    break;
                }
                index++;
            }
        }
        System.out.println("目录创建完毕!");
    }

    /**
     * 使用字节数组形式复制
     *
     * @param name 要复制的文件名
     */
    public void copy2(String name) throws Exception {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入要创建的文件的名字:");
        String fileName = scanner.nextLine();
        File file = new File(fileName);
        if (!file.exists()) {
            file.createNewFile();
        } else {
            int index = 1;
            //文件名
            name = fileName.substring(0, fileName.indexOf("."));
            //后缀
            String postfix = fileName.substring(fileName.indexOf(".") + 1);
            while (true) {
                //修改文件名,添加"_copy"内容
                fileName = name + "_copy" + index + "." + postfix;
                //打桩查看生成的新文件名
                System.out.println(fileName);
                //创建File表示该文件
                file = new File(fileName);
                //若不存在就创建,并停止循环,否则继续判断
                if (!file.exists()) {
                    file.createNewFile();
                    break;
                }
                index++;
            }
        }
        System.out.println("文件创建完毕!");
    }
}

package HomeWork.day06;

import java.io.IOException;
import java.io.RandomAccessFile;

/**
 * 创建一个"raf.dat"的文件,并在其中写出一个int的最大值,long的最大值,
 * 然后将其分别读取出来并输出
 *
 * @author Bonnie
 */
public class Test08 {
    public static void main(String[] args) throws IOException {
        RandomAccessFile raf = new RandomAccessFile("raf.dat", "rw");
        raf.writeInt(Integer.MAX_VALUE);
        raf.writeLong(Long.MAX_VALUE);
        raf.seek(0);
        int i = raf.readInt();
        long l = raf.readLong();
        System.out.println("int:" + i);
        System.out.println("long:" + l);
        raf.close();
    }
}

package HomeWork.day06;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;

/**
 * 创建一个文件"note.txt",然后通过控制台输入的每一行字符串都按行写入到
 * note.txt中。当输入的字符串为"exit"时退出程序。
 *
 * @author Bonnie
 */
public class Test09 {
    public static void main(String[] args) throws IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入内容,exit为退出");
        RandomAccessFile raf = new RandomAccessFile("note.txt", "rw");
        while (true) {
            String line = scanner.nextLine();
            if ("exit".equals(line)) {
                break;
            }
            raf.write(line.getBytes());
        }
        System.out.println("再见!");
        raf.close();
    }
}

package HomeWork.day06;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

/**
 * 要求用户输入一个员工信息,格式为:
 * name,age,gender,salary,hiredate
 * 例如:
 * 张三,25,男,5000,2006-02-15
 * 然后将输入的员工信息解析成Emp对象。
 * 然后将该Emp对象的toString返回的字符串写入到文件中,该文件的
 * 名字为:name.emp,以上面的例子,那么该文件名为:张三.emp
 * 至少运行5次该程序,输入五个员工信息,并生成5个文件。
 *
 * @author Bonnie
 */
public class Test10 {
    public static void main(String[] args) throws ParseException, IOException {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入员工信息:");
        String line = scanner.nextLine();
        String[] infos = line.split(",");
        String name = infos[0];
        int age = Integer.parseInt(infos[1]);
        String gender = infos[2];
        int salary = Integer.parseInt(infos[3]);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date hiredate = sdf.parse(infos[4]);
        Emp emp = new Emp(name, age, gender, salary, hiredate);

        RandomAccessFile raf = new RandomAccessFile(emp.getName() + ".emp", "rw");
        raf.write(emp.toString().getBytes());
        System.out.println("写出完毕!");
        raf.close();


    }
}

package HomeWork.day06;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 编写一个程序,将当前目录下所有员工文件进行读取,并解析出所有员工为Emp
 * 对象并存入集合。然后排序该集合,按照员工的年龄排序,年龄大的靠前,年龄小
 * 的靠后。排序完毕后输出结果。
 *
 * @author Bonnie
 */
public class Test11 {
    public static void main(String[] args) throws IOException, ParseException {
        Test11 t = new Test11();
        //当前目录
        File dir = new File(".");
        //将所有员工读取出来
        List<Emp> list = t.loadEmp(dir);
        //排序集合
        Collections.sort(list, new Comparator<Emp>() {
            public int compare(Emp e1, Emp e2) {
                return e1.getAge() - e2.getAge();
            }

        });
        for (Emp e : list) {
            System.out.println(e);
        }
    }

    /**
     * 从给定目录中读取所有.emp文件并解析为若干Emp对象,然后以
     * 一个List集合形式返回
     *
     * @param dir
     * @return
     * @throws IOException
     * @throws ParseException
     */
    public List<Emp> loadEmp(File dir) throws IOException, ParseException {
        List<Emp> list = new ArrayList<Emp>();
        File[] emps = dir.listFiles(new FileFilter() {
            public boolean accept(File file) {
                return file.getName().endsWith(".emp");
            }
        });
        for (File file : emps) {
            list.add(parseEmp(file));
        }
        return list;
    }

    /**
     * 从指定文件中解析出Emp对象
     *
     * @param file
     * @return
     * @throws ParseException
     */
    public Emp parseEmp(File file) throws IOException, ParseException {
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        //文件多大就创建多大的数组
        byte[] buf = new byte[(int) file.length()];
        //将文件数据全部读取出来并转换为字符串
        int len = raf.read(buf);
        String info = new String(buf, 0, len);
        //解析字符串并转换为Emp对象
        String[] infos = info.split(",");
        String name = infos[0];
        int age = Integer.parseInt(infos[1]);
        String gender = infos[2];
        int salary = Integer.parseInt(infos[3]);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date hiredate = sdf.parse(infos[4]);
        Emp emp = new Emp(name, age, gender, salary, hiredate);
        //打桩
        System.out.println("读取emp:" + emp);
        return emp;
    }
}

package HomeWork.day06;

import java.io.File;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

/**
 * 编写一个程序,将当前目录下所有的员工文件进行读取,并解析出所有员工为Emp
 * 对象并存入Map。其中key为该员工的名字,value为该员工的emp对象。
 * 然后,要求用户输入一个员工名字,若该员工存在,则输出该员工的名字,年龄,工资,以及入职20周年的纪念日当周的周六的日期。
 * 即:输入名字"张三"
 * 若该员工存在,则输出如下格式:
 * 张三,25,5000,2006-02-14
 * 入职20周年纪念日派对日期: 2026-02-14  (注:若入职日期为:2006-02-14)
 * 若该员工不存在,则输出:"查无此人"
 *
 * @author Bonnie
 */
public class Test12 {
    public static void main(String[] args) throws IOException, ParseException {
        Test11 t = new Test11();
        File dir = new File(".");
        //复用Test11读取员工的方法
        List<Emp> list = t.loadEmp(dir);
        System.out.println(list);
        Map<String, Emp> map = new HashMap<String, Emp>();
        //将所有员工存入Map
        for (Emp e : list) {
            map.put(e.getName(), e);
        }
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个员工名字:");
        String name = scanner.nextLine();
        //查看是否有次员工
        if (map.containsKey(name)) {
            Emp e = map.get(name);
            //计算入职20周年纪念日派对日期
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(e.getHiredate());
            //入职20周年
            calendar.add(Calendar.YEAR, 20);
            //设置为当周周六
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            System.out.println(e);
            System.out.println("入职20周年纪念日派对日期:" + sdf.format(calendar.getTime()));

        } else {
            System.out.println("查无此人");
        }
    }
}

package HomeWork.day06;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.net.URISyntaxException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * 将emp.dat文件中所有员工解析出来,并创建为若干Emp实例存入一个
 * 集合,然后输出该集合中每个员工信息。
 * 该文件800字节,每80个字节为一个员工的信息。
 * 其中:
 * name为字符串,长度为32个字节,编码为:UTF-8
 * age为int,长度为4个字节
 * gender为字符串,长度为10个字节,编码为:UTF-8
 * salary为int,长度为4个字节
 * hiredate为字符串,格式"yyyy-MM-dd",长度为30个字节,编码为:UTF-8
 * 格式可参考当前包中emp.jpg图
 * 提示:
 * 使用RandomAccessFile读取字符串时,例如name,可以先读取32个字节,再按照UTF-8
 * 转换为字符串,读取age时可以直接使用readInt方法。依次类推。
 *
 * @author Bonnie
 */
public class Test13 {
    public static void main(String[] args) throws URISyntaxException, IOException, ParseException {
        //使用类加载器加载当前包中的emp.dat文件
        File file = new File(Test13.class.getClassLoader().getResource("day06/emp.dat").toURI());
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        List<Emp> list = new ArrayList<Emp>();
        //用于将读取的入职时间解析为Date
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        //解析10个员工信息
        for (int i = 0; i < 10; i++) {
            //读取员工名字
            String name = readString(raf, 32).trim();
            int age = raf.readInt();
            String gender = readString(raf, 10).trim();
            int salary = raf.readInt();
            String hiredate = readString(raf, 30).trim();
            Emp e = new Emp(name, age, gender, salary, sdf.parse(hiredate));
            list.add(e);
        }
        System.out.println("解析完毕!");
        for (Emp e : list) {
            System.out.println(e);
        }
    }

    /**
     * 从当前RandomAccessFile当前位置读取指定长度的字节并以UTF-8编码
     * 转换为字符串后返回
     *
     * @param raf
     * @param len
     * @return
     * @throws IOException
     */
    public static String readString(RandomAccessFile raf, int len) throws IOException {
        byte[] data = new byte[len];
        raf.read(data);
        return new String(data, "UTF-8");
    }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值