javase复习day29 io

高级流

缓冲流效率较高。

字节缓冲流

 

public class Demo1 {public static void main(String[] args) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("javaseday29\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("javaseday29\\b.txt"));int len;while ((len = bis.read()) != -1){bos.write(len);}bos.close();bis.close();}
}
public class Demo2 {public static void main(String[] args) throws IOException {BufferedInputStream bis = new BufferedInputStream(new FileInputStream("javaseday29\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("javaseday29\\b.txt"));int len;byte[] bytes = new byte[1024];while ((len = bis.read(bytes)) != -1){bos.write(bytes,0,len);}bos.close();bis.close();}
}

字符缓冲流

特有方法

public class Demo1 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new FileReader("javaseday29\\a.txt"));//        String s = br.readLine();
//        System.out.print(s);
//
//        String s1= br.readLine();
//        System.out.print(s1);//BufferedReader流不会读取换行符,也就是读取的数据如果不换行就会在同一行//返回值为String类型,如果文件中无数据则返回nullString str;while ((str = br.readLine()) != null){System.out.println(str);}br.close();}
}
public class Demo2 {public static void main(String[] args) throws IOException {BufferedWriter bw = new BufferedWriter(new FileWriter("javaseday29\\b.txt"));bw.write("2-1-3-4-7-8");//换行bw.newLine();bw.write("我是一只小小小小鸟");bw.newLine();bw.write("怎么发怎么飞也飞不高");bw.close();}
}

缓冲流小结

综合练习

练习一:拷贝文件

public class Test
{public static void main(String[] args) throws IOException {//字节流的基本流拷贝文件FileInputStream fis = new FileInputStream("javaseday29\\csb.txt");FileOutputStream fos = new FileOutputStream("javaseday29\\csbcopy.txt");long start = System.currentTimeMillis();int ch;while ((ch = fis.read())!= -1){fos.write(ch);}long end = System.currentTimeMillis();fos.close();fis.close();System.out.println(end - start);//10}
}
public class Test2 {public static void main(String[] args) throws IOException {//字节流的基本流读取字节数组拷贝文件FileInputStream fis = new FileInputStream("javaseday29\\csb.txt");FileOutputStream fos = new FileOutputStream("javaseday29\\csbcopy.txt");long start = System.currentTimeMillis();int len;//由于使用1024速度太快,减小数组的大小byte[] bytes = new byte[10];while ((len = fis.read(bytes))!= -1){fos.write(bytes,0,len);}long end = System.currentTimeMillis();fos.close();fis.close();System.out.println((end - start)/1.0);//1.0}
}
public class Test3 {public static void main(String[] args) throws IOException {//字节流的缓冲流拷贝文件FileInputStream fis = new FileInputStream("javaseday29\\csb.txt");FileOutputStream fos = new FileOutputStream("javaseday29\\csbcopy.txt");BufferedInputStream bis = new BufferedInputStream(fis);BufferedOutputStream bos = new BufferedOutputStream(fos);long start = System.currentTimeMillis();int len;//由于使用1024速度太快,减小数组的大小while ((len = bis.read())!= -1){bos.write(len);}long end = System.currentTimeMillis();fos.close();fis.close();System.out.println((end - start)/1.0);//0.0}
}
public class Test4 {public static void main(String[] args) throws IOException {//字节流的缓冲流读取字节数组拷贝文件FileInputStream fis = new FileInputStream("javaseday29\\csb.txt");FileOutputStream fos = new FileOutputStream("javaseday29\\csbcopy.txt");BufferedInputStream bis = new BufferedInputStream(fis);BufferedOutputStream bos = new BufferedOutputStream(fos);long start = System.currentTimeMillis();int len;//由于使用1024速度太快,减小数组的大小byte[] bytes = new byte[10];while ((len = bis.read(bytes))!= -1){bos.write(bytes,0,len);}long end = System.currentTimeMillis();fos.close();fis.close();System.out.println((end - start)/1.0);//0.0}
}

练习二:修改文本顺序

public class Test {public static void main(String[] args) throws IOException {//字符流获取BufferedReader br = new BufferedReader(new FileReader("javaseday29\\csb.txt"));BufferedWriter bw = new BufferedWriter(new FileWriter("javaseday29\\csbcopy2.txt"));//获取数据,将数据存入TreeMap中进行排序TreeMap<Integer,String> tm = new TreeMap<>();//获取数据String str;while ((str = br.readLine())!=null){//处理数据写入数中//获取句首的序号String numStr = str.substring(0, 1);Integer num = Integer.parseInt(numStr);//处理句首的无关数据String substring = str.substring(2);//加入TreeMap中tm.put(num,substring);}//按照顺序写入新文件
//        System.out.println(tm);for (Integer i : tm.keySet()) {String s = tm.get(i);System.out.println(s);bw.write(s);bw.newLine();}//关闭资源bw.close();br.close();}}

练习三:软件运行的次数

public class Test {public static void main(String[] args) throws IOException {app();app();app();app();}private static void app() throws IOException {BufferedReader br = new BufferedReader(new FileReader("javaseday29\\4.txt"));//读取数据String read = br.readLine();
//        System.out.println(read);br.close();//判断read的大小选择输出的switch (read){case "1":System.out.println("欢迎使用本软件,第一次使用免费");break;case "2":System.out.println("欢迎使用本软件,第二次使用免费");break;case "3":System.out.println("欢迎使用本软件,第三次使用免费");break;default:System.out.println("本软件只能免费使用三次,欢迎您注册会员后继续使用");break;}//跟新文件Integer end = Integer.parseInt(read)+1;String endstr = end.toString();BufferedWriter bw = new BufferedWriter(new FileWriter("javaseday29\\4.txt"));bw.write(endstr);bw.close();}
}

转换流

应用场景

练习

练习一:

public class Demo1 {public static void main(String[] args) throws IOException {/*利用轮换流按照指定的字符编码读取(了解)*///方法一(不推荐)
//        InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\gbkfile.txt"),"GBK");
//
//        int ch;
//        while ((ch = isr.read())!= -1){
//            System.out.print((char) ch);
//        }
//        isr.close();//方法二(掌握)FileReader fr = new FileReader("C:\\\\Users\\\\20724\\\\Desktop\\\\demo\\\\javase2day01\\\\javaseday29\\\\gbkfile.txt", Charset.forName("GBK"));int ch;while ((ch = fr.read())!= -1){System.out.print((char) ch);}fr.close();}
}
public class Demo2{public static void main(String[] args) throws IOException {/*利用轮换流按照指定的字符编码写入*///方法一(不推荐)
//        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\c.txt"),"GBK");
//
//        String str = "泥淖你好";
//        osw.write(str);
//
//        osw.close();FileWriter fw = new FileWriter(new File("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\c.txt"),Charset.forName("GBK"));String str = "泥淖你好";fw.write(str);fw.close();}
}
public class Demo3 {public static void main(String[] args) throws IOException {/*GBK转UTF-8*///方法一(不推荐)
//        InputStreamReader isr = new InputStreamReader(new FileInputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\gbkfile.txt"),"GBK");
//        OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\e.txt"),"UTF-8");
//
//        int ch;
//        while ((ch = isr.read())!= -1){System.out.print((char) ch);
//            osw.write(ch);
//        }
//        osw.close();
//        isr.close();//方法二FileReader fr = new FileReader("javaseday29\\gbkfile.txt", Charset.forName("GBK"));FileWriter fw = new FileWriter(new File("javaseday29\\d.txt"),Charset.forName("UTF-8"));int ch;while ((ch = fr.read())!= -1){fw.write(ch);}fw.close();fr.close();}
}

练习二:

public class Demo4 {public static void main(String[] args) throws IOException {
//        FileInputStream fis = new FileInputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\csb.txt");
//        InputStreamReader isr = new InputStreamReader(fis);
//        BufferedReader br = new BufferedReader(isr);
//
//        String str = br.readLine();
//        System.out.println(str);
//        br.close();BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\csb.txt")));String str;while ((str = br.readLine())!=null){System.out.println(str);}br.close();}
}

转换流总结

序列化流

构造方法

public class Demo1 {public static void main(String[] args) throws IOException {ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\src\\main\\java\\xuleihua\\a.txt"));Student st = new Student("zhnagsan",20);oos.writeObject(st);oos.close();}
}

/*** Serializable 实现这个接口后才可以被序列化*/
public class Student implements Serializable {private String name;private int age;

反序列化流

public class Demo2 {public static void main(String[] args) throws IOException, ClassNotFoundException {//反序列化流ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\src\\main\\java\\xuleihua\\a.txt"));//        Object o = ois.readObject();Student o = (Student) ois.readObject();System.out.println(o);ois.close();}
}

细节

练习

public class Demo3 {public static void main(String[] args) throws IOException {//文件中序列化多个对象,无法知道有几个可以将对象存入集合中将集合进行序列化Student s1= new Student("zahngsan",20,1);Student s2= new Student("lisi",20,1);Student s3= new Student("wangwu",20,1);ArrayList<Student> list = new ArrayList<>();list.add(s1);list.add(s2);list.add(s3);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\d.txt"));oos.writeObject(list);oos.close();}
}
public class Demo4 {public static void main(String[] args) throws IOException, ClassNotFoundException {ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\d.txt"));ArrayList<Student> list = (ArrayList<Student>) ois.readObject();for (Student student : list) {System.out.println(student);}ois.close();}
}

打印流

不能读只能写。

字节打印流

构造方法

成员方法

public class Demo1 {public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {PrintStream ps = new PrintStream(new FileOutputStream("C:\\Users\\20724\\Desktop\\demo\\javase2day01\\javaseday29\\src\\main\\java\\Dayin\\a.txt"),true,"UTF-8");/*** 97* ture安正 爱上了阿强*/ps.println(97);ps.print("ture");//占位符,不止有String的还有其他的ps.printf("%s 爱上了%s","安正","阿强");//安正 爱上了阿强ps.close();}
}

占位符示例

public class PrintStreamDemo2 {public static void main(String[] args) throws FileNotFoundException {PrintStream ps = new PrintStream("a.txt");//% n表示换行ps.printf("我叫%s %n", "阿玮");ps.printf("%s喜欢%s %n", "阿珍", "阿强");ps.printf("字母H的大写:%c %n", 'H');ps.printf("8>3的结果是:%b %n", 8 > 3);ps.printf("100的一半是:%d %n", 100 / 2);ps.printf("100的16进制数是:%x %n", 100);ps.printf("100的8进制数是:%o %n", 100);ps.printf("50元的书打8.5折扣是:%f元%n", 50 * 0.85);ps.printf("计算的结果转16进制:%a %n", 50 * 0.85);ps.printf("计算的结果转科学计数法表示:%e %n", 50 * 0.85);ps.printf("计算的结果转成指数和浮点数,结果的长度较短的是:%g %n", 50 * 0.85);ps.printf("带有百分号的符号表示法,以百分之85为例:%d%% %n", 85);ps.println("---------------------");double num1 = 1.0;ps.printf("num: %.4g %n", num1);ps.printf("num: %.5g %n", num1);ps.printf("num: %.6g %n", num1);float num2 = 1.0F;ps.printf("num: %.4f %n", num2);ps.printf("num: %.5f %n", num2);ps.printf("num: %.6f %n", num2);ps.println("---------------------");ps.printf("数字前面带有0的表示方式:%03d %n", 7);ps.printf("数字前面带有0的表示方式:%04d %n", 7);ps.printf("数字前面带有空格的表示方式:% 8d %n", 7);ps.printf("整数分组的效果是:%,d %n", 9989997);ps.println("---------------------");//最终结果是10位,小数点后面是5位,不够在前面补空格,补满10位//如果实际数字小数点后面过长,但是只规定两位,会四舍五入//如果整数部分过长,超出规定的总长度,会以实际为准ps.printf("一本书的价格是:%2.5f元%n", 49.8);ps.printf("%(f%n", -76.04);//%f,默认小数点后面7位,//<,表示采取跟前面一样的内容ps.printf("%f和%3.2f %n", 86.04, 1.789651);ps.printf("%f和%<3.2f %n", 86.04, 1.789651);ps.println("---------------------");Date date = new Date();// %t 表示时间,但是不能单独出现,要指定时间的格式// %tc 周二 12月 06 22:08:40 CST 2022// %tD 斜线隔开// %tF 冒号隔开(12小时制)// %tr 冒号隔开(24小时制)// %tT 冒号隔开(24小时制,带时分秒)ps.printf("全部日期和时间信息:%tc %n", date);ps.printf("月/日/年格式:%tD %n", date);ps.printf("年-月-日格式:%tF %n", date);ps.printf("HH:MM:SS PM格式(12时制):%tr %n", date);ps.printf("HH:MM格式(24时制):%tR %n", date);ps.printf("HH:MM:SS格式(24时制):%tT %n", date);System.out.println("---------------------");ps.printf("星期的简称:%ta %n", date);ps.printf("星期的全称:%tA %n", date);ps.printf("英文月份简称:%tb %n", date);ps.printf("英文月份全称:%tB %n", date);ps.printf("年的前两位数字(不足两位前面补0):%tC %n", date);ps.printf("年的后两位数字(不足两位前面补0):%ty %n", date);ps.printf("一年中的第几天:%tj %n", date);ps.printf("两位数字的月份(不足两位前面补0):%tm %n", date);ps.printf("两位数字的日(不足两位前面补0):%td %n", date);ps.printf("月份的日(前面不补0):%te  %n", date);System.out.println("---------------------");ps.printf("两位数字24时制的小时(不足2位前面补0):%tH %n", date);ps.printf("两位数字12时制的小时(不足2位前面补0):%tI %n", date);ps.printf("两位数字24时制的小时(前面不补0):%tk %n", date);ps.printf("两位数字12时制的小时(前面不补0):%tl %n", date);ps.printf("两位数字的分钟(不足2位前面补0):%tM %n", date);ps.printf("两位数字的秒(不足2位前面补0):%tS %n", date);ps.printf("三位数字的毫秒(不足3位前面补0):%tL %n", date);ps.printf("九位数字的毫秒数(不足9位前面补0):%tN %n", date);ps.printf("小写字母的上午或下午标记(英):%tp %n", date);ps.printf("小写字母的上午或下午标记(中):%tp %n", date);ps.printf("相对于GMT的偏移量:%tz %n", date);ps.printf("时区缩写字符串:%tZ%n", date);ps.printf("1970-1-1 00:00:00 到现在所经过的秒数:%ts %n", date);ps.printf("1970-1-1 00:00:00 到现在所经过的毫秒数:%tQ %n", date);ps.close();}
}

字符打印流

构造方法

成员方法

public class Demo2 {public static void main(String[] args) throws IOException {PrintWriter ps = new PrintWriter(new FileOutputStream("javaseday29\\src\\main\\java\\Dayin\\a.txt"),true, Charset.forName("UTF-8"));/*** 97* ture安正 爱上了阿强*/ps.println("你终于来到了这里,哈哈哈哈哈");ps.print("ture");//占位符,不止有String的还有其他的ps.printf("%s 爱上了%s","安正","阿强");//安正 爱上了阿强ps.close();}
}

打印流的应用场景

public class PrintStreamDemo4 {public static void main(String[] args) {/**       打印流的应用场景* *///获取打印流的对象,此打印流在虚拟机启动的时候,由虚拟机创建,默认指向控制台//特殊的打印流,系统中的标准输出流,是不能关闭,在系统中是唯一的。,关闭后无法打印数据,不会报错PrintStream ps = System.out;//调用打印流中的方法println//写出数据,自动换行,自动刷新ps.println("123");//ps.close();ps.println("你好你好");System.out.println("456");}
}

打印流总结

解、压缩流

解压缩流

public class Demo1 {public static void main(String[] args) throws IOException {//压缩包的位置File begin = new File("C:\\Users\\20724\\Desktop\\123.zip");//文件解压目的地File nest = new File("C:\\Users\\20724\\Desktop");zipget(begin,nest);}private static void zipget(File begin,File nest) throws IOException {//解压的本质:把压缩包中的每一个文件或文件夹读取出来,按照层级拷贝到当前目的地中//进行解压缩ZipInputStream zis = new ZipInputStream(new FileInputStream(begin));//创建一个ZipEntry对象用来存储解压的文件对象,表示当前在压缩包中获取的文件或文件夹ZipEntry entry;//zis.getNextEntry()遍历压缩包将所有的文件和文件夹变为ZipEntry对象while ((entry = zis.getNextEntry()) != null) {System.out.println(entry);//创建对应层级的文件对象//判断ZipEntry是文件夹还是文件if (entry.isDirectory()) {//文件夹//按照获取的文件对象创建文件夹/*File(nest,entry.toString()nest 为父对象entry.toString() 为子对像 123/a.txt*/File f = new File(nest,entry.toString());f.mkdir();} else {//文件//创建一个输出流//目的地为当前获取的文件对象//文件:需要读取到压缩包中的文件,并把他存放到目的地的文件夹中(按照层级划分)FileOutputStream pos = new FileOutputStream(new File(nest,entry.toString()));int ch;while ((ch = zis.read())!= -1){pos.write(ch);}//关闭资源pos.close();//表示压缩包中一个文件处理完毕zis.closeEntry();}}zis.close();}
}

压缩流

public class Demo2 {public static void main(String[] args) throws IOException {//压缩单个文件//确定压缩文件和压缩目的地File src = new File("C:\\Users\\20724\\Desktop\\123\\a.txt");File desc = new File("C:\\Users\\20724\\Desktop\\123");toZip(src,desc);}public static void toZip(File src,File desc) throws IOException {//新建压缩流
//        String[] split = src.getName().split(".");
//        split[split.length] = "zip";
//        String str = "";
//        for (String s : split) {
//            str = str +"."+  s;
//        }
//        System.out.println(str);File f = new File(desc,"a.zip");FileOutputStream fos = new FileOutputStream(f);ZipOutputStream zos = new ZipOutputStream(fos);//ZipEntry对象,存放在压缩包中,名字为a.txtZipEntry entry = new ZipEntry("a.txt");//将ZipEntry对象,存放进压缩包中zos.putNextEntry(entry);FileInputStream fis = new FileInputStream(src);int b;while ((b = fis.read())!= -1){zos.write(b);}fis.close();zos.closeEntry();zos.close();}
}
public class Demo3 {public static void main(String[] args) throws IOException {//压缩单个文件//确定压缩文件和压缩目的地//创建File对象表示要压缩的文件夹File src = new File("C:\\Users\\20724\\Desktop\\123");//创建File对象表示压缩包放在哪里(压缩包的父路径)File descParent = src.getParentFile();//创建File对象表示要压缩包File desc = new File(descParent,src.getName()+".zip");//创建压缩流关联压缩包ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(desc));//获取每一个文件对象,变成entry对象,放入压缩包toZip(src,zos,src.getName());//关闭资源zos.close();}/*** * @param src 数据源* @param zos 压缩流* @param name 压缩包的内部路径* @throws IOException*/public static void toZip(File src,ZipOutputStream zos,String name) throws IOException {//进入src文件夹File[] files = src.listFiles();//遍历数组for (File file : files) {//判断是文件还是文件夹if (file.isFile()){//文件ZipEntry entry = new ZipEntry(name+"\\"+file.getName());zos.putNextEntry(entry);FileInputStream fis = new FileInputStream(file);int b;while ((b = fis.read())!= -1){zos.write(b);}fis.close();zos.closeEntry();}else {//文件夹toZip(file,zos,name+"\\"+file.getName());}}}
}

Commons-IO

Hutool工具包

附录

1,IOUtils(数据相关)

拷贝方法:

copy方法有多个重载方法,满足不同的输入输出流

IOUtils.copy(InputStream input, OutputStream output)

IOUtils.copy(InputStream input, OutputStream output, int bufferSize)//可指定缓冲区大小

IOUtils.copy(InputStream input, Writer output, String inputEncoding)//可指定输入流的编码表

IOUtils.copy(Reader input, Writer output)

IOUtils.copy(Reader input, OutputStream output, String outputEncoding)//可指定输出流的编码表

拷贝大文件的方法:

// 这个方法适合拷贝较大的数据流,比如2G以上

IOUtils.copyLarge(Reader input, Writer output) // 默认会用1024*4的buffer来读取

IOUtils.copyLarge(Reader input, Writer output, char[] buffer)//可指定缓冲区大小

将输入流转换成字符串

IOUtils.toString(Reader input)

IOUtils.toString(byte[] input, String encoding)

IOUtils.toString(InputStream input, Charset encoding)

IOUtils.toString(InputStream input, String encoding)

IOUtils.toString(URI uri, String encoding)

IOUtils.toString(URL url, String encoding)

将输入流转换成字符数组

IOUtils.toByteArray(InputStream input)

IOUtils.toByteArray(InputStream input, int size)

IOUtils.toByteArray(URI uri)

IOUtils.toByteArray(URL url)

IOUtils.toByteArray(URLConnection urlConn)

IOUtils.toByteArray(Reader input, String encoding)

字符串读写

IOUtils.readLines(Reader input)

IOUtils.readLines(InputStream input, Charset encoding)

IOUtils.readLines(InputStream input, String encoding)

IOUtils.writeLines(Collection<?> lines, String lineEnding, Writer writer)

IOUtils.writeLines(Collection<?> lines, String lineEnding, OutputStream output, Charset encoding)

IOUtils.writeLines(Collection<?> lines, String lineEnding, OutputStream output, String encoding)

从一个流中读取内容

IOUtils.read(InputStream input, byte[] buffer)

IOUtils.read(InputStream input, byte[] buffer, int offset, int length) IOUtils.read(Reader input, char[] buffer)

IOUtils.read(Reader input, char[] buffer, int offset, int length)

把数据写入到输出流中

IOUtils.write(byte[] data, OutputStream output)

IOUtils.write(byte[] data, Writer output, Charset encoding)

IOUtils.write(byte[] data, Writer output, String encoding)

IOUtils.write(char[] data, Writer output)

IOUtils.write(char[] data, OutputStream output, Charset encoding)

IOUtils.write(char[] data, OutputStream output, String encoding)

IOUtils.write(String data, Writer output)

IOUtils.write(CharSequence data, Writer output)

从一个流中读取内容,如果读取的长度不够,就会抛出异常

IOUtils.readFully(InputStream input, int length)

IOUtils.readFully(InputStream input, byte[] buffer)

IOUtils.readFully(InputStream input, byte[] buffer, int offset, int length) IOUtils.readFully(Reader input, char[] buffer)

IOUtils.readFully(Reader input, char[] buffer, int offset, int length)

比较

IOUtils.contentEquals(InputStream input1, InputStream input2) // 比较两个流是否相等

IOUtils.contentEquals(Reader input1, Reader input2)

IOUtils.contentEqualsIgnoreEOL(Reader input1, Reader input2) // 比较两个流,忽略换行符

其他方法

IOUtils.skip(InputStream input, long toSkip) // 跳过指定长度的流

IOUtils.skip(Reader input, long toSkip)

IOUtils.skipFully(InputStream input, long toSkip) // 如果忽略的长度大于现有的长度,就会抛出异常

IOUtils.skipFully(Reader input, long toSkip)

2,FileUtils(文件/文件夹相关)

复制文件夹

FileUtils.copyDirectory(File srcDir, File destDir) // 复制文件夹(文件夹里面的文件内容也会复制)

FileUtils.copyDirectory(File srcDir, File destDir, FileFilter filter) // 复制文件夹,带有文件过滤功能

FileUtils.copyDirectoryToDirectory(File srcDir, File destDir) // 以子目录的形式将文件夹复制到到另一个文件夹下

复制文件

FileUtils.copyFile(File srcFile, File destFile) // 复制文件

FileUtils.copyFile(File input, OutputStream output) // 复制文件到输出流

FileUtils.copyFileToDirectory(File srcFile, File destDir) // 复制文件到一个指定的目录

FileUtils.copyInputStreamToFile(InputStream source, File destination) // 把输入流里面的内容复制到指定文件

FileUtils.copyURLToFile(URL source, File destination) // 把URL 里面内容复制到文件(可以下载文件)

FileUtils.copyURLToFile(URL source, File destination, int connectionTimeout, int readTimeout)

把字符串写入文件

FileUtils.writeStringToFile(File file, String data, String encoding)

FileUtils.writeStringToFile(File file, String data, String encoding, boolean append)

把字节数组写入文件

FileUtils.writeByteArrayToFile(File file, byte[] data)

FileUtils.writeByteArrayToFile(File file, byte[] data, boolean append) FileUtils.writeByteArrayToFile(File file, byte[] data, int off, int len) FileUtils.writeByteArrayToFile(File file, byte[] data, int off, int len, boolean append)

把集合里面的内容写入文件

// encoding:文件编码,lineEnding:每行以什么结尾

FileUtils.writeLines(File file, Collection<?> lines)

FileUtils.writeLines(File file, Collection<?> lines, boolean append)

FileUtils.writeLines(File file, Collection<?> lines, String lineEnding)

FileUtils.writeLines(File file, Collection<?> lines, String lineEnding, boolean append)

FileUtils.writeLines(File file, String encoding, Collection<?> lines)

FileUtils.writeLines(File file, String encoding, Collection<?> lines, boolean append)

FileUtils.writeLines(File file, String encoding, Collection<?> lines, String lineEnding)

FileUtils.writeLines(File file, String encoding, Collection<?> lines, String lineEnding, boolean append)

往文件里面写内容

FileUtils.write(File file, CharSequence data, Charset encoding)

FileUtils.write(File file, CharSequence data, Charset encoding, boolean append)

FileUtils.write(File file, CharSequence data, String encoding)

FileUtils.write(File file, CharSequence data, String encoding, boolean append)

文件移动

FileUtils.moveDirectory(File srcDir, File destDir) // 文件夹在内的所有文件都将移动FileUtils.moveDirectoryToDirectory(File src, File destDir, boolean createDestDir) // 以子文件夹的形式移动到另外一个文件下

FileUtils.moveFile(File srcFile, File destFile) // 移动文件

FileUtils.moveFileToDirectory(File srcFile, File destDir, boolean createDestDir) // 以子文件的形式移动到另外一个文件夹下

FileUtils.moveToDirectory(File src, File destDir, boolean createDestDir) // 移动文件或者目录到指定的文件夹内

清空和删除文件夹

FileUtils.deleteDirectory(File directory) // 删除文件夹,包括文件夹和文件夹里面所有的文件

FileUtils.cleanDirectory(File directory) // 清空文件夹里面的所有的内容

FileUtils.forceDelete(File file) // 删除,会抛出异常

FileUtils.deleteQuietly(File file) // 删除,不会抛出异常

创建文件夹

FileUtils.forceMkdir(File directory) // 创建文件夹(可创建多级)

FileUtils.forceMkdirParent(File file) // 创建文件的父级目录

获取文件输入/输出流

FileUtils.openInputStream(File file)

FileUtils.openOutputStream(File file)

读取文件

FileUtils.readFileToByteArray(File file) // 把文件读取到字节数组

FileUtils.readFileToString(File file, Charset encoding) // 把文件读取成字符串

FileUtils.readFileToString(File file, String encoding)

FileUtils.readLines(File file, Charset encoding) // 把文件读取成字符串集合

FileUtils.readLines(File file, String encoding)

测试两个文件的修改时间

FileUtils.isFileNewer(File file, Date date)

FileUtils.isFileNewer(File file, File reference)

FileUtils.isFileNewer(File file, long timeMillis)

FileUtils.isFileOlder(File file, Date date)

FileUtils.isFileOlder(File file, File reference)

FileUtils.isFileOlder(File file, long timeMillis)

文件/文件夹的迭代

FileUtils.iterateFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

FileUtils.iterateFiles(File directory, String[] extensions, boolean recursive)

FileUtils.iterateFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

FileUtils.lineIterator(File file)

FileUtils.lineIterator(File file, String encoding)

FileUtils.listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

FileUtils.listFiles(File directory, String[] extensions, boolean recursive)

FileUtils.listFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

其他

FileUtils.isSymlink(File file) // 判断是否是符号链接

FileUtils.directoryContains(File directory, File child) // 判断文件夹内是否包含某个文件或者文件夹

