21.File和IO流
IO就可以对文件进行读写
File表示要读写的文件在哪,也可以对文件进行创建,删除等操作
小结:
IO流是什么?
1.可以将数据从本地文件中读取出来
2.可以将数据从内存保存到本地文件
File类时什么?
1.在读写数据时告诉虚拟机要操作的(文件/文件夹)在哪
2.对(文件/文件夹)本身进行操作,包括创建,删除等
1.File类
1.1File类概述和构造方法【应用】
File类介绍
它是文件和目录路径名的抽象表示
文件和目录是可以通过File封装成对象的
对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径名而已.它可以是存在的,也可以是不存在的.将来是要通过具体的操作把这个路径的内容转换为具体存在的
File类的构造方法
方法名 说明 File(String pathname) 通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例 File(String parent, String child) 从父路径名字符串和子路径名字符串创建新的 File实例 File(File parent, String child) 从父抽象路径名和子路径名字符串创建新的 File实例 示例代码
package com.itheima.filedemo; import java.io.File; public class FileDemo1 {
public static void main(String[] args) {
//method1();
//method2();
//method3(); } public static void method3() {
// File(File parent, String child)从父抽象路径名和子路径名字符串创建新的 File实例
File file1=new File("C:\\itheima");
String path="a.txt";
File file=new File(file1,path);
System.out.println(file);
} public static void method2() {
// File(String parent, String child)从父路径名字符串和子路径名字符串创建新的 File实例
String path1="C:\\itheima";
String path2="a.txt";
File file =new File(path1,path2);//把两个路径进行拼接
System.out.println(file);
} public static void method1() {
//File(String pathname)通过将给定的路径名字符串转换为抽象路径名来创建新的 File实例
String path="C:\\itheima\\a.txt";
File file =new File(path);
//问题:为什么要把字符串表示形式的路径变成File对象?
//就是为了使用File类里面的方法。
}
}
1.2绝对路径和相对路径【理解】
绝对路径
是一个完整的路径,从盘符开始
相对路径
是一个简化的路径,相对当前项目下的路径
示例代码
package com.itheima.filedemo; import java.io.File; public class FileDemo2 {
public static void main(String[] args) {
//这个路径固定不变了
File file=new File("C:\\itheima\\a.txt");
//当前项目下的a.txt
File file2=new File("a.txt");
//当前项目下 --- 指定模块下的a.txt
File file3=new File("filemodule\\a.txt");
}
}
1.3File类创建功能【应用】
方法分类
方法名 说明 public boolean createNewFile() 当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件 public boolean mkdir() 创建由此抽象路径名命名的目录 public boolean mkdirs() 创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录 示例代码
package com.itheima.filedemo; import java.io.File;
import java.io.IOException; public class FileDemo3 {
public static void main(String[] args) throws IOException {
//public boolean createNewFile()当具有该名称的文件不存在时,创建一个由该抽象路径名命名的新空文件
//注意点:
//1.如果文件存在,那么创建失败,返回false
//2。如果文件不存在,那么创建成功,返回true
//3.createNewFile方法不管调用者有没有后缀名,只能创建文件
// public boolean mkdir()创建由此抽象路径名命名的目录
//注意点:
//1.只能创建单级文件夹,不能创建多级文件夹
//2.不管调用者有没有后缀名,只能创建单级文件夹 // public boolean mkdirs()创建由此抽象路径名命名的目录,包括任何必需但不存在的父目录
//注意点:
//可以创建单级文件夹,也可以创建多级文件夹
//不管调用者有没有后缀,只能创建文件夹 //疑问:
//既然mkdirs能创建单级,也能创建多级,那么mkdir还用什么用啊?
//mkdir确实不用
//method1();
//method2();
method3();
} public static void method3() {
File file=new File("C:\\itheima\\aaa\\bbb\\ccc\\ddd");
boolean result = file.mkdirs();
System.out.println(result);
} public static void method2() {
File file=new File("C:\\itheima\\aaa.txt");
boolean result = file.mkdir();
System.out.println(result);
} public static void method1() throws IOException {
File file1=new File("C:\\itheima\\aaa");
boolean result = file1.createNewFile();
System.out.println(result);
}
}
1.4File类删除功能【应用】
方法分类
方法名 说明 public boolean delete() 删除由此抽象路径名表示的文件或目录 示例代码
package com.itheima.filedemo; import java.io.File; public class FileDemo4 {
//注意点:
//1.不走回收站
//2.如果删除的时文件,那么直接删除,但是如果删除的时文件夹,只能删除空文件夹
//3.如果要删除一个有内容文件夹,只能先进入到这个文件夹,把里面的内容全部删除完毕,才能再次删除
//简单来说:
//只能删除文件和空文件夹。
public static void main(String[] args) {
//method1();
File file=new File("C:\\itheima");
boolean result = file.delete();
System.out.println(result);
} public static void method1() {
File file=new File("C:\\itheima\\a.txt");
boolean result = file.delete();
System.out.println(result);
} }
1.5File类判断和获取功能【应用】
判断功能
方法名 说明 public boolean isDirectory() 测试此抽象路径名表示的File是否为目录 public boolean isFile() 测试此抽象路径名表示的File是否为文件 public boolean exists() 测试此抽象路径名表示的File是否存在 获取功能
方法名 说明 public String getAbsolutePath() 返回此抽象路径名的绝对路径名字符串 public String getPath() 将此抽象路径名转换为路径名字符串 public String getName() 返回由此抽象路径名表示的文件或目录的名称 public File[] listFiles() 返回此抽象路径名表示的目录中的文件和目录的File对象数组 示例代码
package com.itheima.filedemo; import java.io.File; public class FileDemo5 {
public static void main(String[] args) {
//public boolean isDirectory()测试此抽象路径名表示的File是否为目录
// public boolean isFile()测试此抽象路径名表示的File是否为文件
// public boolean exists()测试此抽象路径名表示的File是否存在
//public String getName()返回由此抽象路径名表示的文件或目录的名称
//注意点:
//1.如果调用者时文件,那么获取的是文件名和后缀名
//2.如果调用者是一个文件夹,那么获取的是文件夹的名字
//method1();
//method2();
//method3();
File file=new File("a.txt");
String name = file.getName();
System.out.println(name); File file1=new File("C:\\itheima");
String name1 = file1.getName();
System.out.println(name1); } public static void method3() {
File file=new File("C:\\itheima");
boolean result = file.exists();
System.out.println(result);
} public static void method2() {
File file=new File("C:\\itheima");
boolean result1 = file.isFile();
boolean result2 = file.isDirectory();
System.out.println(result1);
System.out.println(result2);
} public static void method1() {
File file=new File("C:\\itheima\\a.txt");
boolean result1 = file.isFile();
boolean result2 = file.isDirectory();
System.out.println(result1);
System.out.println(result2);
}
}
File类高级获取功能
public File[] listFiles() | 返回此抽象路径名表示的目录中的文件和目录的File对象数组 |
listFiles方法注意事项:
//1.当调用者是一个文件时返回null
//2.当调用者是一个空文件夹时返回null
//3.当调用者是一个有内容的文件夹时返回一个长度位0的数组
//4.当调用者是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
//5.当调用者是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏内容
//5.当调用者是一个有权限才能进入的文件夹时,返回null
1.6File类练习一【应用】
案例需求
在当前模块下的aaa文件夹中创建一个a.txt文件
实现步骤
创建File对象,指向aaa文件夹
判断aaa文件夹是否存在,如果不存在则创建
创建File对象,指向aaa文件夹下的a.txt文件
创建这个文件
代码实现
package com.itheima.filedemo; import java.io.File;
import java.io.IOException; public class Test1 {
public static void main(String[] args) throws IOException {
//在当前模块下的aaa文件夹中创建一个a.txt文件
// File file=new File("filemodule\\aaa\\a.txt");
// boolean result = file.createNewFile();
// System.out.println(result);
//注意点:文件所在的文件夹必须要存在
File file=new File("filemodule\\\\aaa");
if (!file.exists()) {
//如果文件夹不存在,就创建出来
file.mkdirs();
}
File newfile=new File(file,"a.txt");
boolean result= newfile.createNewFile();
System.out.println(result); }
}
1.7File类练习二【应用】
案例需求
删除一个多级文件夹
实现步骤
定义一个方法,接收一个File对象
遍历这个File对象,获取它下边的每个文件和文件夹对象
判断当前遍历到的File对象是文件还是文件夹
如果是文件,直接删除
如果是文件夹,递归调用自己,将当前遍历到的File对象当做参数传递
参数传递过来的文件夹File对象已经处理完成,最后直接删除这个空文件夹
代码实现
package com.itheima.filedemo; import java.io.File; public class Test2 {
public static void main(String[] args) {
//练习二:删除一个多级文件夹
//delete方法
//只能删除文件和空文件夹
//如果要删除一个有内容的文件夹 怎么删除
//先删掉这个文件夹里面的所有内容
//最后在删除这个文件夹
File src=new File("C:\\itheima");
deleteDir(src); } private static void deleteDir(File src) {
//先删掉这个文件夹里面的所有内容
//递归 方法在方法体中自己调用自己
//注意:可以解决所有文件夹和递归相结合的题目
//1.进入
File[] files = src.listFiles();
//2.遍历--因为我想得到src文件夹里面每一个文件和文件夹的File对象
for (File file : files) {
if (file.isFile()) {
//3.判断 --- 如果遍历到的File对象是一个文件,那么直接删除
file.delete();
}else{
//4.判断
//递归
deleteDir(file);//参数一定要是src文件夹里面的文件夹File对象
}
}
//最后在删除这个文件夹
src.delete();
}
}
1.8File类练习三【应用】
案例需求
统计一个文件夹中每种文件的个数并打印
打印格式如下:
txt:3个
doc:4个
jpg:6个
…
实现步骤
定义一个方法,参数是HashMap集合用来统计次数和File对象要统计的文件夹
遍历File对象,获取它下边的每一个文件和文件夹对象
判断当前File对象是文件还是文件夹
如果是文件,判断这种类型文件后缀名在HashMap集合中是否出现过
没出现过,将这种类型文件的后缀名存入集合中,次数存1
出现过,获取这种类型文件的后缀名出现的次数,对其+1,在存回集合中
如果是文件夹,递归调用自己,HashMap集合就是参数集合,File对象是当前文件夹对象
代码实现
package com.itheima.filedemo; import java.io.File;
import java.util.HashMap; public class Test3 {
//统计一个文件夹中,每种文件出现的次数.
//统计 --- 定义一个变量用来统计. ---- 弊端:同时只能统计一种文件
//利用map集合进行数据统计,键 --- 文件后缀名 值 ---- 次数 public static void main(String[] args) {
File file=new File("filemodule");
HashMap<String,Integer> hm=new HashMap<>();
getCount(hm,file);
System.out.println(hm);
} private static void getCount(HashMap<String, Integer> hm, File file) {
File[] listFiles = file.listFiles();
for (File f : listFiles) {
if (f.isFile()) {
String fileName = f.getName();
String[] fileNameArr = fileName.split("\\.");
//aaa a.a.txt
if (fileNameArr.length == 2) {
String fileEndName = fileNameArr[1];
if (hm.containsKey(fileEndName)){
//已经存在
//将已经出现的次数获取出来
Integer count = hm.get(fileEndName);
//这种文件又出现了几次
count++;
hm.put(fileEndName,count);
}else{
//不存在
//当前文件时第一次出现
hm.put(fileEndName,1);
}
} }else{
getCount(hm,f);
}
} } }
2.字节流
2.1 IO流概述和分类【理解】
以前的创建方式不能永久化存储,只要代码运行结束,所有数据都会丢失
学习IO流的目的?
1.将数据写到文件中,实现数据永久化存储
2.读取文件中已经存在的数据
在数据传输的过程中,是谁再读?是谁在写?这个参照物是谁?
IO的数据传输,可以看作是一种数据的流动,按照流动的方向,以内存为参照物,进行读写操作
简单来说:内存再读,内存在写
IO流介绍
IO:输入/输出(Input/Output)
流:是一种抽象概念,是对数据传输的总称.也就是说数据在设备间的传输称为流,流的本质是数据传输
IO流就是用来处理设备间数据传输问题的.常见的应用: 文件复制; 文件上传; 文件下载
IO流的分类
按照数据的流向
输入流:读数据
输出流:写数据
按照数据类型来分
字节流
字节输入流
字节输出流
字符流
字符输入流
字符输出流
IO流的使用场景
如果操作的是纯文本文件,优先使用字符流
如果操作的是图片、视频、音频等二进制文件,优先使用字节流
如果不确定文件类型,优先使用字节流.字节流是万能的流
什么是纯文本文件?
在windows记事本中打开能读的懂,那么这样的文件就是纯文本文件
2.2字节流写数据【应用】
字节流抽象基类
InputStream:这个抽象类是表示字节输入流的所有类的超类
OutputStream:这个抽象类是表示字节输出流的所有类的超类
子类名特点:子类名称都是以其父类名作为子类名的后缀
字节输出流
FileOutputStream(String name):创建文件输出流以指定的名称写入文件
使用字节输出流写数据的步骤
创建字节输出流对象(调用系统功能创建了文件,创建字节输出流对象,让字节输出流对象指向文件)
调用字节输出流对象的写数据方法
释放资源(关闭此文件输出流并释放与此流相关联的任何系统资源)
示例代码
package com.itheima.output; import java.io.*; public class OutputDemo {
public static void main(String[] args) throws IOException {
//1.创建字符流的对象 --告诉虚拟机我要往哪个文件中写数据了
//FileOutputStream fos=new FileOutputStream("D:a.txt");
FileOutputStream fos=new FileOutputStream(new File("D://a.txt")); //2.写数据
fos.write(97);
//释放资源
fos.close();
}
}
注意点:
1.如果i文件不存在,会帮我们自动创建出来
2.如果文件存在,会把文件清空
3.写数据时,如果传递一个整数,那么实际上写到文件中的,是这个整数在码表中对应的那个字符。
4.释放资源:告诉操作系统我现在已经不要在用这个文件了,每次使用完流必须要释放资源
2.3字节流写数据的三种方式【应用】
写数据的方法分类
方法名 说明 void write(int b) 将指定的字节写入此文件输出流 一次写一个字节数据 void write(byte[] b) 将 b.length字节从指定的字节数组写入此文件输出流 一次写一个字节数组数据 void write(byte[] b, int off, int len) 将 len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流 一次写一个字节数组的部分数据 示例代码
package com.itheima.output; import java.io.FileOutputStream;
import java.io.IOException; public class OutputDemo4 {
public static void main(String[] args) throws IOException {
FileOutputStream fos=new FileOutputStream("bytestream\\a.txt");
// byte [] bys ={97,98,99};
// fos.write(bys); byte [] bys={97,98,99,100,101,102,103};
fos.write(bys,1,2);//第三个参数是写几个。。。。
fos.close(); }
}
2.4字节流写数据的两个小问题【应用】
字节流写数据如何实现换行
windows:\r\n
linux:\n
mac:\r
字节流写数据如何实现追加写入
public FileOutputStream(String name,boolean append)
创建文件输出流以指定的名称写入文件。如果第二个参数为true ,则字节将写入文件的末尾而不是开头
示例代码
package com.itheima.output; import java.io.FileOutputStream;
import java.io.IOException; public class OutputDemo5 {
public static void main(String[] args) throws IOException {
FileOutputStream fos=new FileOutputStream("bytestream\\a.txt",true);
//第二个参数就是续写开关,如果没有传递,默认就是false
//表示不打开续写功能。那么创建对象的这行代码会清空文件
//如果第二个参数为true,表示打开续写功能
//那么创建对象的这行代码不会清空文件
fos.write(97);
//能加一个换行
fos.write("\r\n".getBytes());
fos.write(98);
fos.write("\r\n".getBytes());
//能加一个换行
fos.write(99);
fos.write("\r\n".getBytes());
//能加一个换行
fos.write(100);
//能加一个换行
fos.write("\r\n".getBytes());
fos.write(101);
fos.write("\r\n".getBytes());
//能加一个换行
fos.close();
}
}如果第二个参数为true,表示打开续写功能那么创建对象的这行代码不会清空文件
2.5字节流写数据加异常处理【应用】
异常处理格式
try-catch-finally
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}finally{
执行所有清除操作;
}finally特点
被finally控制的语句一定会执行,除非JVM退出
示例代码
package com.itheima.output; import java.io.FileOutputStream;
import java.io.IOException; public class OutputDemo6 {
public static void main(String[] args) {
FileOutputStream fos=null;
try {
//System.out.println(2/0);
fos= new FileOutputStream("bytestream\\a.txt"); byte [] bys={97,98,99,100,101,102,103};
fos.write(bys,1,2);
} catch (IOException e) {
e.printStackTrace();
} finally {
//finally语句里面的代码,一定会被执行
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} } }
}
小结:
步骤:
1.创建字节输出流对象
文件不存在,就创建
如果存在就清空,如果不想被清空则加true
2.写数据
可以写一个字节,写一个字节数组,写一个字节数组的一部分
写一个回车换行:\r\n .getbytes();
3释放资源
2.6字节流读数据(一次读一个字节数据)【应用】
字节输入流
FileInputStream(String name):通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名
字节输入流读取数据的步骤
创建字节输入流对象
调用字节输入流对象的读数据方法
释放资源
示例代码
package com.itheima.output; import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class OutputDemo7 {
public static void main(String[] args) throws IOException {
//如果文件存在,那么就不会报错
//如果文件不存在,那么就直接报错
FileInputStream fis=new FileInputStream("bytestream\\a.txt");
int read = fis.read();
//一次读取一个字节,返回值就是本地读到的那个字节数据
//也就是字符在码表中对应的那个数字
//如果我们想要看到的是字符数据,那么一定要强转成char
System.out.println((char) read);
//释放资源
fis.close();
}
}
读取多个字节
package com.itheima.output; import java.io.FileInputStream;
import java.io.IOException; public class OutputDemo8 {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("bytestream\\a.txt");
int i1 = fis.read();
//1.文件中多个字节我怎么办
int b;
while((b = fis.read())!=-1){
System.out.println((char) b);
}
fis.close();
}
}
2.7字节流复制文件【应用】
案例需求
把“E:\itcast\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt” (文件可以是任意文件)
实现步骤
复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源),然后写入到另一个文件中(目的地)
数据源:
E:\itcast\窗里窗外.txt --- 读数据 --- InputStream --- FileInputStream
目的地:
myByteStream\窗里窗外.txt --- 写数据 --- OutputStream --- FileOutputStream
代码实现
package com.itheima.output; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class OutputDemo9 {
public static void main(String[] args) throws IOException {
//创建了一个字节输入流,准备读数据
FileInputStream fis=new FileInputStream("C:\\itheima\\a.avi");
//创建了一个字节输出流,准备写数据
FileOutputStream fos=new FileOutputStream("bytestream\\a.avi");
int b;
while((b=fis.read())!=-1){
fos.write(b);
}
fis.close();
fos.close();
}
}
2.8字节流读数据(一次读一个字节数组数据)【应用】
为了解决速度问题,字节流通过创捷字节数组,可以一次读写多个数据
一次读一个字节数组的方法
public int read(byte[] b):从输入流读取最多b.length个字节的数据
返回的是读入缓冲区的总字节数,也就是实际的读取字节个数
示例代码
package com.itheima.output; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException; public class OutputDemo10 {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("C:\\itheima\\a.avi");
FileOutputStream fos=new FileOutputStream("bytestream\\a.avi"); byte[] bytes=new byte[1024];
int len;//本次读到的有效字节个数 --这次读了几个字节
while((len=fis.read(bytes))!=-1){
fos.write(bytes,0,len);
}
fis.close();
fos.close();
} }
3.字节缓冲流
3.1字节缓冲流构造方法【应用】
字节缓冲流介绍
BufferOutputStream:该类实现缓冲输出流.通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用
BufferedInputStream:创建BufferedInputStream将创建一个内部缓冲区数组.当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节
构造方法:
方法名 说明 BufferedOutputStream(OutputStream out) 创建字节缓冲输出流对象 BufferedInputStream(InputStream in) 创建字节缓冲输入流对象
为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?
字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作
package com.itheima.output;
import java.io.*;
public class OutputDemo11 {
public static void main(String[] args) throws IOException {
//就要利用缓冲流去拷贝文件
//创建一个字节缓冲输入流
//在底层创建了一个默认长度为8192的字节数组
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("bytestream\\a.avi"));
//创建一个字节缓冲输出流
//在底层创建了一个默认长度为8192的字节数组
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("bytestream\\copy.avi"));
int b;
while((b=bis.read())!=-1){
bos.write(b);
}
//方法的底层会把字节流关闭
bis.close();
bos.close();
}
}
缓冲流结合数组,进行文件拷贝
package com.itheima.output; import java.io.*; public class OutputDemo12 {
public static void main(String[] args) throws IOException {
//缓冲流结合数组,进行文件拷贝 //创建一个字节缓冲输入流
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("bytestream\\a.avi")); //创建一个字节缓冲输出流
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("bytestream\\copy.avi")); byte[]bytes=new byte[1024];
int len;
while((len=bis.read(bytes))!=-1){
bos.write(bytes,0,len);
}
bis.close();
bos.close();
}
}
小结:
字节流:可以操作(拷贝)所有类型的文件
字节缓冲流:可以提高效率
不能直接操作文件,需要传递字节流
拷贝文件的四种方式:
字节流一次读写一个字节
字节流一次读写一个字节数组
字节缓冲流一次操作一个字节
字节缓冲流一次操作一个字节数组
21.File和IO流的更多相关文章
- 12.19 file 与io流
12.19 file与io流 File 1. 新建文件或者文件夹 新建文件 File F = new File(pathname:"路径+文件名");Boolean flag = ...
- File(IO流)
import java.io.File; import java.io.IOException; import org.junit.Test; /** *java.io.File类 *1.凡是与输入输 ...
- 乐字节Java之file、IO流基础知识和操作步骤
嗨喽,小乐又来了,今天要给大家送上的技术文章是Java重点知识-IO流. 先来看看IO流的思维导图吧. 一. File 在Java中,Everything is Object!所以在文件中,也不例外! ...
- java学习第21天(IO流的使用)
IO流分类: A:流向 输入流 读取数据 输出流 写出数据 B:数据类型 字节流 字节输入流 字节输出流 字符流 字符输入流 字符输出流 注意: a:如果我们没有明确说明按照什么分,默认按照数据类型分 ...
- java 21 - 15 新IO流 NIO
1:JDK4 新IO要了解的类 Buffer(缓冲),Channer(通道) 2:JDK7 要了解的新IO类 Path:与平台无关的路径. Paths:包含了返回Path的静态方法. public ...
- IO流——File类(文件流类)
java语言的输入输出操作是借助于输入输出包java.io来实现的,按传输方向分为输入流与输出流,从外设传递到应用程序的流为输入流,将数据从应用程序输入到外设的流为输出流. File类的构造方法: 1 ...
- Java基础知识回顾之六 ----- IO流
前言 在上一篇文章中,回顾了Java的多线程.而在本篇文章中主要介绍Java IO的相关知识. IO的介绍 什么是IO? IO的名称又来是Input与Output的缩写,也就是输入流和输出流.输入流用 ...
- java IO流(一)
一.IO流概述 1 什么是IO流 (流就是通道对象) IO - Input(输入) Output(输出) 在Java的IO中,流是一个很形象的概念,就像水流一样. 当程序需要读取数据的时候,就会开启一 ...
- IO流的工具类
1.需要先导入jar包: FilenameUtils import org.apache.commons.io.FilenameUtils; public class FilenameUtilesDe ...
随机推荐
- java例题_23 递归求年龄
1 /*23 [程序 23 求岁数] 2 题目:有 5 个人坐在一起,问第五个人多少岁,他说比第 4 个人大 2 岁.问第 4 个人岁数,他说比第 3 个 3 人大 2 岁.问第三个人,又说比第 2 ...
- python mac地址计算
思路是10/16进制的转换和字符串的处理 开始造轮子 1.判断是否是mac地址 正则匹配是否符合条件 1 import re 2 3 def isMac(string): 4 preg = re.co ...
- 第11 章 : 可观测性:你的应用健康吗?(liveness和readiness)
课时 11:可观测性:你的应用健康吗?(莫源) 本次课程的分享主要围绕以下五个部分: 介绍一些整体需求的来源: 介绍在 K8s 中 Liveness 和 Readiness 的使用方式: 介绍在 K8 ...
- SqlServer游标的创建与使用
前言 大家都对SqlServer视图.存储过程.触发器的创建与使用有一定的了解了,我们来看下什么是游标,怎么使用,什么时候用. SqlServer视图的创建与使用 SqlServer存储过程的创建与使 ...
- OO_Unit2 关于性能优化与测试的那些事
OO_Unit2 关于性能优化与测试的那些事 OO的第2单元到本周也就正式完结了.尽管这个单元的主旋律是多线程,但"面向对象"的基本思想仍然是我们一切架构与优化的出发点与前提.因此 ...
- es的分布式架构原理能说一下么(es是如何实现分布式的啊)?
在搜索这块,lucene是最流行的搜索库.几年前业内一般都问,你了解lucene吗?你知道倒排索引的原理吗?现在早已经out了,因为现在很多项目都是直接用基于lucene的分布式搜索引擎--elast ...
- show engine innodb status 输出结果解读
show engine innodb status 输出结果解读 基于MySQL 5.7.32 最近想整理一下show engine innodb status的解读,但是发现中文互联网上相关的信息要 ...
- 代码安全丨第六期:XPath注入漏洞样例
1.什么是XPath注入漏洞? XPath是一种用来在内存中导航整个XML树的语言,它使用路径表达式来选取XML文档中的节点或者节点集. XPath注入是指程序使用外部输入动态构造用于从XML数据库检 ...
- 整合Atomikos、Quartz、Postgresql的踩坑日记
前言 由于业务需要,在单体Spring Boot项目中需要引入分布式事务,来保证单体应用连接的多个数据源的事务统一. 而说到分布式事务,小伙伴们肯定会想到阿里的Seata,阿里Seata强大的AT模式 ...
- k8s daemonset
DaemonSet控制器会在每个节点上运行单一的副本,他非常适合部署那些节点本身提供服务或者执行维护的 Pod 例如 : 存储相关,每个节点上运行glusterd, ceph 日志收集相关,每个节点上 ...