File类的文件代表操作系统的文件或文件夹
| 方法名 | 解释 |
|---|---|
public File(String pathname) | 根据文件路径创建文件对象 |
public File(String parent, String child) | 根据父路径名字符串和子路径名字符串创建文件对象 |
public File(File parent, String child) | 根据父路径对应文件对象和子路径名字符串创建文件对象 |
File对象可以定位文件和文件夹
File封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以是不存在的
File file = new File("D:\\aa.txt");

File file = new File("data/ip.txt");
| 方法名 | 解释 |
|---|---|
public boolean isDirectory() | 判断是否为文件夹 |
public boolean isFile() | 判断是否为文件 |
public boolean exists() | 判断是否存在 |
public long length() | 获取文件的大小(字节数量) |
public String getAbsolutePath() | 获取文件的绝对路径 |
public String getPath() | 获取定义文件时使用的路径 |
public String getName() | 获取文件的名称,带后缀 |
public long lastModified() | 获取文件的最后修改时间(时间毫秒值) |

import java.io.File;
public class ClassStructure {
public static void main(String[] args) {
File file = new File("data/ip.txt");
//是否为文件夹
System.out.println(file.isDirectory());
//是否为文件
System.out.println(file.isFile());
//是否存在
System.out.println(file.exists());
//文件的大小(字节数量)
System.out.println(file.length());
//文件的绝对路径
System.out.println(file.getAbsolutePath());
//定义文件时使用的路径
System.out.println(file.getPath());
//文件的名称,带后缀
System.out.println(file.getName());
//文件的最后修改时间(时间毫秒值)
System.out.println(file.lastModified());
}
}
| 方法名 | 解释 |
|---|---|
public boolean createNewFile() | 创建新的空文件 |
public boolean mkdir() | 只能创建一级文件夹 |
public boolean mkdirs() | 可以创建多级文件夹 |

import java.io.File;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
File file = new File("data1");
//只能创建一层文件夹
boolean mkdir = file.mkdir();
System.out.println(mkdir);
File file1 = new File("data1\\data");
//创建多层文件夹
System.out.println(file1.mkdirs());
//创建新文件
File file2 = new File("data1\\data\\test.txt");
boolean newFile = file2.createNewFile();
System.out.println(newFile);
}
}
| 方法名 | 解释 |
|---|---|
public boolean delete() | 删除由此抽象路径名表示的文件或空文件夹; delete方法默认只能删除文件和空文件夹,delete方法直接删除不走回收站 |

import java.io.File;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
File file = new File("data1\\data\\test.txt");
//删除文件
boolean delete = file.delete();
System.out.println(delete);
}
}

import java.io.File;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
File file = new File("data1");
//删除文件
boolean delete = file.delete();
System.out.println(delete);
}
}
| 方法名 | 解释 |
|---|---|
publicString[]list() | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回 |
publicFile[]listFiles() | 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回 |
返回为null的情况,可以有效避免遍历返回数组时候出现运行时异常
File对象不存在时或者代表文件时,返回null
File对象代表一个空文件夹时,返回一个长度为0的数组
File对象是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回
File对象是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件
File对象权限访问该文件夹时,返回null

import java.io.File;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
File dir = new File("data\\nest");
File[] files = dir.listFiles();
for (File file : files) {
System.out.println(file);
}
}
}

I标识Input,数据从硬盘到内存读入的过程,叫输入,负责读
O标识Output,数据从内存到写出到硬盘的过程,叫输出,负责写
把磁盘中的数据已字节的形式读入到内存中
| 构造器 | 解释 |
|---|---|
public FileInputStream(File file) | 创建字节输入流管道与源文件对象接通 |
public FileInputStream(String pathname) | 创建字节输入流管道与源文件路径接通 |
| 方法名 | 解释 |
|---|---|
public int read() | 每次读取一个字节,没有字节返回-1 |
public int read(byte[] buffer) | 每次读取一个字节数组,没有字节返回-1 |
public int read(byte[] buffer,int off,int len) | 从下标off的位置开始读取最多len个字节数据储存于buffer数组缓冲区 |