 FileUtils.sizeOf(File file) // 获取文件或者文件夹的大小

FileUtils.getTempDirectory()// 获取临时目录文件

FileUtils.getTempDirectoryPath()// 获取临时目录路径

FileUtils.getUserDirectory()// 获取用户目录文件

FileUtils.getUserDirectoryPath()// 获取用户目录路径

FileUtils.touch(File file) // 创建文件

FileUtils.contentEquals(File file1, File file2) // 比较两个文件内容是否相同

FilenameUtils(文件名/后缀名相关)

FilenameUtils.concat(String basePath, String fullFilenameToAdd) // 合并目录和文件名为文件全路径

FilenameUtils.getBaseName(String filename) // 去除目录和后缀后的文件名

FilenameUtils.getExtension(String filename) // 获取文件的后缀

FilenameUtils.getFullPath(String filename) // 获取文件的目录

FilenameUtils.getName(String filename) // 获取文件名

FilenameUtils.getPath(String filename) // 去除盘符后的路径

FilenameUtils.getPrefix(String filename) // 盘符

FilenameUtils.indexOfExtension(String filename) // 获取最后一个.的位置

FilenameUtils.indexOfLastSeparator(String filename) // 获取最后一个/的位置

FilenameUtils.normalize(String filename) // 获取当前系统格式化路径

FilenameUtils.removeExtension(String filename) // 移除文件的扩展名

FilenameUtils.separatorsToSystem(String path) // 转换分隔符为当前系统分隔符

FilenameUtils.separatorsToUnix(String path) // 转换分隔符为linux系统分隔符

FilenameUtils.separatorsToWindows(String path) // 转换分隔符为windows系统分隔符

FilenameUtils.equals(String filename1, String filename2) // 判断文件路径是否相同,非格式化

FilenameUtils.equalsNormalized(String filename1, String filename2) // 判断文件路径是否相同,格式化

FilenameUtils.directoryContains(String canonicalParent, String canonicalChild) // 判断目录下是否包含指定文件或目录

FilenameUtils.isExtension(String filename, String extension) // 判断文件扩展名是否包含在指定集合(数组、字符串)中

FilenameUtils.wildcardMatch(String filename, String wildcardMatcher) // 判断文件扩展名是否和指定规则匹配

糊涂相关文档

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147422.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第424题替换后的最长重复字符

题目&#xff1a; 题解&#xff1a; class Solution:def characterReplacement(self, s: str, k: int) -> int:num [0] * 26n len(s)maxn left right 0while right < n:num[ord(s[right]) - ord("A")] 1maxn max(maxn, num[ord(s[right]) - ord("…

安卓数据存储——SQLite

一、SQLite数据库 创建表 CREATE TABLE IF NOT EXISTS user_info (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,name VARCHAR NOT NULL,age INTEGER NOT NULL,height LONG NOT NULL,weight FLOAT NOT NULL);注&#xff1a; IF NOT EXISTS&#xff1a;如果该表不存在则创…

后端:理解与创建项目

理解 项目得放到tomcat中才能运行 &#xff0c;所以请求不是到服务端&#xff0c;是到具体的项目里的服务生里(servlet)。 servlet能够响应接受请求。 用jqueryajax发出请求 请求&#xff08;请求路径-->找到服务生&#xff09;&#xff0c; 请求方式&#xff08;get/post&…

【深入理解SpringCloud微服务】深入理解nacos配置中心(六)——spring-cloud-context关于配置刷新的公共逻辑

【深入理解SpringCloud微服务】深入理解nacos配置中心&#xff08;六&#xff09;——spring-cloud-context关于配置刷新的公共逻辑 原理分析源码解析RefreshEventListener#onApplicationEvent(ApplicationEvent)ContextRefresher#refresh()ContextRefresher#refreshEnvironmen…

Spring IDEA 2024 安装Lombok插件

1.简介 Lombook插件的Data标签可以自动生成类的get和set以及toString方法。 2.安装步骤 在idead设置的插件中搜索lombok插件&#xff0c;安装。 在Spring项目的pom.xml中添加依赖项 <dependency><groupId>org.projectlombok</groupId><artifactId…

2024年研赛 C、D、F三题论文首发+部分代码分享

本届研赛助攻题目 C D F三题论文均已经全部完成。后更新计划 如图所示。 免费给大家分享 三个问题的论文部分代码 2024年华为杯-研赛分享资料&#xff08;论文部分代码&#xff09;&#xff08;已更新部分代码&#xff09;&#xff1a; 链接&#xff1a;https://pan.baidu.com…

【HTML样式】加载动画专题 每周更新

加载动画专题 煎蛋加载动画方块移动加载动画电子风变脸正方体组合跳跃式加载动画 煎蛋加载动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…

Science Robotic 内在触觉实现直观的物理人机交互

触觉传感器和电子皮肤是为机器人提供物理交互感的常见设备&#xff0c;但当用于机器人的大面积覆盖时&#xff0c;它们会变得复杂且昂贵。德国宇航中心近期发表的Science Robotics研究工作&#xff0c;使用内部高分辨率关节力扭矩传感器&#xff0c;在机械臂中实现了固有的全身…

读构建可扩展分布式系统:方法与实践11强一致性

1. 强一致性 1.1. 最终一致数据库通过跨多台机器分区和复制数据集来获得可扩展性&#xff0c;其代价是要跨副本维持强数据一致性以及允许冲突写入 1.1.1. 在更新数据对象后&#xff0c;不同的客户端可能会看到该对象的旧值或新值&#xff0c;直到所有副本都收敛到最新值 1.2…

UDS诊断ISO14229新手入门篇

前言:参考ISO-14229 UDS 诊断教程(一) UDS 由 ISO-14229 系列标准定义,ISO 14229-1 定义了诊断服务,不涉及网络及实现,只有应用层的内容。而 ISO 14229-3 则定义了 UDS 在 CAN 总线上的实现。诊断通信的过程从用户角度来看非常容易理解,诊断仪发送诊断请求(request),…

MQ入门(一):同步调用和异步调用--RabbitMQ基础入门

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装部署 2.2.RabbitMQ基本架构 2.3.收发消息 2.3.1.交换机 2.3.2.队列 2.3.3.绑定关系 2.3.4.发送消息 2.4.数据隔离 2.4.1.用户管理 2.4.2.virtual host 1.初识MQ 微服务一旦拆分&…

DIN模型实现推荐算法

1. 项目简介 项目A030-DIN的核心是通过深度学习技术实现个性化推荐算法&#xff0c;旨在为用户提供精准、高效的商品或内容推荐。在现代电子商务、社交媒体及内容平台中&#xff0c;推荐系统作为核心功能&#xff0c;极大地提升了用户体验。DIN&#xff08;Deep Interest Netw…

Codeforces Round 973 (Div. 2) - D题

传送门&#xff1a;Problem - D - Codeforces 题目大意&#xff1a; 思路&#xff1a; 尽量要 最大值变小&#xff0c;最小值变大 即求 最大值的最小 和 最小值的最大 -> 二分答案 AC代码&#xff1a; 代码有注释 #include<bits/stdc.h> using namespace std; #…

无人机+自组网:中继通信增强技术详解

无人机与自组网技术的结合&#xff0c;特别是通过中继通信增强技术&#xff0c;为无人机在复杂环境中的通信提供了稳定、高效、可靠的解决方案。以下是对该技术的详细解析&#xff1a; 一、无人机自组网技术概述 无人机自组网技术是一种利用无人机作为节点&#xff0c;通过无…

指针修仙之实现qsort

文章目录 回调函数什么是回调函数回调函数的作用 库函数qsort使用qsort函数排序整形使用qsort函数排序结构体 qsort函数模拟实现说明源码and说明 回调函数 什么是回调函数 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

深度学习02-pytorch-01-张量的创建

深度学习 pytorch 框架 是目前最热门的。 深度学习 pytorch 框架相当于 机器学习阶段的 numpy sklearn 它将数据封装成张量(Tensor)来进行处理&#xff0c;其实就是数组。也就是numpy 里面的 ndarray . pip install torch1.10.0 -i https://pypi.tuna.tsinghua.edu.cn/simp…

蓝桥杯【物联网】零基础到国奖之路:七. 串口

蓝桥杯【物联网】零基础到国奖之路:七. 串口 第一节 串口通信理论第二节 软件通信协议第三节 DMA理论第四节 CubeMX的配置第五节 代码模版 第一节 串口通信理论 通用异步收发传输器&#xff08;UART&#xff09;是一种串行异步收发协议&#xff0c;应用十分广泛。UART将数据二…

HashMap扩容时机是插入前还是插入后?

结论 不管是HashMap还是ConcurrentHashMap都是插入后。 过程为&#xff1a; 先计算哈希值。对应的哈希槽插入数据&#xff0c;决定是红黑树还是链表插入完毕才计算是否需要扩容&#xff0c;假如需要则扩容 源码 源码如下&#xff1a; 其中addCount方法里面写入扩容。

Dash稳定版更新

大家好&#xff0c;今天要和大家聊聊一个开发Python网页应用的超级神器——Dash 2.18.1稳定版本正式发布啦&#xff01;此次更新&#xff0c;针对2.18.0版本的问题进行了修复和优化&#xff0c;为我们带来了更为稳定、强大的开发体验。 Dash是什么&#xff1f; Dash是一款基于P…

深度学习03-神经网络02-激活函数

可以使用这个进行跳转链接​​​​​​​http://playground.tensorflow.org/#activationrelu&batchSize11&datasetspiralDatasetreg-gauss&learningRate0.01ularizationRate0.1&noise0&networkShape7,5,4,3,2&seed0.54477&showTestDatafalse&d…