目录
一、File类
1.简述
java.io.File 类是java提供的针对磁盘中文件和目录对象的一个类。代表操作系统的文件(文件、文件夹)。
2.创建File对象
2.1 public File(String pathname): 以pathname为路径创建File对象,可以是绝对路径或者相对路径。
2.2 public File(String parent,String child) 以parent为父路径,child为子路径创建File对象。
2.3 public File(File parent,String child) 根据一个父File对象和子文件路径创建File对象。
小贴士:
1.一个File对象代表指向硬盘中的一个文件或者目录路径(举例,只代表此路径,不代表里面的内容。举例:地址不是房子,File对象指向地址,不是文件本身)
2.无论该路径下是否存在文件或者目录,都不影响File对象的创建。
File f1 = new File("E:\\YuanJiuYuan\\a.txt");//传入一个String path路径
File f1 = new File("E:\\YuanJiuYuan","a.txt");//传入两个路径,分别是父路径和子路径
File f1 = new File(new File("E:\\YuanJiuYuan"),"a.txt");
3.文件操作
3.1获取文件信息
(1)public String getName() :获取文件的名称,带后缀。
(2)public long length() :获取文件长度(即:字节数---真实的大小)。不能获取目录的长度--仅表示当前操作系统为保存目录所涉及的长度。
(3)public long lastModified() :获取最后一次的修改时间,毫秒值 使用new Date(f1.lastModified());// 返回的是当天时间。
import java.io.File;
import java.util.Date;
public class Demo01 {
public static void main(String[] args) {
// 存在的目录路径
// 小贴士:
// 1. 一个 File 对象代表指向硬盘中的一个文件或者目录路径(举例,只代表此路径,不代表里面的内容。举例:地址不是房子,File 对象指向地址
// 2. 无论该路径下是否存在文件或者目录,都不影响 File 对象的创建。
File f1 = new File("E:\\YuanJiuYuan");
System.out.println(f1);
// 存在的文件路径
File f2 = new File("E:\\YuanJiuYuan\\a.txt");
System.out.println(f2);
// 不存在的目录路径
File f3 = new File("E:\\YuanJiuYuan\\aaa");
System.out.println(f3);
// 不存在的文件路径
File f4 = new File("E:\\YuanJiuYuan\\a.jpg");
System.out.println(f4);
String str="文件名为%s,文件大小为%d,文件最后一次修改时间为%s\n";
// public String getName() :获取文件的名称,带后缀
// public long length() :获取文件长度(即:字节数---真实的大小)。不能获取目录的长度--仅表示当前操作系统为保存目录所涉及的长度。
// public long lastModified() :获取最后一次的修改时间,毫秒值
//使用new Date(f1.lastModified());// 返回的是当天时间
System.out.printf(str, f1.getName(), f1.length(), new Date(f1.lastModified()));
System.out.printf(str, f2.getName(), f2.length(), new Date(f2.lastModified()));
System.out.printf(str, f3.getName(), f3.length(), new Date(f3.lastModified()));
System.out.printf(str, f4.getName(), f4.length(), new Date(f4.lastModified()));
}
}
(4)public String getAbsolutePath():获取文件的绝对路径 。
(5)public String getPath() :获取路径,返回定义文件时使用的路径。
(6)public String getCannoicalPath() 获取规范路径。
import java.io.File;
import java.io.IOException;
public class Demo02 {
public static void main(String[] args) throws IOException {
File f1 = new File(new File("E:\\YuanJiuYuan"),"a.txt");
System.out.println("文件绝对路径:"+f1.getAbsolutePath());
System.out.println("文件使用路径:"+f1.getPath());
System.out.println("文件规范路径:"+f1.getCanonicalPath());
//.表示当前路径,..表示当前路径的上层路径
File f2=new File(".\\a.txt");
System.out.println("文件绝对路径:"+f2.getAbsolutePath());
System.out.println("文件使用路径:"+f2.getPath());
System.out.println("文件规范路径:"+f2.getCanonicalPath());
}
}
//运行结果
//文件绝对路径:E:\YuanJiuYuan\a.txt
//文件使用路径:E:\YuanJiuYuan\a.txt
//文件规范路径:E:\YuanJiuYuan\a.txt
//文件绝对路径:E:\Idea\Test\.\a.txt
//文件使用路径:.\a.txt
//文件规范路径:E:\Idea\Test\a.txt
(7)public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组---注意返回类型。
(8) public File[] listFiles() :获取指定目录下的所有文件或者目录的File数组----返回时File。
注意:
1.在使用时要确认其是一个目录(如果是文件返回为null,如果没有权限访问此目录返回也是null)。
2.当文件对象代表一个空文件夹时 返回一个长度为0的数组。
3.当文件对象是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回。
4.单文件对象是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放入File数组中放回,包含隐藏文件。
import java.io.File;
import java.util.Arrays;
public class Demo07 {
public static void main(String[] args) {
//public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组---注意返回类型
File f1=new File("E:\\YuanJiuYuan");
String[] names=f1.list();
System.out.println(Arrays.toString(names));
//public File[] listFiles() :获取指定目录下的所有文件或者目录的File数组----返回时File
File[] files=f1.listFiles();
System.out.println(Arrays.toString(files));
}
}
import java.io.File;
public class Demo08 {
public static void main(String[] args) {
File f1=new File("E:\\YuanJiuYuan");
showFiles(f1);
}
//获取文件夹下的所有文件或目录信息
public static void showFiles(File file){
File[] files=file.listFiles();
for (File f:files) {
if (f.isDirectory()){
System.out.println("[目录]"+f.getName());
showFiles(f);//递归
}else{
System.out.println("[文件]"+f.getName()+"[大小]"+f.length());
}
}
}
}
3.2 判断文件
(1)public boolean exists() :判断是否存在。
(2)public boolean isDirectory():判断是否是目录 。
(3)public boolean isFile() :判断是否是文件。
import java.io.File;
public class Demo03 {
public static void main(String[] args) {
//存在的文件和目录
File f1=new File("E:\\YuanJiuYuan\\ziliao");
File f2=new File("E:\\YuanJiuYuan\\ziliao\\a.txt");
//不存在文件和目录
File f3=new File("E:\\YuanJiuYuan\\ziliao\\aaa");
File f4=new File("E:\\YuanJiuYuan\\ziliao\\a.jpg");
//判断是否存在
String str="[%s]是否存在%s,是否存在文件%s,是否存在目录%s\n";
System.out.printf(str,f1.getName(),f1.exists(),f1.isFile(),f1.isDirectory());
System.out.printf(str,f2.getName(),f2.exists(),f2.isFile(),f2.isDirectory());
System.out.printf(str,f3.getName(),f3.exists(),f3.isFile(),f3.isDirectory());
System.out.printf(str,f4.getName(),f4.exists(),f4.isFile(),f4.isDirectory());
}
}
//运行结果
//[ziliao]是否存在false,是否存在文件false,是否存在目录false
//[a.txt]是否存在false,是否存在文件false,是否存在目录false
//[aaa]是否存在false,是否存在文件false,是否存在目录false
//[a.jpg]是否存在false,是否存在文件false,是否存在目录false
(4)public boolean canRead() :判断是否可读。
(5) public boolean canWrite() :判断是否可写 。
(6) public boolean isHidden() :判断是否隐藏。
public class Demo04 {
public static void main(String[] args) {
// public boolean canRead() :判断是否可读
// public boolean canWrite() :判断是否可写
// public boolean isHidden() :判断是否隐藏
File f1=new File("E:\\YuanJiuYuan\\ziliao\\a.txt");
System.out.println("是否可读:"+f1.canRead());
System.out.println("是否可写:"+f1.canWrite());
System.out.println("是否隐藏:"+f1.isHidden());
}
}
//运行结果
//是否可读:false
//是否可写:false
//是否隐藏:false
3.3 删除文件
(1)public boolean delete(): 删除此抽象路径名表示的文件或者文件夹。
注意:delete方法只删除文件和空文件夹,是直接删除不走回收站。
public class Demo05 {
public static void main(String[] args) {
File f1=new File("E:\\YuanJiuYuan\\ziliao\\a.txt");
File f2=new File("E:\\YuanJiuYuan\\ziliao");
//删除文件时,要求文件必须存在才能进行删除
boolean b1=f1.delete();
System.out.println("f1是否删除成功:"+b1);
//只能删除存在的空目录
//如果目录里有东西,则删除失败
boolean b2=f2.delete();
System.out.println("f2是否删除成功:"+b2);
}
}
3.4 创建文件
(1)public boolean createNewFile() 创建文件。若文件存在,则不创建,返回false。
(2)public boolean mkdir() : 创建文件目录。如果此文件目录存在,就不创建了。 如果此文件目录的上层目录不存在,也不创建。
(3)public boolean mkdirs() : 创建文件目录。如果上层文件目录不存在,一并创建。
import java.io.File;
import java.io.IOException;
public class Demo06 {
public static void main(String[] args) throws IOException {
File f1=new File("E:\\YuanJiuYuan\\a.txt");
File f2=new File("E:\\YuanJiuYuan\\ziliao");
File f3 = new File("E:\\YuanJiuYuan\\aaa\\资料");
//1.创建文件createNewFile(),文件路径存在,文件不存在的时候为true
boolean b1 = f1.createNewFile();
System.out.println("创建f1对象是否成功:" + b1);
//2.创建文件夹,当文件夹不存在,且父路径存在的时候就可以创建
boolean b2 = f2.mkdir();
System.out.println("创建f2对象是否成功:" + b2);
//3.创建文件夹,如果父路径不存在,则一并创建
boolean b3 = f3.mkdirs();
System.out.println("创建f3对象是否成功:" + b3);
}
}
二、Files工具类
1.字符操作
(1)readAllLine(Path path) 按行读取指定路径中的内容。
(2)Path write(Path path, List<String> list) 写入字符到指定的路径。
2.字节操作
(1)byte[] readAllBytes(Path path) 读取文件中的所有字节。
(2)Path write(Path path, byte[] bytes) 写入字节到指定的路径。
public class Demo09 {
public static void main(String[] args) throws IOException {
Path p1=new File("E:\\YuanJiuYuan\\a.txt").toPath();
//byte[] readAllBytes(Path path) 读取文件中的所有字节。
byte[] bytes= Files.readAllBytes(p1);
System.out.println(Arrays.toString(bytes));
//readAllLine(Path path) 按行读取指定路径中的内容
//字符读的方式,只能读取纯文本类型
List<String> list=Files.readAllLines(p1);
System.out.println(list);
}
}
public class Demo10 {
public static void main(String[] args) throws IOException {
Path p1=new File("E:\\YuanJiuYuan\\a.txt").toPath();
// Path write(Path path, byte[] bytes) 写入字节到指定的路径
byte[] bytes="我本将心向明月".getBytes();
Files.write(p1,bytes);
ArrayList<String> list =new ArrayList<>();
for (int i = 0; i <30 ; i++) {
list.add(UUID.randomUUID().toString());
}
// Path write(Path path, List<String> list) 写入字符到指定的路径
Files.write(p1,list, StandardOpenOption.APPEND);
System.out.println("写出结束");
}
}
public class Demo11 {
public static void main(String[] args) throws IOException {
// byte[] bytes= Files.readAllBytes(Paths.get("C:\\Users\\mupen\\Pictures\\rose.jpg"));
// System.out.println("读取结束");
//
// Files.write(new File("E:\\YuanJiuYuan\\copy.jpg").toPath(),bytes);
// System.out.println("写出结束");
Files.copy(Paths.get("C:\\Users\\mupen\\Pictures\\rose.jpg"),
new File("E:\\YuanJiuYuan\\copy1.jpg").toPath(),
StandardCopyOption.REPLACE_EXISTING);
System.out.println("复制结束");
}
}