当前位置: 首页 > news >正文

IO流学习

IO流:存储和读取数据的解决方案

 

 

import java.io.FileOutputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//1.创建对象//写出 输入流 OutputStream//本地文件fileFileOutputStream fos =new FileOutputStream("basic-code\\1.txt");//写出数据fos.write(97);//释放资源fos.close();}
}

 

 

import java.io.FileOutputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("basic-code\\1.txt");//fos.write(97);//fos.write(98);byte[] bytes={97,98,99,100,101};//fos.write(bytes);fos.write(bytes,1,3);fos.close();}
}

 

import java.io.FileOutputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {FileOutputStream fos = new FileOutputStream("basic-code\\1.txt");String str ="yjybainchangsigema";byte[] bytes = str.getBytes();// System.out.println(Arrays.toString(bytes));fos.write(bytes);String str2 = "\r\n";byte[] bytes1 = str2.getBytes();fos.write(bytes1);String str3 = "come on";byte[] bytes2 = str3.getBytes();fos.write(bytes2);fos.close();}
}

 

import java.io.FileInputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {FileInputStream fio =new FileInputStream("basic-code\\1.txt");int read = fio.read();System.out.println(read);fio.close();}
}

import java.io.FileInputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//字节输入流循环读取FileInputStream fis =new FileInputStream("baisc-code\\1.txt");int b;/** read:表示读取数据,而且是读取一个数据就移动一次指针* 如果没有变量b* 假设文件数据abcde* while((fis.read())!=-1){System.out.println(fis.read);* 相当于a!=-1      输出b*       c!=-1      输出d*       e!=-1      输出-1* 因此第三方变量必须写* */while((b=fis.read())!=-1){System.out.println((char)b);}fis.close();}
}

文件拷贝的基本代码(小文件)

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//文件拷贝//1.创建对象FileInputStream fis =new FileInputStream("D:\\iii\\movie.mp4");FileOutputStream fos = new FileOutputStream("basic-code\\copy.mp4");//2.拷贝//核心思想:边读边想int b;while((b =fis.read())!=-1){fos.write(b);}//3.释放资源//规则:先开的最后关闭fos.close();fis.close();}
}

 

 

import java.io.FileInputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//1.创建对象FileInputStream fis = new FileInputStream("basic-code\\1.txt");//2.读取数据byte[] bytes = new byte[2];//一次读取多个字节数据 具体多少 跟数组的长度有关//返回值 本子读取到多少个字节数据int len1 = fis.read(bytes);System.out.println(len1);//2String str1 = new String(bytes);System.out.println(str1);int len2 = fis.read(bytes);System.out.println(len2);//2String str2 = new String(bytes);System.out.println(str2);int len3 = fis.read(bytes);System.out.println(len3);//2String str3 = new String(bytes);System.out.println(str3);fis.close();}
}

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//文件拷贝改写long start = System.currentTimeMillis();FileInputStream fis = new FileInputStream("D:\\aaa");FileOutputStream fos = new FileOutputStream("baisc-code\\a");int len;byte[] bytes =new byte[1025*1024*5];while((len=fis.read())!=-1){fos.write(bytes,0,len);}fos.close();fis.close();long end = System.currentTimeMillis();System.out.println(end-start);}
}

 

 字符集详解(ASCII, GBK)

 

 

 

 

 

 

 

 

import java.io.FileInputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//字节流读取中文会出现乱码FileInputStream fis = new FileInputStream("basic-code\\a");int b;while((b= fis.read())!=-1){System.out.println((char)b);}fis.close();}
}

数据流一个个拷贝 肯定就会出现乱码

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//1.创建对象FileInputStream fis = new FileInputStream("basic-code\\a.txt");FileOutputStream fos =new FileOutputStream("basic-code\\1.txt");//2.拷贝int b;while((b=fis.read())!=-1){fos.write(b);}//3.释放资源fos.close();fis.close();}
}

记事本!数据不会丢失目的地和数据源保持一致

 

 