import java.io.FileInputStream;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
int read = 0;
//创建一个读入数据的相对路径的流
FileInputStream fileInputStream = new FileInputStream("data/access.log");
/* int i
//判断文件是否为空,否则一直读取打印
while ((read = fileInputStream.read()) != -1){
System.out.print((char)read);
}
System.out.println();
*/
/* byte[] buffer
//创建一个8字节数组
byte[] by = new byte[8];
//读取流
read = fileInputStream.read(by);
System.out.println(read);
//转换为字符串
String str = new String(by);
System.out.println(str);
*/
/*
byte[] buffer , int pos , int len 指定输出流
*/
//创建一个8字节数组
byte[] by = new byte[8];
//判断文件是否为空,否则一直读取打印
while((read = fileInputStream.read(by)) != -1){
//转换为字符串
String str = new String(by,0,read);
System.out.println(str);
}
//读取完流必须关闭
fileInputStream.close();
}
}
内存中的数据以字节的形式写出到磁盘中
| 构造器 | 解释 |
|---|---|
public FileOutputStream(File file) | 创建字节输出流管道与源文件对象接通 |
public FileOutputStream(File file,boolean append) | 创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath) | 创建字节输出流管道与源文件路径接通 |
public FileOutputStream(String filepath,boolean append) | 创建字节输出流管道与源文件路径接通,可追加数据 |
| 方法名 | 解释 |
|---|---|
public void write(int i) | 一个字符数据写入输入流 |
public void write(byte[] buffer) | 字符类型数组中的数据写入输出流 |
public void write(byte[] buffer , int pos , int len) | 字符类型数组中的指定部分数据写入输出流 |
flush() | 刷新流,可以继续写数据 |
close() | 关闭流,释放资源,但是在关闭之前会先刷新流; 一旦关闭,就不能再写数据 |

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws IOException {
int read = 0;
//创建一个读入数据的相对路径的流
FileInputStream fileInputStream = new FileInputStream("data/access.log");
FileOutputStream fileOutputStream = new FileOutputStream("data/access1.log");
/* int i
//判断文件是否为空,否则一直读取打印
while ((read = fileInputStream.read()) != -1){
//把文件内容直接写入到access1.log中
fileOutputStream.write(read);
}
System.out.println();
/*
byte[] buffer , int pos , int len 指定输出流
*/
//创建一个8字节数组
byte[] by = new byte[8];
//判断文件是否为空,否则一直读取打印
while((read = fileInputStream.read(by)) != -1){
fileOutputStream.write(by,0,read);
}
System.out.println("复制OK");
//将输出流的缓冲流数据全部写出到达目的地
fileOutputStream.flush();
//读取完流必须关闭
fileInputStream.close();
//写入完流必须关闭
fileOutputStream.close();
}
}
finally:放在try-catch后面的,无论是正常执行还是异常执行代码,最后一定要执行,特殊情况除外

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ClassStructure {
public static void main(String[] args) throws FileNotFoundException {
int read = 0;
FileInputStream fileInputStream = null;
FileOutputStream fileOutputStream = null;
//创建一个读入数据的相对路径的流
fileInputStream = new FileInputStream("data/access.log");
fileOutputStream = new FileOutputStream("data/access1.log");
try {
//判断文件是否为空,否则一直读取打印
while ((read = fileInputStream.read()) != -1) {
//把文件内容直接写入到access1.log中
fileOutputStream.write(read);
}
System.out.println();
System.out.println("复制OK");
} catch (Exception e) {
e.printStackTrace();
} finally {
//将输出流的缓冲流数据全部写出到达目的地
try {
fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
}
try {
//读取完流必须关闭
if (fileInputStream != null) {
fileInputStream.close();
}
//写入完流必须关闭
if (fileOutputStream != null) {
fileOutputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}