IO流:
I是指Input(输入),O是指Output(输出)
流按照处理数据的单位,可以分为字节流和字符流;按照流向分为输入流和输出流
File类
File类代表一个特定的文件或者目录,并提供了若干方法对该文件或目录进行操作。
创建一个文件类对象;
public class Test{
public static void main(String[] args) {
File file=new File("D:\\logs");
System.out.println(file.getPath());
file=new File("D:\\logs\\sirius.log");
System.out.println(file.getPath());
}
}
方法
Path path=file.toPath();
//file对象对应路径创建的path对象##########
System.out.println(path.getFileName());
//file对象对应的路径最后一级文件或文件夹
System.out.println(file.getPath());
//file对象对应的路径
System.out.println(file.getName());
//file对象对应的路径最后一级文件或文件夹
System.out.println(file.isDirectory());
//file对象判断是否为目录#############
System.out.println(file.isFile());
//file对象判断是否为文件##############
file=new File("D:\\a");
file=new File("D:\\logs\\sirius.log");
System.out.println(file.exists());
//判断目录或文件是否存在#############
file=new File("D:\\a.txt");
System.out.println(file.createNewFile());
//创建文件,不是目录
file=new File("D:\\aa");
System.out.println(file.mkdir());
//创建目录,但是只能创建一级。
file=new File("D:\\aa\\bb\\cc");
System.out.println(file.mkdirs());
//创建目录,创建多级。
file =new File("D:\\a\\bb");
System.out.println(file.delete());
//######### 删除最后一级文件夹,文件夹(不区分文件或文件夹)必须为空,否则删除失败
file =new File("D:\\a.txt");
System.out.println(file.delete());
//删除文件
file=new File("D:\\Program_Files\\WebStorm 2020.2.3");
File[] listFiles = file.listFiles();
//获取当前文件级别内的所有信息########
for (File l : listFiles) {
System.out.println(l.getPath());
//获取file文件对应的路径
}
String[] list = file.list();
//获取当前文件级别的文件名
for (String string : list) {
System.out.println(string);
}
Files
Path path=Paths.get("D:\\a");
System.out.println(Files.exists(path));
//判断path对应的路径是否存在
path=Paths.get("D:\\说明.txt");
System.out.println(Files.exists(path));
//判断path对应的路径是否存在
System.out.println(Files.createFile(path));
//创建path对象对应路径的文件
path=Paths.get("D:\\bb");
System.out.println(Files.createDirectory(path));
//创建目录,只能创建一级
path=Paths.get("D:\\bb\\cc");
System.out.println(Files.createDirectory(path));
//创建目录,只能创建一级 System.out.println(Files.createDirectories(path));
//创建目录,可以创建多级
拷贝文件:
InputStream抽象类是所有输入字节流类的直接或间接父类,FileInputStream是其重要子类:
FileInputStream常用构造方法:
FileInputStream(File file) :通过File对象创建FileInputStream对象。
FileInputStream(String name) :通过文件(非“目录”)路径创建FileInputStream对象。
FileInputStream常用方法:
int read():从输入流中读取单个字节的数据;如果已到达文件末尾,则返回 -1。
int read(byte[] b):从输入流中将最多b.length个字节的数据读入一个byte数组中,以整数形式返回存入数组中的实际字节个数;如果已到达文件末尾,则返回 -1。
void close():关闭此文件输入流并释放与此流有关的所有系统资源。
OutputStream抽象类是所有输出字节流类的直接或间接父类,FileOutputStream是其重要子类:
FileOutputStream常用构造方法:
FileOutputStream(File file) :通过File对象创建FileOutputStream对象。
FileOutputStream(String name) :通过文件(非“目录”)路径创建FileOutputStream对象。
FileOutputStream(File file, boolean append):通过File对象创建FileOutputStream对象;第二个参数如果为true ,则字节将被写入文件的末尾而不是开头。
FileOutputStream常用方法:
void write(int b):将指定的单个字节数据写入此文件输出流。
void write(byte[] b, int off, int len):将byte数组中从off开始的len个字节写入此文件输出流。
void flush():刷新字节输出流并强制写出缓冲内所有字节数据。
void close():关闭此文件输出流并释放与此流有关的所有系统资源。
1.path方法
Path inPath=Paths.get("D:\\logs\\sirius.log");
Path outPath=Paths.get("F:\\ppt\\sirius.log");
Files.copy(inPath, outPath);//拷贝文件
2.files方法
FileInputStream inputStream=new FileInputStream("D:\\logs\\sirius.log");
Path outPath=Paths.get("F:\\ppt\\rius.log");
Files.copy(inputStream, outPath);//拷贝文件
3.字节流
FileInputStream , FileOutputStream
单个输入输出
try {
FileInputStream inputStream=new FileInputStream("D:\\2.jpg");
FileOutputStream outputStream=new FileOutputStream("F:\\2.jpg");
int data;
while((data=inputStream.read())!=-1) {
outputStream.write(data);
}
inputStream.close();
outputStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
多个输入输出
try {
FileInputStream inputStream=new FileInputStream("D:\\ruanjian\\eclipse-jee-2021-06-M2-win32-x86_64.zip");
FileOutputStream outputStream=new FileOutputStream("F:\\eclipse-jee-2021-06-M2-win32-x86_64.zip");//
byte[] car=new byte[1024];
int length;
while((length=inputStream.read(car))!=-1) {
outputStream.write(car,0,length);
}
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
4.字符流
FileReader,FileWriter(*字节编码)
单个输入输出
try {
FileReader reader=new FileReader("D:\\1.txt");
FileWriter writer=new FileWriter("F:\\1.txt");
int data;
while((data=reader.read())!=-1) {
writer.write(data);
}
writer.flush();
writer.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
多个输入输出
try {
FileReader reader=new FileReader("D:\\1.txt");
FileWriter writer=new FileWriter("F:\\1.txt");
char[] car=new char[1024];
int length;
while((length=reader.read(car))!=-1) {
writer.write(car,0,length);
}
writer.flush();
writer.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
5.缓冲字符流
字节 BufferedInputStream , BufferedOutputStream
字符 BufferedReader , BufferedWriter
缓冲流是一种装饰器类,目的是让原字节流、字符流新增缓冲的功能以提高读取或写入。
try {
BufferedInputStream inputStream = new BufferedInputStream(new FileInputStream(""));
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(""));
byte[] car = new byte[1024];
int length;
while ((length = inputStream.read()) != -1) {
outputStream.write(car, 0, length);
}
outputStream.flush();
outputStream.close();
inputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
6.缓冲字节流
try {
BufferedReader reader = new BufferedReader(new FileReader("D:\\1.txt"));
BufferedWriter writer = new BufferedWriter(new FileWriter("F:\\1.txt"));
char[] car = new char[1024];
int length;
while ((length = reader.read(car)) != -1) {
writer.write(car, 0, length);
}
writer.flush();
writer.close();
reader.close();F
} catch (Exception e) {
e.printStackTrace();
}
7.转换流
字节流向字符流转换,解决读取字符文件时出现乱码
try {
InputStreamReader reader=new InputStreamReader(new FileInputStream("D:\\1.txt"));
OutputStreamWriter writer=new OutputStreamWriter(new FileOutputStream("F:\\1.txt"));
char[] car = new char[1024];
int length;
while ((length = reader.read(car)) != -1) {
writer.write(car, 0, length);
}
writer.flush();
writer.close();
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
8.释放资源:
try(
FileInputStream inputStream=new FileInputStream("F:\\2.jpg");
FileOutputStream outputStream=new FileOutputStream("D:\\2.jpg");
) {
int data;
while((data=inputStream.read())!=-1) {
System.out.println(1/0);
outputStream.write(data);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
public static void main(String[] args) {
FileInputStream inputStream=null;
FileOutputStream outputStream=null;
try {
inputStream=new FileInputStream("F:\\2.jpg");
outputStream=new FileOutputStream("ddF:\\2.jpg");//地址错误,释放资源
int data;
while((data=inputStream.read())!=-1) {
System.out.println(1/0);//使用异常中止,让其释放资源
outputStream.write(data);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (inputStream!=null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream!=null) {//做出判断,因地址错误,避免空指针异常
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
FileInputStream inputStream=null;
FileOutputStream outputStream=null;
try {
inputStream=new FileInputStream("D:\\ruanjian\\eclipse-jee-2021-06-M2-win32-x86_64.zip");
outputStream=new FileOutputStream("F:\\eclipse-jee-2021-06-M2-win32-x86_64.zip");//地址错误,释放资源
byte[] car=new byte[1024];
int length;
while((length=inputStream.read(car))!=-1) {
outputStream.write(car,0,length);
}
outputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if (inputStream!=null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream!=null) {//做出判断,因地址错误,避免空指针异常
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
递归实现遍历指定目录中的所有文件和文件夹
public class Test{
public static void main(String[] args) throws IOException {
itearator(new File("C:\\"));
}
public static void itearator(File file){
if(file.isDirectory()) {
File[] listFiles = file.listFiles();
if(listFiles != null) {
for (int i = 0; i < listFiles.length; i++) {
itearator(listFiles[i]);
}
}
System.out.println(file.getPath());
}else {
System.out.println(file.getPath());
}
}
}