import java.io.IOException;
import java.util.Arrays;public class Test {public static void main(String[] args) throws IOException {//1.编码String str ="ai你哟";byte[] bytes1 = str.getBytes();System.out.println(Arrays.toString(bytes1));//???byte[] bytes2 = str.getBytes("GBK");System.out.println(Arrays.toString(bytes2));//???//2.解码String str2 = new String(bytes1);System.out.println(str2);String str3 = new String(bytes1,"GBK");System.out.println(str3);}
}

 

 

 

 

import java.io.FileReader;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//1.创建对象并关联本地文件FileReader fr = new FileReader("basic-code\\1.txt");//2.读取数据 read()//字符流的底层也是字节流,默认也是一个字节一个字节的读取的.//如果遇到中文就会一次读取多个 GBK依次读两个字节,UTF-8一次读三个字节//在读取之后 方法的底层还会进行解码并转成十进制//最终把这个十进制作为返回值//这个十进制的数据也表示在字符集上的数字// 英文:文件里面二进制数据 0110 0001//read方法进行获取a,解码并转成十进制97//中文:文件里面的二进制数据 11100110  10110001  10001001//read方法进行读取,解码并转成十进制27721//我想看到中文汉字 就是把这些十进制数据 进行强转int ch;while((ch=fr.read())!=-1){System.out.print((char)ch);}//释放资源fr.close();}
}
import java.io.FileReader;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//1.创建对象FileReader fr =new FileReader("basic-code\\1.txt");//2.读取数据char[] chars =new char[2];int len;//fr.read();//读取数据,解码,强转三步合并了,把强转之后的字符放到数组当中//空参的read()+强制类型转换while((len = fr.read(chars))!=-1){//把数组中的数据变成字符串再进行打印System.out.println(new String(chars,0,len));}//3.释放资源fr.close();}
}
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//字节输出流:FileOutputStream fos = new FileOutputStream("basic-code\\1.txt");fos.write(97);//字节流 每次只能操作一个字节 255fos.close();//字符输出流:FileWriter fw =new FileWriter("basic-code\\a.txt");fw.write(7777);//根据字符集的编码方式进行编码 把编码之后的数据写到文件中去fw.close();FileWriter fw1= new FileWriter("basic-code\\1.txt",true);//续写开关//fw1.write("你好");char[] chars ={'a','b','c','我'};fw.write(chars);fw1.close();}
}

 

 

 

 

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//拷贝文件夹 考虑子文件//1.创建对象表示数据源File src =new File("D:\\aaa\\src");//2.创建对象表示目的地File dest = new File("D:\\aaa\\dest");//调用方法开始拷贝copydir(src,dest);}/** 作用:拷贝文件夹* 参数一:数据源* 参数二:目的地** */private static void copydir(File src, File dest) throws IOException {dest.mkdirs();递归//进入数据源File[] files = src.listFiles();//遍历数组for (File file : files) {if(file.isFile()){//判断文件 拷贝 FileInputStream fis =new FileInputStream(file);FileOutputStream fos =new FileOutputStream(new File(dest,file.getName()));byte[] bytes = new byte[1024];int len;while((len=fis.read(bytes))!=-1){fos.write(bytes,0,len);}fos.close();fis.close();}else{//判断文件夹 递归copydir(file,new File(dest,file.getName()));}}}
}

        //文件加密//原始文件FileInputStream fis =new FileInputStream("C:\\girl.jpg");//加密处理FileOutputStream fos =new FileOutputStream("C:\\ency.jpg");//加密处理int b;while((b=fis.read())!=-1){fos.write(b ^2);//随便异或一个数字}fos.close();fis.close();//这个程序操作完成后就可以将源文件删除了 这样别人也不知道是什么东西等到你想看了//你再进行解密
      //前置知识/**  ^:异或* 两边相同:false* 两边不同:true*  0:false*  1:true** 100:110100* 10:1010**      1100100*     ^0001010* ________________*      1101110    --->110*   ^  0001010* ________________*      1100100    --->100* System.out.println(100^10);//110* System.out.println(100^10^10);//100** *///文件加密//原始文件FileInputStream fis =new FileInputStream("C:\\ency.jpg");//加密处理FileOutputStream fos =new FileOutputStream("C:\\redu.jpg");//加密处理int b;while((b=fis.read())!=-1){fos.write(b ^2);//随便异或一个数字}fos.close();fis.close();//这个程序操作完成后就可以将源文件删除了 这样别人也不知道是什么东西等到你想看了//你再进行解密

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;public class Test {public static void main(String[] args) throws IOException {//修改文件中的数据//1.读取数据FileReader fr =new FileReader("basic-code\\a.txt");StringBuilder sb =new StringBuilder();int ch;while((ch = fr.read())!=-1){sb.append((char)ch);}fr.close();System.out.println(sb);//2.排序String str =sb.toString();String[] arrstr =str.split("-");ArrayList<Integer>list = new ArrayList<>();for (String s : arrstr) {int i = Integer.parseInt(s);list.add(i);}//System.out.println(list);Collections.sort(list);//3.写出FileWriter fw =new FileWriter("basic-code\\a.txt");for (int i = 0; i < list.size(); i++) {if(i==list.size()-1){fw.write(list.get(i)+"");//如果直接写数字 文件会变成ASCII码}else{fw.write(list.get(i)+"-");}}fw.close();}
}

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
//细节:文件中的数据不要换行  如果加了换行会有\r\n 读取也会读到
//bom头---占三个字节   编码改为ANSI
public class Test {public static void main(String[] args) throws IOException {//修改文件中的数据//1.读取数据FileReader fr =new FileReader("basic-code\\a.txt");StringBuilder sb =new StringBuilder();int ch;while((ch = fr.read())!=-1){sb.append((char)ch);}fr.close();System.out.println(sb);//2.排序Integer[] arr = Arrays.stream(sb.toString().split("-")).map(Integer::parseInt).sorted().toArray(Integer[]::new);//System.out.println(arr);//3.写出FileWriter fw = new FileWriter("C:\\yjy");String s = Arrays.toString(arr).replace(", ","-");String result = s.substring(1,s.length()-1);//System.out.println(result);fw.write(result);fw.close();}
}

 

 

public class Test {public static void main(String[] args) throws IOException {//1.创建缓冲流的对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("basic-code\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("basic-code\\1.txt"));//2.循环读取int b;while ((b = bis.read()) != -1) {bos.write(b);}//3.释放资源bos.close();bis.close();}
}
public class Test {public static void main(String[] args) throws IOException {//一次读写一个字节数组BufferedInputStream bis = new BufferedInputStream(new FileInputStream("basic-code\\a.txt"));BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream("basic-code\\b.txt"));byte[] bytes =new byte[1024];int len;while((len=bis.read(bytes))!=-1){bos.write(bytes,0,len);}bos.close();bis.close();}
}

 

 

 

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//两个缓冲区之间这不也是一个字节一个字节的进行倒手的吗?? 速度为什么快了?//因为这一段是在内存中运行的速度非常的快/*字符缓冲输入流:* 构造方法:public BufferedReader(Reader r)* 特有方法:public String readLine() 读一整行*///readLine 方法在读取的时候 一次读一整行 遇到空格换行结束//但是他不会把回车读到内存当中 //1.创建字符缓冲输入流的对象BufferedReader br =new BufferedReader(new FileReader("basic-code\\1.txt"));//2.读取数据
//        String line = br.readLine();
//        System.out.println(line);String line;while((line=br.readLine())!=null){System.out.println(line);}//释放资源br.close();}
}
public class Test {public static void main(String[] args) throws IOException {/*字符缓冲输出流* 构造方法:public BufferedWriter(writer r)* 特有方法:public void newLine() 跨平台换行*///1.创建字符缓冲输出流的对象BufferedWriter bw =new BufferedWriter(new FileWriter("b.txt"));//2.写出数据bw.write("你嘴角上扬的样子,百度搜索不到");bw.newLine();bw.write("以后我结婚你一定要来 ,没有新娘我会很尴尬");//3.释放资源bw.close();}
}

import java.io.*;public class Test {public static void main(String[] args) throws IOException {//拷贝文件 //四种方法拷贝文件,并统计各自用时//字节流的基本流:依次读写一个字节//字节流的基本流:一次读写一个字节数组//字节缓冲流:一次读写一个字节//字节缓冲流:一次读写一个字节数组long start = System.currentTimeMillis();method1();method2();//16method3();//95method4();//17long end=System.currentTimeMillis();System.out.println((end-start)/1000.0+"秒");}private static void method3() throws IOException {//字节缓冲流BufferedInputStream bis =new BufferedInputStream(new FileInputStream("1.txt"));BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream("2.txt"));int b;while((b=bis.read())!=-1){bos.write(b);}bos.close();bis.close();}private static void method4() throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("1.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("2.txt"));byte[] bytes = new byte[8192];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes,0,len);}bos.close();bis.close();}private static void method2() throws IOException {FileInputStream fis = new FileInputStream("C:\\1.txt");FileOutputStream fos=new FileOutputStream("1.txt");byte[] bytes= new byte[1024];int len;while((len=fis.read(bytes))!=-1){fos.write(bytes,0,len);}fos.close();fis.close();}private static void method1() throws IOException {FileInputStream fis = new FileInputStream("C:\\1.txt");FileOutputStream fos = new FileOutputStream("1.txt");int b;while ((b = fis.read()) != -1) {fos.write(b);}fos.close();fis.close();}}

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;public class Test {public static void main(String[] args) throws IOException {//需求:把<出师表>的文章顺序进行恢复到一个新文件中//1.读取数据BufferedReader br =new BufferedReader(new FileReader("basic-code"));String line;ArrayList<String>list=new ArrayList<>();while((line=br.readLine())!=null){//  System.out.println(line);list.add(line);}br.close();//2.排序//排序规则:按照每一行前面的序号进行排序Collections.sort(list, new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {//获取o1,o2的序号int i = Integer.parseInt(o1.split("\\.")[0]);int i1 = Integer.parseInt(o2.split("\\.")[0]);return i-i1;}});//写出BufferedWriter bw =new BufferedWriter(new FileWriter("1.txt"));for (String s : list) {bw.write(s);bw.newLine();}bw.close();}
}
import java.io.*;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;public class Test {public static void main(String[] args) throws IOException {//需求:把<出师表>的文章顺序进行恢复到一个新文件中BufferedReader br =new BufferedReader(new FileReader("1.txt"));String line;TreeMap<Integer,String> tm = new TreeMap<>();while((line=br.readLine())!=null){String[] arr =line.split("\\.");//0:序号  1:内容tm.put(Integer.parseInt(arr[0]),line);}br.close();//System.out.println(tm);//2.写出数据BufferedWriter bw =new BufferedWriter(new FileWriter("basic-code"));Set<Map.Entry<Integer,String>>entries = tm.entrySet();for(Map.Entry<Integer,String>entry:entries){String value = entry.getValue();bw.write(value);bw.newLine();}bw.close();}
}

 

import java.io.*;public class Test {public static void main(String[] args) throws IOException {//能用计数器的知识来做吗?不能 因为变量创建在内存中 程序重启 又能够再来三次//为了永久化存储所以要保存在文件当中//1.把文件中的数字读取到内存中//一次读一行 而不是读一个BufferedReader br =new BufferedReader(new FileReader("basic-code"));String line =br.readLine();int count = Integer.parseInt(line);//表示当前软件又运行了一次count++;//2.判断if(count<=3){System.out.println("欢迎使用本软件,第"+count+"次免费使用");}else{System.out.println("本软件只能使用三次,请注册会员继续使用");}//<=3:正常运行//>3:不能运行//3.把自增之后的count写出到文件当中BufferedWriter bw = new BufferedWriter(new FileWriter("basic-code"));//缓冲区输出流在关联文件的时候,文件存在就会清空//原则:IO:随用随创建//什么时候不用就关掉bw.write(count+"");//97 abw.close();}
}

 

import java.io.*;
import java.nio.charset.Charset;public class Test {public static void main(String[] args) throws IOException {//利用转换流按照指定字符编码读取(了解)/** 因为JDK11:这种方法被淘汰了  --->替代方案(掌握)*///        //1.创建对象并指定字符编码(了解即可)
//        InputStreamReader isr =new InputStreamReader(new FileInputStream("basic-code"),"GBK");
//        //2.读取数据
//        int ch;
//        while((ch=isr.read())!=-1){
//            System.out.println((char)ch);
//        }
//        //3.释放资源
//        isr.close();//掌握FileReader fr = new FileReader("basic-code", Charset.forName("GBK"));// 2.读取数据int ch;while((ch=fr.read())!=-1){System.out.println((char)ch);}//3.释放资源fr.close();}
}

import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.Charset;public class Test {public static void main(String[] args) throws IOException {//利用转换流按照指定字符编码写出(了解)//        //1.创建转换流对象
//        OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream("basic-code"),"GBK");
//        //2.写出数据
//        osw.write("你好你好");
//        //3.释放资源
//        osw.close();//替代方案FileWriter fw = new FileWriter("basic-code", Charset.forName("GBK"));fw.write("你好你好");fw.close();}
}

 

import java.io.*;
import java.nio.charset.Charset;public class Test {public static void main(String[] args) throws IOException {//将本地文件中GBK文件 转成UTF-8//1.JDK以前的方案InputStreamReader isr = new InputStreamReader(new FileInputStream("basic-code"),"GBK");OutputStreamWriter osw =new OutputStreamWriter(new FileOutputStream("basic-code1"),"UTF-8");int b;while ((b= isr.read())!=-1){osw.write(b);}osw.close();isr.close();//替代方案FileReader fr =new FileReader("basic-code", Charset.forName("GBK"));FileWriter fw =new FileWriter("basic-code1",Charset.forName("UTF-8"));int b;while((b=fr.read())!=-1){fw.write(b);}fw.close();fr.close();}
}

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;public class Test {public static void main(String[] args) throws IOException {//利用字节流读取文件中的数据 每次读一整行,而且不能出现乱码//1.字节流在读取中文的时候,是会出现乱码的,但是字符流可以搞定//2.字节流里面没有读一整行的方法的 只有字符缓冲流可以搞定//        FileInputStream fis= new FileInputStream("basic-code");
//        InputStreamReader isr =new InputStreamReader(fis);
//
//        BufferedReader br =new BufferedReader(isr);
//        String s = br.readLine();
//        br.close();BufferedReader br =new BufferedReader(new InputStreamReader(new FileInputStream("yjy.txt")));String line;while((line=br.readLine())!=null){System.out.println(line);}br.close();}
}

 

 

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;public class Test {public static void main(String[] args) throws IOException {/** serializable接口里面没有抽象方法,标记型接口* 一旦实现了这个接口 那么就表示当前的student类可以被序列化* 理解:* 一个物品的合格证* *///序列化流Student stu =new Student("zhangsan",23);ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream("basic-code\\a.txt"));oos.writeObject(stu);oos.close();}
}
import java.io.Serializable;public class Student implements Serializable {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Student{name = " + name + ", age = " + age + "}";}
}

 

 

自己设置一个提示-版本号

在搜索框搜索Serializable

public class Student implements Serializable {@Serialprivate static final long serialVersionUID = 5498121245996411513L;// private static final long serialVersionUID = 1L;private String name;private int age;private String address;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}public String toString() {return "Student{name = " + name + ", age = " + age + "}";}
}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;public class Test {public static void main(String[] args) throws IOException, ClassNotFoundException {///用对象流读写多个对象//需求://将多个自定义对象序列化到文件中,但是由于对象的个数不确定,反序列化流该如何读取呢?Student s1 =new Student("zhangsan",23,"南京");Student s2 =new Student("lisi",24,"重庆");Student s3 =new Student("wangwu",25,"北京");//序列化多个对象ArrayList<Student>list =new ArrayList<>();list.add(s1);list.add(s2);list.add(s3);ObjectOutputStream oos =new ObjectOutputStream(new FileOutputStream("basic-code"));oos.writeObject(list);oos.close();}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;public class Demo {public static void main(String[] args) throws IOException, ClassNotFoundException {//反序列化流的对象ObjectInputStream ois = new ObjectInputStream(new FileInputStream("basic-code"));
//
//        Student s1 = (Student) ois.readObject();
//        Student s2 = (Student) ois.readObject();
//        Student s3 = (Student) ois.readObject();ArrayList<Student>list = (ArrayList<Student>) ois.readObject();for (Student student : list) {System.out.println(student);}ois.close();}
}

 

 

 

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.Charset;public class Test {public static void main(String[] args) throws IOException, ClassNotFoundException {//打印流//1.创建字节打印流的对象PrintStream ps =new PrintStream(new FileOutputStream("myio\\1.txt"),true, Charset.forName("UTF-8"));//2.写出数据ps.println(97);//写出+自动刷新+自动换行ps.print(true);ps.println();ps.printf("%s 爱上了 %s","阿珍","阿强");//3.释放资源ps.close();}
}
public class Test {public static void main(String[] args) throws IOException, ClassNotFoundException {//打印流//1.创建字符打印流PrintWriter pw =new PrintWriter(new FileWriter("basic-code"),true);pw.println("dhuaidhwahdo");pw.print("你好你好");pw.close();}
}

解压缩流/压缩流

 

 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;public class Test {public static void main(String[] args) throws IOException, ClassNotFoundException {//1.创建一个File表示要解压的压缩包File src =new File("D:\\aaa.zip");//2.创建File对象表示解压的目的地File dest = new File("D:\\");//调用方法unzip(src,dest);}//定义一个方法用来解压public static void unzip(File src,File dest) throws IOException {//解压的本质:把压缩包里面的每一个文件或者文件夹读取出来 按照层级拷贝到目的地当中//创建一个解压缩流用来读取压缩包中的数据ZipInputStream zip =new ZipInputStream(new FileInputStream(src));//先获取到压缩包里面的每一个zipentry对象//        for (int i = 0; i < 100; i++) {
//            ZipEntry entry = zip.getNextEntry();
//            System.out.println(entry);//找不到就是返回null
//        }//表示当前在压缩包中获取到的文件或者文件夹ZipEntry entry;while ((entry = zip.getNextEntry())!=null){System.out.println(entry);//文件夹:需要在目的地dest处创建一个同样的文件夹//文件:需要读取到压缩包中的文件,并把他存放到目的地dest文件夹中(按照层级目录进行存放)if(entry.isDirectory()){//文件夹:需要在目的地dest处创建一个同样的文件夹File file =new File(dest,entry.toString());file.mkdirs();}else{//文件:需要读取到压缩包的文件,并把他存放到目的地dest文件夹中(按照层级目录进行存放)FileOutputStream fos = new FileOutputStream(new File(dest,entry.toString()));int b;while((b =zip.read())!=-1){//写到目的地fos.write(b);}fos.close();//表示在压缩包中的一个文件处理完毕了zip.closeEntry();}}zip.close();}
}

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class Test {public static void main(String[] args) throws IOException, ClassNotFoundException {//压缩单个文件 ->压缩包//1.创建File对象表示要压缩的文件File src = new File("D:\\yjy.txt");//2.创建File对象表示压缩包的位置File dest = new File("D:\\");//3.调用方法来压缩toZip(src,dest);}/** 作用:压缩* 参数一:表示要压缩的文件** 参数二:表示压缩包的位置** */public static void toZip(File src,File dest) throws IOException {//1.创建压缩流关联压缩包ZipOutputStream zos =new ZipOutputStream(new FileOutputStream(new File(dest,"yjy.zip")));//2.创建ZipEntry对象,表示压缩包里面的每一个文件和文件夹ZipEntry entry = new ZipEntry("yjy.txt");//3.把ZipEntry对象放到压缩包当中zos.putNextEntry(entry);//4.把src里面的数据写到压缩包中FileInputStream fis = new FileInputStream(src);int b;while((b=fis.read())!=-1){zos.write(b);}zos.closeEntry();zos.close();}
}

 

import java.io.File;
import java.io.IOException;public class DEMO {public static void main(String[] args) throws IOException {
//        File src =new File("basic-code\\1.txt");
//        File dest =new File("basic-code\\copy.txt");
//
//        FileUtils.copyFile(src,dest);//用这个包直接拷贝了//        File src =new File("D:\\aaa");
//        File dest =new File("D:\\bbb");
//        FileUtils.copyDirectory(src,dest);//        File src =new File("D:\\aaa");
//        File dest =new File("D:\\bbb");
//        FileUtils.copyDirectoryToDirectory(src,dest);//作用:bbb:里面有aaa然后有aaa里面的东西File src =new File("D:\\aaa");FileUtils.deleteDirectory(src);File dest =new File("D:\\bbb");FileUtils.cleanDirectory(dest);}
}

 

 

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;public class DEMO {public static void main(String[] args) throws IOException {//Hutool//因为里面的方法都是静态的所以直接用类名就可以调用了File file = FileUtil.file("D:\\aaa", "bbb", "a.txt");System.out.println(file);//D:\aaa\bbb\a.txtFile f =new File("a.txt");f.createNewFile();//如果父级路径不存在那么会报错//Hutool 里面的touch方法如果找不到这个父级路径会帮我们创建File touch = FileUtil.touch(file);System.out.println(touch);ArrayList<String>list =new ArrayList<>();list.add("aaa");list.add("aaa");list.add("aaa");File file1 = FileUtil.writeLines(list, "D:\\a.txt", "UTF-8", false);System.out.println(file1);File file2 = FileUtil.appendLines(list, "D:\\a.txt", "UTF-8");System.out.println(file2);List<String> strings = FileUtil.readLines("D:\\a.txt", "UTF-8");System.out.println(list);}
}

官网:
    https://hutool.cn/
API文档:
    https://apidoc.gitee.com/dromara/hutool/

中文使用文档:
    https://hutool.cn/docs/#/

相关文章:

IO流学习

IO流:存储和读取数据的解决方案 import java.io.FileOutputStream; import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//1.创建对象//写出 输入流 OutputStream//本地文件fileFileOutputStream fos new FileOutputS…...

新手HTML和CSS的常见知识点

​​​​ 目录 1.HTML标题标签&#xff08;到&#xff09;用于定义网页中的标题&#xff0c;并按照重要性递减排列。例如&#xff1a; 2.HTML段落标签&#xff08;&#xff09;用于定义网页中的段落。例如&#xff1a; 3.HTML链接标签&#xff08;&#xff09;用于创建链接…...

RocketMQ系统性学习-RocketMQ领域模型及Linux下单机安装

MQ 之间的对比 三种常用的 MQ 对比&#xff0c;ActiveMQ、Kafka、RocketMQ 性能方面&#xff1a; 三种 MQ 吞吐量级别为&#xff1a;万&#xff0c;百万&#xff0c;十万消息发送时延&#xff1a;毫秒&#xff0c;毫秒&#xff0c;微秒可用性&#xff1a;主从&#xff0c;分…...

微服务架构之争:Quarkus VS Spring Boot

在容器时代&#xff08;“Docker时代”&#xff09;&#xff0c;无论如何&#xff0c;Java仍然活着。Java在性能方面一直很有名&#xff0c;主要是因为代码和真实机器之间的抽象层&#xff0c;多平台的成本&#xff08;一次编写&#xff0c;随处运行——还记得吗&#xff1f;&a…...

如何使用ArcGIS Pro拼接影像

为了方便数据的存储和传输&#xff0c;我们在网上获取到的影像一般都是分块的&#xff0c;正式使用之前需要对这些影像进行拼接&#xff0c;这里为大家介绍一下ArcGIS Pro中拼接影像的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的数据是从水经微图中下载的…...

[论文笔记] chatgpt系列 SparseMOE—GPT4的MOE结构

SparseMOE: 稀疏激活的MOE Swtich MOE,所有token要在K个专家网络中,选择一个专家网络。 显存增加。 Experts Choice:路由MOE:​​​​​​​ 由专家选择token。这样不同的专家都选择到某个token,也可以不选择该token。 由于FFN层的时间复杂度和attention层不同,FFN层的时…...

C# WPF上位机开发(键盘绘图控制)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在软件开发中&#xff0c;如果存在canvas图像的话&#xff0c;一般有几种控制方法。一种是鼠标控制&#xff1b;一种是键盘控制&#xff1b;还有一…...

《地理信息系统原理》笔记/期末复习资料(10. 空间数据挖掘与空间决策支持系统)

目录 10. 空间数据挖掘与空间决策支持系统 10.1. 空间数据挖掘 10.1.1. 空间数据挖掘的概念 10.1.2. 空间数据挖掘的方法与过程 10.1.3. 空间数据挖掘的应用 10.2. 空间决策支持系统 10.2.1. 空间决策支持系统的概念 10.2.2. 空间决策支持系统的结构 10.2.3. 空间决策…...

uniapp播放 m3u8格式视频 兼容pc和移动端

支持全自动播放、设置参数 自己摸索出来的,花了一天时间,给点订阅支持下,订阅后,不懂的地方可以私聊我。 代码实现 代码实现 1.安装dplayer组件 npm i dplayer2. static/index.html下引入 hls 引入hls.min.js 可以存放在static项目hls下面<script src="/static…...

产品经理之Axure的元件库使用详细案例

⭐⭐ 产品经理专栏&#xff1a;产品专栏 ⭐⭐ 个人主页&#xff1a;个人主页 ​ 目录 前言 一.Axure的元件库的使用 1.1 元件介绍 1.2 基本元件的使用 1.2.1 矩形、按钮、标题的使用 1.2.2 图片及热区的使用 1.3 表单元件及表格元件的使用 1.3.1表单元件的使用 1.3.…...

数字化转型对企业有什么好处?

引言 数字化转型已经成为当今商业领域中的一股强大力量&#xff0c;它不仅仅是简单的技术更新&#xff0c;更是企业发展的重要战略转变。随着科技的迅猛发展和全球化竞争的加剧&#xff0c;企业们正在积极探索如何将数字化的力量融入到他们的运营和战略中。 数字化转型不仅是传…...

微信小程序:按钮禁用,避免按钮重复提交

wxml <view class"modal-buttons"><view class"one_btn" bindtap"submit">确认</view><view class"two_btn" bindtap"cancel">取消</view> </view> wxss /* 按钮 */ .modal-buttons…...

JAVA 异常分类及处理

JAVA 异常分类及处理 概念 如果某个方法不能按照正常的途径完成任务&#xff0c;就可以通过另一种路径退出方法。在这种情况下会抛出一个封装了错误信息的对象。此时&#xff0c;这个方法会立刻退出同时不返回任何值。另外&#xff0c;调用这个方法的其他代码也无法继续执行&…...

C语言--求数组的最大值和最小值【两种方法】

&#x1f357;方法一&#xff1a;用for循环遍历数组&#xff0c;找出最大值与最小值 &#x1f357;方法二&#xff1a;用qsort排序&#xff0c;让数组成为升序的有序数组&#xff0c;第一个值就是最小值&#xff0c;最后一个是最大值 完整代码&#xff1a; 方法一&#xff1a; …...

ES-组合与聚合

ES组合查询 1 must 满足两个match才会被命中 GET /mergeindex/_search {"query": {"bool": {"must": [{"match": {"name": "liyong"}},{"match_phrase": {"desc": "liyong"}}]}}…...

在 Spring Boot 中发送邮件简单实现

Spring Boot 对于发送邮件这种常用功能也提供了开箱即用的 Starter&#xff1a;spring-boot-starter-mail。 通过这个 starter&#xff0c;只需要简单的几行配置就可以在 Spring Boot 中实现邮件发送&#xff0c;可用于发送验证码、账户激活等等业务场景。 本文将通过实际的案…...

深入理解网络 I/O:单 Selector 多线程|单线程模型

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…...

Kafka Avro序列化之三:使用Schema Register实现

为什么需要Schema Register 注册表 无论是使用传统的Avro API自定义序列化类和反序列化类 还是 使用Twitter的Bijection类库实现Avro的序列化与反序列化,这两种方法都有一个缺点:在每条Kafka记录里都嵌入了schema,这会让记录的大小成倍地增加。但是不管怎样,在读取记录时…...

EasyExcel

概述 GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具 EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的…...

java 探针两种模式实战

分为两种 程序运行前的agent&#xff1a;premain 程序运行中的agent&#xff1a;agentmain 在程序运行前的agent javaagent是java命令的一个参数&#xff0c;所以需要通过-javaagent 来指定一个jar包&#xff08;就是我们要做的代理包&#xff09;能够实现在主程序运行前来执行…...

uniGUI之MASK遮罩

在页面进行后台数据库操作的时候&#xff0c;不想 用户再进行 页面上的 其他操作&#xff0c;这时候就要 将页面 遮罩。例如UniDBGrid有LoadMask属性。 1]使用ScreenMask函数 2]JS调用 3]一个控件控制遮罩另一个控件(如Button遮罩UniDBGrid) //很简单&#xff0c;本例子就是告…...

DevOps云原生创建devops流水线(微服务项目上传git,打包镜像,部署k8s)

开发和运维人员的解决方案 一、中间件的部署&#xff08;Sentinel/MongoDB/MySQL&#xff09; 二、创建DevOps工程 邀请成员 三、创建流水线 四、编辑流水线 ①、拉取代码&#xff08;若失败&#xff0c;则将制定容器改为maven&#xff09; 若失败&#xff0c;则将命令改…...

【vim 学习系列文章 13.1 -- 自动命令autocmd 根据文件类型设置vim参数】

文章目录 autocmd 根据文件类型配置vim参数vim 文本类型 autocmd 根据文件类型配置vim参数 在 Vim 中&#xff0c;你可以使用 autocmd &#xff08;自动命令&#xff09;来根据文件类型自动执行特定的函数。首先&#xff0c;你需要定义这些函数&#xff0c;然后使用 autocmd 与…...

算法基础概念之数据结构

邻接表 每个点作为头节点接一条链表 链表中元素均为该头节点指向的点 优先队列 参数: ①储存元素类型 ②底层使用的存储结构(一般为vector) ③比较方式(默认小于)...

解决ES伪慢查询

一、问题现象 服务现象 服务接口的TP99性能降低 ES现象 YGC&#xff1a;耗时极其不正常, 峰值200次&#xff0c;耗时7sFULL GC&#xff1a;不正常,次数为1但是频繁&#xff0c;STW 5s慢查询&#xff1a;存在慢查询5 二 解决过程 1、去除干扰因素 从现象上看应用是由于某种…...

关于Ubuntu22.04恢复误删文件的记录

挂载在Ubuntu22.04下的固态盘有文件被误删了&#xff0c;该固态盘是ntfs格式的。 在网上找了很多教程&#xff0c;最后决定用TestDisk工具进行恢复。 现记录如下&#xff1a; Ubuntu安装testdisk sudo apt-get install testdisk运行testdisk sudo testdisk得到 我选择的是…...

Docker笔记:Docker Swarm, Consul, Gateway, Microservices 集群部署

关于 Consul 服务 Consul是Go语言写的开源的服务发现软件Consul具有服务发现、健康检查、 服务治理、微服务熔断处理等功能 Consul 部署方式1: 直接在linux 上面部署 consul 集群 1 &#xff09;下载 在各个服务器上 下载 consul 后解压并将其目录配置到环境变量中&#xff…...

浅析AI视频分析与视频管理系统EasyCVR平台及场景应用

人工智能的战略重要性导致对视频智能分析的需求不断增加。鉴于人工智能视觉技术的巨大潜力&#xff0c;人们的注意力正在从传统的视频监控转移到计算机视觉的监控过程自动化。 1、什么是视频分析&#xff1f; 视频分析或视频识别技术&#xff0c;是指从视频片段中提取有用信息…...

跨站点分布式多活存储建设方案概述

1-伴随着私有云、海量非结构数据的爆炸性增长&#xff0c;软件定义存储已经成为用户构建“敏捷IT” 架构的数据基石&#xff0c;同时越来越多的关键业务接入“敏捷IT” 架构。在分布式软件定义存储的产品架构下&#xff0c;怎样既保证对爆炸数据量的平稳承接&#xff0c;又能对…...

Github 2023-12-16开源项目日报Top10

根据Github Trendings的统计&#xff0c;今日(2023-12-16统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目2非开发语言项目2TypeScript项目1Jupyter Notebook项目1Go项目1PHP项目1JavaScript项目1C#项目1 精…...

深圳网站建设信科便宜/济南seo优化

官方API说明文档 http://www.newtonsoft.com/json/help/html/N_Newtonsoft_Json.htm http://www.newtonsoft.com/ http://json.codeplex.com/ 安装:1.解压下载文件,得到Newtonsoft.Json.dll2.在项目中添加引用..序列化和反序列在.net项目中: Product product new Product(); p…...

网站建设珠海/凡科建站怎么用

一、引言要评价一个系统的性能&#xff0c;通常有不同的指标&#xff0c;相应的会有不同的测试方法和测试工具&#xff0c;一般来说为了确保测试结果的公平和权威性&#xff0c;会选用比较成熟的商业测试软件。但在特定情形下&#xff0c;只是想要简单比较不同系统或比较一些函…...

温州网络公司网站建设/恢复正常百度

一、前言我们在使用爬虫程序爬取网页时&#xff0c;一般对于静态页面的爬取是比较简单的&#xff0c;之前写过挺多的案例。但是对于使用js动态加载的页面如何爬取呢&#xff1f;对于动态js页面的爬取有以下几种爬取的方式&#xff1a;通过seleniumphantomjs实现。phantomjs是一…...

wordpress斜杠自动成-/seo网站课程

一、场景 相信很多phper都会遇到这样的场景&#xff0c;操作数据库一次性请求返回结果集过大&#xff0c;而又需要对结果集进行处理从而导致PHP内存开销过大。当然如果你使用过ThinkPHP和Laravel框架&#xff08;其他框架或许也有类似方法&#xff0c;未使用过尚不清&#xff…...

做网站外包的公司好干嘛/网站seo博客

1.对于大型的游戏产品都会有剧情, 其实剧情不仅仅是简单的过度演示&#xff0c;优秀的剧情可以是低操作高细节的内置"剧情小游戏"转载于:https://www.cnblogs.com/vilyLei/articles/4047592.html...

外贸公司的网站/建站公司最新报价

最近学习react&#xff0c;使用命令启动项目&#xff0c;发现一只卡在Starting the development server… 解决办法&#xff1a; 1、在电脑管家中找到信任区 2、选择添加文件&#xff0c;将powershell.exe添加到信任项 powershell.exe的路径为&#xff1a;C:\Windows\System…...