文章目录
- 前言
- 一、File类
- 二、使用File
- 1.构造方法
- 2.常用方法
- 三 代码实践
- 1.
- 2.
前言
IO流:
程序在内存运行, 变量, 数组,对象,集合…都是存在内存中.
内存存储: 临时存储, 一旦程序结束,这个程序所占用内存全部释放
硬盘/U盘. 其他存储设备: 存储数据, 永久性, 持久化
一、File类
表示存储设备中的一个文件或者文件夹(目录), IO流下的类位于java.io包
> 作用: 对文件/文件夹的操作(新增,删除, 读取文件/文件夹相关信息), 不能对文件的内容进行操作
>文件/文件夹: 路径: 上级目录与下级目录之间有分割符
>
>不同操作系统路径分隔符不一样:
>
> windows操作系统: `\` 在java中, 转义符:=(\n)的开始符号, 在java代码中, 写成 `\\`
>
> linux操作系统: `/`
>
>但是: 在java中可以正确的处理不同系统中的分隔符。
>
>File类提供了 static final String pathSeparator
二、使用File
1.构造方法
/**
* File类
*/
public class FileDemo1 {
public static void main(String[] args) {
//创建一个File对象, 可以是文件/文件夹
//创建一个File对象, 代表的是本地电脑上d盘上test/hello.txt
//hello.txt的完整路径: String
//File file1 = new File("D:\\test\\hello.txt"); //windows的分隔符
//写成linux的分隔符
File file1 = new File("D:/test/hello.txt"); //文件
//File(File parent, String child)
//根据上级目录与文件名创建一个File
//上级目录的File对象
File parent = new File("D:/test"); //文件夹
File file2 = new File(parent,"hello.txt");
//File(String parent, String child)
File file3 = new File("D:/test","hello.txt");
}
}
2.常用方法
>判断FIle是否是文件
>
>boolean isFile() true: 是文件 false: 不是文件, 就是文件夹
>判断File是否是文件夹
>
>boolean isDirectory() true: 是文件夹 false: 不是文件夹, 就是文件
>获取文件名/文件夹名
>
>String getName()
>
>
>获取上级目录:
>
>String getParent() 上级目录路径字符串
>
>File getParentFile() 上级目录File对象
>获取文件/文件夹的绝对路径: 从盘符开始
>
>String getAbsolutePath()
>
>File getAbsolutePathFile()
>获取文件/文件夹最后一次修改时间(毫秒值)
>
>long lastModified()
>判断文件是否存在:
>
>boolean exists() true: 存在, false: 不存在 **重要**
>
>获取文件大小: 字节, 不存在: 0L
>
>long length()
>
>
>
>创建文件:
>
>boolean createNewFile() 只能创建文件 true: 创建成功, false: 创建文件
>
>
>删除文件/文件夹
>
>boolean delete() true 删除成功, false: 删除失败 **重要**
>
>注意: 删除文件夹,要求这个文件夹必须是空文件夹, 这个文件夹不包含子文件或者子文件夹
>
>
>
>创建文件夹
>
>boolean mkdir() 创建文件夹 true创建成功 false创建失败(这个文件夹已存在, 上级目录不存在)
>
> mkdir() 只能创建本级文件夹, 不能创建上级目录
>
>
>
>boolean mkdirs() 创建文件夹 true创建成功 false创建失败(这个文件夹已存在) **推荐 ** **重要**
>
> mkdirs() 创建本级文件夹, 如果所有上级目录都存在, 创建所有上级目录
获取这个文件夹的子文件、子文件夹
如果想获取某个文件夹下所有的后代文件/文件夹(包括: 子,孙,…) 使用递归
三 代码实践
eg:在电脑D盘下创建一个文件为HelloWorld.txt文件,判断他是文件还是目录,再创建一个目录IOTest,;之后遍历IOTest这个目录下的文件.
1.
public class IOS {
public static void main(String[] args) throws IOException {
//创建一个File对象, 代表的是本地电脑上d盘上
File file = new File("D:/HelloWorld.txt");
//判断文件是否存在
if(file.exists()){
if(file.isFile()){
//打印文件名
System.out.println("它是:"+file.getName()+"文件");
//获取文件大小 length() 文件的长度(以字节为单位),如果文件不存在, 0L
System.out.println("文件大小:"+file.length()+"字节");
//获取上级目录 getParent()
System.out.println("file的上级目录::"+file.getParent());
//获取绝对路径:
System.out.println("file的绝对路径::"+file.getAbsolutePath());
System.out.println("file的绝对路径::"+file.getPath());
//上一次修改时间lastModified()
System.out.println("file上一次的修改时间::"+file.lastModified());
//删除
//file.delete();
}if(file.isDirectory()) {
System.out.println("它是:"+file.getName()+"文件夹");
}
}else {
boolean newFile = file.createNewFile();
if (newFile){
System.out.println("创建成功");
}else {
System.out.println("创建失败");//1.上级目录不存在 //2.这个文件已存在
}
}
//创建一个File对象, 代表的是本地电脑上d盘上
File file1 = new File("D:/IOTest");
if(file1.exists()){ //存在
//删除 delete()
// boolean isOk = file1.delete();
// if(isOk){
// System.out.println("删除成功");
// }else{
// System.out.println("删除失败");
// }
//获取子文件/子文件夹路径 String[] list()
String[] subFilePaths = file1.list();
for (String subFilePath : subFilePaths) {
System.out.println(subFilePath);
}
System.out.println("============");
//只要获取文件 list( FilenameFilter filter) 根据文件名过滤
//遍历文件夹的子文件/子文件夹 每获取一个子; 调用accept() 判断这个子文件/文件夹是否需要, 如果返回true, 需要 如果返回false, 过滤
String[] subFilePaths1 = file1.list(new FilenameFilter() {
/**
*
* @param dir 上级目录
* @param name 文件名/文件夹名称
* @return
*/
@Override
public boolean accept(File dir, String name) {
//只要获取文件
// return true;
//如果是文件返回true, 不是文件返回false isFile()
System.out.println(dir.getName());
System.out.println(name);
System.out.println("=============");
//构建一个子文件/文件夹的File
File subFile = new File(dir,name);
boolean rs = subFile.isFile() && name.endsWith(".txt");
return rs;
}
});
for (String subFilePath2 : subFilePaths1) {
System.out.println(subFilePath2);
}
}else{
//如果不存在, 创建文件夹
boolean isOk = file1.mkdirs();
if(isOk){
System.out.println("创建成功");
}else{
System.out.println("创建失败");
}
}
}
}
2.
public class IO2 {
public static void main(String[] args) {
File file = new File("D:/IOTest");
//获取子文件/子文件夹的File对象 File[] listFiles()
File[] subFiles1 = file.listFiles();
for (File subFile : subFiles1) {
System.out.println(subFile.getName());
System.out.println("=====");
}
System.out.println("-------");
//获取的目录 根据文件名称过滤, accept() name 文件名称
File[] subFiles2 = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
File childFile = new File(dir,name); //根据文件名创建File
return childFile.isDirectory();
}
});
//FileFilter 根据文件过滤, accept() File pathname 就是子文件/子文件夹的File对象
File[] subFiles = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
System.out.println(pathname.getName());
return pathname.isDirectory();
}
});
for (File subFile : subFiles2) {
System.out.println(subFile.getName());
System.out.println("==");
}
}
}