-
压缩流/解压缩流
-
解压的本质:就是把zip文件中的每一个文件(zipEntry对象)拷贝到另一个文件中
-
文件解压程序(默认目录排在文件前面出现,有漏洞)
javapublic static void unzip(File src,File dest) throws IOException { //创建解压缩流对象 ZipInputStream zis=new ZipInputStream(new FileInputStream(src)); //获取流中的每一个zipEntry对象 ZipEntry entry; while((entry=zis.getNextEntry())!=null){ //判断entry是否是文件夹 if(entry.isDirectory()){ File file=new File(dest,entry.getName()); file.mkdirs(); } else { //创建字节输出流对象 FileOutputStream fos=new FileOutputStream(new File(dest,entry.getName())); int b; while((b=zis.read())!=-1){ fos.write(b); } fos.close(); zis.closeEntry(); } } zis.close(); }
-
-
压缩单个文件的代码:
javapublic static void toZip(File src,File dest) throws IOException { //创建压缩流对象,表示要写在哪里 ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(dest,"Rance.zip"))); //把Rance.md文件当成ZipEntry对象 ZipEntry ze=new ZipEntry("Rance.md"); //把ZipEntry对象放到压缩流中 zos.putNextEntry(ze); //创建写入对象 FileInputStream fis=new FileInputStream(src); int b; while((b=fis.read())!=-1){ zos.write(b); } fis.close(); zos.closeEntry(); zos.close(); }
-
压缩文件夹
javapublic static void toDirZip(File src) throws IOException { String parent = src.getParent(); String name = src.getName(); //创建压缩流对象,关联压缩包 ZipOutputStream zos=new ZipOutputStream(new FileOutputStream(new File(parent+"\\"+name+".zip"))); //获取src里的每一个文件,变成ZipEntry对象,放入到压缩包中 toZip(src,zos,name); zos.close(); } private static void toZip(File src, ZipOutputStream zos,String name) throws IOException { File[] files = src.listFiles(); if(files==null) return; for (File file : files) { if(file.isFile()){ ZipEntry zip=new ZipEntry(name+"\\"+file.getName()); zos.putNextEntry(zip); //写入文件的逻辑 FileInputStream fis=new FileInputStream(file); int b; while((b=fis.read())!=-1){ zos.write(b); } }else{ toZip(file,zos,name+"\\"+file.getName()); } } zos.closeEntry(); }
- Commons-io工具包

-
Hutool工具包:


-
手动从网页中爬取数据:
java//通过链接爬取数据 String familyNameNet="https://hanyu.baidu.com/shici/detail?from=aladdin&pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&smp_names=termBrand2%2Cpoem1"; String boyNameNet="https://qiming.hao86.com/view/26491/"; String girlNameNet="https://qiming.hao86.com/view/181658/"; //爬取html文件 String s = webCrawler(familyNameNet); String boy=webCrawler(boyNameNet); String girl=webCrawler(girlNameNet); //通过正则表达式把html文件中的关键数据分别出来 ArrayList<String> family = getData(s, "([\\u4e00-\\u9fa5]{4})(,|。)", 1); ArrayList<String> boys=getData(boy,"、([\\u4e00-\\u9fa5]{2})",1); ArrayList<String> girlsName=getData(girl,"\\)([\\u4e00-\\u9fa5]{2})",1); //处理数据 ArrayList<String> familyName=new ArrayList<>(); for (String string : family) { for (int i = 0; i < string.length(); i++) { char c = string.charAt(i); familyName.add(c+""); } } //去重 ArrayList<String> boysName=new ArrayList<>(); for (String string : boys) { if(!boysName.contains(string)){ boysName.add(string); } } ArrayList<String> infos = getInfos(familyName, boysName, girlsName, 70, 60); //写出数据 BufferedWriter bw=new BufferedWriter(new FileWriter("nametest.txt")); for (String info : infos) { bw.write(info); bw.newLine(); } bw.close(); } private static ArrayList<String> getInfos(ArrayList<String> familyName, ArrayList<String> boysName, ArrayList<String> girlsName, int boyCount, int girlCount) { ArrayList<String> list=new ArrayList<>(); HashSet<String> boyhs=new HashSet<>(); //创建男的"张三-男-20" while(true){ if(boyhs.size()==boyCount){ break; } Collections.shuffle(familyName); Collections.shuffle(boysName); String s=familyName.getFirst()+boysName.getFirst(); boyhs.add(s); } HashSet<String> girlhs=new HashSet<>(); //创建男的"张三-女-20" while(true){ if(girlhs.size()==girlCount){ break; } Collections.shuffle(familyName); Collections.shuffle(girlsName); String s=familyName.getFirst()+girlsName.getFirst(); girlhs.add(s); } //男生年龄在18-30 Random r=new Random(); for (String boyh : boyhs) { int age=r.nextInt(13)+18; String s=boyh+"-男-"+age; list.add(s); } //女生年龄在18-27 for (String girlh : girlhs) { int age=r.nextInt(10)+18; String s=girlh+"-女-"+age; list.add(s); } Collections.shuffle(list); return list; } public static String webCrawler(String net) throws IOException { //创建url对象 URL url=new URL(net); //建立连接 URLConnection connection = url.openConnection(); //创建流 InputStreamReader isr=new InputStreamReader(connection.getInputStream()); int b; StringBuilder sb=new StringBuilder(); while((b=isr.read())!=-1){ sb.append((char) b); } return sb.toString(); }
-
使用HuTool包进行数据爬取和文件输出:
javaString s = HttpUtil.get("https://hanyu.baidu.com/shici/detail?from=aladdin&pid=0b2f26d4c0ddb3ee693fdb1137ee1b0d&smp_names=termBrand2%2Cpoem1"); List<String> all = ReUtil.findAll("([\\u4e00-\\u9fa5]{4})(,|。)", s, 1); System.out.println(all); FileUtil.writeLines(all,"nametest.txt","UTF-8"); -
随机点名器:
javaBufferedReader br=new BufferedReader(new FileReader("nametest.txt")); ArrayList<String> list=new ArrayList<>(); String s; while((s=br.readLine())!=null){ list.add(s); } br.close(); Collections.shuffle(list); ArrayList<String> boys=new ArrayList<>(); ArrayList<String> girls=new ArrayList<>(); for (String string : list) { if(string.contains("男"))boys.add(string); else girls.add(string); } int boyCount=0; int girlCount=0; Random random=new Random(); while(boyCount!=100000) { int n = random.nextInt(10); if (n > 6){// System.out.println(girls.getFirst()); girlCount++; } else { //System.out.println(boys.getFirst()); boyCount++; } } System.out.println(boyCount); System.out.println(girlCount);