1、Commons-io工具包(需要手动导包)

常见方法: image.png

与流相关的方法

image.png

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;

public class Test1 {
    public static void main(String[] args) throws IOException {
        //先关联本地文件
        File file1 = new File("F:\\Java基础\\Test02\\aa\\copy.txt");
        File file2 = new File("F:\\Java基础\\Test02\\aa\\copy1.txt");

        FileUtils.copyFile(file1,file2);
    }
}
2、Hutool工具包

官方地址:https://www.hutool.cn/

帮助文档:https://apidoc.gitee.com/dromara/hutool/

3、网络爬虫

3.1、获取姓氏的网址:https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d

​ 男生姓名:http://www.haoming8.cn/baobao/10881.html

​ 女生姓名:http://www.haoming8.cn/baobao/7641.html

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test1 {
    public static void main(String[] args) {
        String familyNameNet = "https://hanyu.baidu.com/shici/detail?pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d";
        String boyNameNet = "http://www.haoming8.cn/baobao/10881.html";
        String girlNameNet = "http://www.haoming8.cn/baobao/7641.html";

        String familyNameStr = null;
        String boyNameStr = null;
        String girlNameStr = null;

        //获取姓氏和姓名的正则表达式
        String familyName = "(.{4})(,|。)";

        //爬取数据
        try {
            familyNameStr = webSpider(familyNameNet);
            boyNameStr = webSpider(boyNameNet);
            girlNameStr = webSpider(girlNameNet);

        } catch (IOException e) {
            e.printStackTrace();
        }

        ArrayList<String> familyNameList = getDate(familyNameStr, familyName, 1);
        //对集合进行遍历
        for (String s : familyNameList) {
            System.out.println(s);
        }

    }


    //爬取数据的方法
    public static String webSpider(String net) throws IOException {
        //定义一个StringBuilder来拼接字符串
        StringBuilder sb = new StringBuilder();
        //创建URL对象
        URL url = new URL(net);
        //连接上网址
        final URLConnection con = url.openConnection();
        //读取数据,这里有一个小细节,就是我们调用的是字节流对象,如果有中文的时候就会出现乱码,所以我们需要将它转换为字符流对象
        InputStreamReader isr = new InputStreamReader(con.getInputStream());
        int ch = 0;
        while ((ch = isr.read()) != -1) {
            //直接将读取到的数据拼接到StringBuilder对象中
            sb.append((char) ch);
        }

        //关闭资源
        isr.close();
        //返回字符串
        return sb.toString();

    }

    /**
     * 格式化数据的方法
     *
     * 参数一:表示需要被格式化的字符串
     * 参数二:表示正则表达式
     * 参数三:表示获取正则表达式的那部分内容,例如(.{4})(,|。)就被分成了两个部分,如果写1,则是获取(.{4})的内容
     *
     * */
    private static ArrayList<String> getDate(String familyNameStr, String regex, int index) {
        ArrayList<String> list = new ArrayList<>();
        //按照正则表达式去除不符合要求的数据
        Pattern pattern = Pattern.compile(regex);
        //按照pattern中的规则到字符串中获取数据
        Matcher matcher = pattern.matcher(familyNameStr);
        while (matcher.find()){
            final String group = matcher.group(index);
            //将数据添加到数组中
            list.add(group);
        }
        return list;
    }

}