File文件
- IO流其实就是java程序与计算机上(或者网络上的文件),进行交互的抽象过程。
- IO流通过java程序操作计算机上的文件或者文件夹
- Windows操作系统使用dos命令来操作计算机上的文件。
一.File
-
该类用来表示文件的路径
-
路径分为:
相对路径:有一个参考目标,以参考目标为例,相对于目标的位置。
绝对路径:能够直接准确定位到的位置,哪个盘符下。 -
在java程序中,如果要将文件放到相对于该程序的位置时(将文件放到程序中),放到项目的根目录下或者根目录下的子目录(不可以放到src下)。
-
URL,URI:统一资源定位符。
URI:只能进行位置的确定,只能得到路径是什么 。
URL:可以获取文件位置,可以使用IO流进行网络资源的获取(url做网络爬虫 )。
二.对文件的操作(文件和文件夹)
- 对文件的操作:新建、删除、查询
构造方法
- File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
- File(String pathname) 通过将给定路径名字符串转换成抽象路径名来创建一个新 File 实例。
- File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
@Test
void file02() {
//两个参数的构造方法,拼接
File file = new File("D:\\Java1");
File file01=new File(file,"zuoye\\laoshi.java");
System.out.println(file01.getAbsolutePath());//D:\Java1\zuoye\laoshi.java
File file02=new File("D:\\Java1","zuoye\\laoshi.java");
System.out.println(file02.getAbsolutePath());//D:\Java1\zuoye\laoshi.java
}
- File(URI uri) 通过将给定的 file: URI 转换成一个抽象路径名来创建一个新的 File 实例。
// 使用URL获取资源:资源下载
@Test
void file05() {
try {
URL url=new URL("https://tse1-mm.cn.bing.net/th?id=OIP.Tlumx9iXVC4rqPbISLZaRQHaF7&w=211&h=160&c=8&rs=1&qlt=90&dpr=1.61&pid=3.1&rm=2");
URLConnection openConnection = url.openConnection();
InputStream inputStream = openConnection.getInputStream();
FileOutputStream out=new FileOutputStream(new File("java.jpg"));
byte[] bytes=new byte[1024*1000];
inputStream.read(bytes);
out.write(bytes);
out.close();
inputStream.close();
System.out.println("文件下载完成");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
常用方法
- String
getName() 返回由此抽象路径名表示的文件或目录的名称。 - String
getAbsolutePath() 返回抽象路径名的绝对路径名字符串。
@Test
void file01() {
//实例化,相对路径和绝对路径\是转义符
File file = new File("PrizeDome.java");//文件的相对路径
File file01 = new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun\\zuoye");//文件夹
// 获取所指的文件或者文件夹的名字
System.out.println(file.getName());//PrizeDome.java
System.out.println(file01.getName());//zuoye
// 获取所指文件或文件夹在电脑中的绝对位置
System.out.println(file.getAbsolutePath());//D:\Java1\Workspace1\IO\PrizeDome.java
System.out.println(file01.getAbsolutePath());//D:\Java1\Workspace\java数据\src\com\xingyun\zuoye
}
- String
getPath() 将此抽象路径名转换为一个路径名字符串。 - boolean
isAbsolute() 测试此抽象路径名是否为绝对路径名。 - boolean
isDirectory() 测试此抽象路径名表示的文件是否是一个目录。 - boolean
isFile() 测试此抽象路径名表示的文件是否是一个标准文件。 - boolean
isHidden() 测试此抽象路径名指定的文件是否是一个隐藏文件。 - boolean
exists() 测试此抽象路径名表示的文件或目录是否存在。 - long
length() 返回由此抽象路径名表示的文件的长度。
@Test
void file01() {
File file01 = new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun\\zuoye\\PrizeDome.java");
System.out.println("是不是绝对路径:"+file01.isAbsolute());//是不是绝对路径:true
System.out.println("是不是目录:"+file01.isDirectory());//是不是目录:false
System.out.println("是不是文件:"+file01.isFile());//是不是文件:true
System.out.println("是否是隐藏文件:"+file01.isHidden());//是否是隐藏文件:false
System.out.println("文件是否存在:"+file01.exists());//文件是否存在:true
System.out.println("文件的长度为"+file01.length());//文件的长度为2392
}
- boolean
delete() 删除此抽象路径名表示的文件或目录。 - boolean
**mkdir()**创建此抽象路径名指定的目录。 一级目录 - boolean
mkdirs() 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。 多级目录 - boolean
createNewFile() 当且仅当不存在具有此抽象路径名指定的名称的文件时,原子地创建由此抽象路径名指定的一个新的空文件。
@Test
void file02() {
File file01 = new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun\\zuoye\\PrizeDome.java");
//删除
boolean delete = file01.delete();
System.out.println("是否删除成功:"+delete);
//创建文件
File newfile=new File("D:\\Java1\\Workspace\\test");
boolean mkdir = newfile.mkdir();//一级目录
boolean mkdirs = newfile.mkdirs();//多级目录
System.out.println("是否成功创建文件夹"+mkdir);
System.out.println("是否成功创建文件夹"+mkdirs);
File newfile01=new File("D:\\Java1\\Workspace\\文本.docx");
try {
boolean createNewFile = newfile.createNewFile();
System.out.println("是否成功创建文件:"+createNewFile);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
- String[]
list() 返回由此抽象路径名所表示的目录中的文件和目录的名称所组成字符串数组。 - String[]
list(FilenameFilter filter) 返回由包含在目录中的文件和目录的名称所组成的字符串数组,这一目录是通过满足指定过滤器的抽象路径名来表示的。 - File[]
listFiles() 返回一个抽象路径名数组,这些路径名表示此抽象路径名所表示目录中的文件。 - File[]
listFiles(FileFilter filter) 返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。 - File[]
listFiles(FilenameFilter filter) 返回表示此抽象路径名所表示目录中的文件和目录的抽象路径名数组,这些路径名满足特定过滤器。 - static File[]
listRoots() 列出可用的文件系统根目录。
//查找,遍历
@Test
void file03() {
File file= new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
int count=0;
if(file.exists()) {
System.out.println("文件或文件夹存在");
if(file.isDirectory()) {
System.out.println("它是一个目录");
// 获取该目录的所有文件和文件夹
String[] list = file.list();// 获得的内容全是文件或者文件夹的名字 字符串形式
for (String string : list) {
count++;
System.out.println(string);
}
System.out.println("该目录总共有"+count+"个文件");
}else {
System.out.println("是一个文件");
}
}else {
System.out.println("文件或文件夹不存在");
}
}
@Test
void file04() {
File file= new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
String[] list = file.list();
for (String string : list) {
//只要后缀为jpg格式的
if(string.endsWith("jpg")) {
System.out.println(string);
}
}
}
@Test
void file05() {
File file= new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
String[] list = file.list();
System.out.println(list.length);
File[] listFiles = file.listFiles();
System.out.println(listFiles.length);
}
- 使用递归进行文件内容的遍历
public class DiGuiDemo {
static int count=0;
public static void main(String[] args) {
File file= new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
getFile(file);
System.out.println("总数有"+count);
}
public static void getFile(File file) {
if(file.exists()){
if(file.isDirectory()) {
File[] listFiles = file.listFiles();
for (File file2 : listFiles) {
//递归
getFile(file2);
}
}else {
if(file.getName().endsWith("java")) {
System.out.println(file.getName());
count++;
}
}
}
}
}
三.文件过滤器 FileFileter
- 函数式接口
常用方法
- boolean
accept(File pathname) 测试指定抽象路径名是否应该包含在某个路径名列表中。
public class FileFiter01 {
@Test
void fileFilter01() {
//实例化file
File file=new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
// 使用过滤器进行过滤
File[] listFiles = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
// TODO Auto-generated method stub
if(pathname.getName().endsWith("java")) {
return true;
}
return false;
}
});
System.out.println(listFiles.length);
for (File file2 : listFiles) {
System.out.println(file2);
}
}
@Test
void fileFilter02() {
//实例化file
File file=new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
// 使用过滤器进行过滤
File []listFiles =file.listFiles((File name) ->{
if(name.getName().endsWith("java")) {
return true;
}
return false;
}
);
System.out.println(listFiles.length);
for (File file2 : listFiles) {
System.out.println(file2);
}
}
@Test
void fileFilter03() {
File file=new File("D:\\Java1\\Workspace\\java数据\\src\\com\\xingyun");
File []files =file.listFiles(new MyFilter());
System.out.println(files.length);
for (File file2 : files) {
System.out.println(file2.getName());
}
}
}
// 自定义过滤器
class MyFilter implements FileFilter{
@Override
public boolean accept(File pathname) {
if(pathname.getName().endsWith("zip")) {
return true;
}
return false;
}
}