内容:File和 Path、IO流
一、File
File对象就代表了文件和目录路径名的抽象表示形式。
1、File一般方法:
boolean delete() | 删除文件/文件夹 |
boolean exists() | 判断文件/文件夹是否存在 |
File getAbsoluteFile() | 获取文件/文件夹的绝对路径(返回值:File) |
String getName() | 获得文件/文件夹名字 |
String getParent() | 获取文件/文件夹的父文件/文件夹 |
File getParentFile() | 获取文件/文件夹的父文件/文件夹(返回值:File) |
String getPath() | 获取文件/文件夹的路径 |
boolean isDirectory() | 判断该文件/文件夹是不是文件夹 |
isFile() | 判断该文件/文件夹是不是文件 |
isHidden() | 判断该文件/文件夹是否隐藏 |
long lastModified() | 获取文件/文件夹最后一次修改时间 |
long length() | 获取文件大小;获取文件夹里面的文件个数 |
String[] list() | 获取文件夹的文件名字以String[]返回 |
File[] listFiles() | 获取文件夹的文件名字以File[]返回 |
boolean mkdir() | 创建文件/文件夹 |
2、File构造方法:
File(String pathname) | pathname文件/文件夹路径 |
例如:
File(String pathname) :通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
File(File parent, String child) :根据 路径为parent的File对象 和 child 路径名字符串创建一个新 File 实例。
File(String parent, String child) :根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
public static void main(String[] args) throws IOException {
// File(String pathname):将指定的路径名转换成一个File对象
File file = new File("F:\\a\\b.txt");
System.out.println(file);
// output:F:\a\b.txt
// File(String parent, String child):根据指定的父路径和文件路径创建File对象
File file2 = new File("F:\\a", "b.txt");
System.out.println(file2);
// output:F:\a\b.txt
// File(File parent, String child):根据父路径对象和文件路径创建File对象
File parent = new File("F:\\a");
File file3 = new File(parent, "b.txt");
System.out.println(file3);
// output:F:\a\b.txt
//使用匿名内部类创建File对象
File file4 = new File(new File("F:\\a"), "b.txt");
System.out.println(file4);
// output:F:\a\b.txt
}
- 创建功能/删除功能
boolean createNewFile()
boolean mkdir()
boolean mkdirs()
boolean delete()
private static void method1() throws IOException {
//创建File对象,指向的路径为相对当前项目的路径,即项目的根位置
File f1= new File("a.txt");
//boolean createNewFile() :当指定文件不存在时,创建文件并返回true;否则,返回false
System.out.println(f1.createNewFile());
//output:false(说明文件已经存在,创建失败)
//boolean mkdir() : 当指定文件夹不存在时,创建文件夹并返回true;否则,返回false
File f2 = new File("b");
System.out.println(f2.mkdir());
//output:true
//boolean mkdirs() : 创建多级目录
File f3 = new File("c\\d\\e");
System.out.println(f3.mkdirs());
//output:true
//boolean delete() : 删除存在的指定文件或文件夹,成功返回true,否则返回false
System.out.println(f1.delete());
//output:true
System.out.println(f2.delete());
//output:true
System.out.println(f3.delete());
//output:true(这里只删除了c/d/e文件目录中的e)
//删除文件夹时,文件夹下不能有文件夹或文件。同时,删除的文件不经过回收站。
File f4 = new File("c");
File f5 = new File("c\\d");
System.out.println(f4.delete());
//output:false(c文件夹下还有其他文件 因此不能删除,返回false)
System.out.println(f5.delete());
//output:true
System.out.println(f4.delete());
//output:true(c文件夹下没有文件时,才能删除c,返回true)
}
- 判断功能
boolean exists()
boolean isAbsolute()
boolean isDirectory()
boolean isFile()
boolean isHidden()
private static void method2() {
//创建File对象
File f1 = new File("a.txt");
File f3 = new File("b");
File f2 = new File("f:\\test.txt");
//boolean exists() : 判断文件或文件夹是否存在,存在返回true,否则返回false
System.out.println(f1.exists());
//output:false
//boolean isAbsolute() : 判断File对象指向是否是绝对路径,是返回true。
System.out.println(f1.isAbsolute());
//output:false f1对象存储的为相对地址
System.out.println(f2.isAbsolute());
//output:true f2对象存储的为绝对地址
//boolean isDirectory() : 判断File对象指向的路径是否为文件夹,是返回true。
//boolean isFile() : 判断File对象指向的路径是否为文件,是返回true。
System.out.println(f1.isDirectory());
//output:false a不是目录
System.out.println(f3.isDirectory());
//output:true b是目录
System.out.println(f1.isFile());
//output:true a是文件
System.out.println(f3.isFile());
//output:false b不是文件
//boolean isHidden() : 判断文件是否为隐藏文件,是返回false
System.out.println(f1.isHidden());
//output:false
}
File中其他的几个获取方法,返回值都是数组形式
String[] list()
File[] listFiles()
static File[] listRoots()
private static void method5() {
File f = new File("f:\\test");
// String[] list(): 返回当前路径下所有的文件和文件夹 名称 的数组
// 只有指向文件夹的File才能调用该方法
String[] str1 = f.list();
for (String s : str1) {
System.out.println(s);
}
// output:test.jpg
// test.txt
// File[] listFiles() : 返回当前路径下所有的文件和文件夹的数组
// 只有指向文件夹的File才能调用该方法
File[] file1 = f.listFiles();
for (File file : file1) {
System.out.println(file);
}
// output:f:\test\test.jpg
// f:\test\test.txt
// static File[] listRoots(): 静态方法,返回所有的盘符
File[] file2 = File.listRoots();
for (File file : file2) {
System.out.println(file);
}
// output: C:\
// D:\
// E:\
// F:\
// G:\
// I:\
}
二、Path
1、什么是环境变量:
path环境变量是用于记住程序路径,方便在命令行窗口cmd中的任意目录启动程序。
注:一般在cmd中启动某程序时,需要先在cmd中将目录转到该程序所在目录(保存路径),然后才可以启动该程序。如果cmd中的目录不是该程序的所在目录,则启动时会报错。
举例如下:在cmd中启动名为PotPlayerMini的视频播放器程序,此时cmd中的目录并不是该程序的所在路径,启动则报错如下:
2、为什么要配置path环境变量
当我们在cmd中启动程序时,系统会根据以下规则去寻找并启动程序:
1.系统首先会在cmd中的当前目录下搜索该程序并启动,如果cmd的当前目录下 有 该程序,则该程序被启动;
2.如果cmd的当前目录下 没有 该程序,则系统会进入环境变量中path条目中搜索该程序所在目录(保存路径),如果path中添加了该程序的所在目录(保存路径),则该程序被启动;
3.如果path中 没有 添加该程序的所在目录(保存路径),则系统此次搜索结果是未找到该程序,则会报错,程序不被启动。
举例如下:PotPlayerMini程序保存目录(保存路径)是在G盘的potplayer文件夹下
然后我们将该目录添加到path环境变量中,如下:
然后我们再新打开一个cmd窗口,启动PotPlayerMini:
此时cmd中的当前目录并不是PotPlayerMini程序的所在目录(保存路径),但该程序可以被启动。
即:将某个程序的所在目录(保存路径)添加到path环境变量中后,我们便可以在cmd中的任意目录下启动该程序。
注意:当我们新增了一个path变量后,需要点击确定以进行保存,然后需要重新打开一个新的cmd窗口。如果是在添加path变量前打开的cmd窗口,则新增的path变量在该cmd窗口内不会生效。
三、IO流
1.IO:输入(Input读取数据)/输出(Output写数据)
2.流:是一种抽象概念,是对数据传输的总称,也就是说数据在设备间的传输称为流,流的本质是数据传输,IO流就是用来处理设备间数据传输问题的。
流的分类:
按流的方向:输入流,输出流
按处理数据单位:字节流,字符流
按角色的不同:节点流(直接作用在文件),处理流
字节流/字符流 | 抽象类 | 节点流 | 缓冲流(处理流之一) | 传输内容 | |
输入流 | 字符流 | Reader | FileReader | BufferedReader | 文本文件 |
输入流 | 字节流 | InputStream | FileInputStream | BufferedInputStream | 文本文件,图片,视频等 |
输出流 | 字符流 | Writer | FileWriter | BufferedWriter | 文本文件 |
输出流 | 字节流 | OutputStream | FileOutputStream | BufferedOutputStream | 文本文件,图片,视频等 |
注:二进制文件必须用字节流,例如图片,音频,视频等(windows记事本打开乱码的文件)