Java基础-文件操作
目录
一、File类
1.简述
2.创建File对象
3.文件操作
3.1获取文件信息
3.2 判断文件
3.3 删除文件
3.4 创建文件
二、Files工具类
1.字符操作
2.字节操作
一、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数组----返回时FileFile[] 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(),文件路径存在,文件不存在的时候为trueboolean 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("复制结束");}
}