目录
3.1 FileReader 和 FileWriter(char[] 处理文本文件)
3.1.1 FileReader中使用read(char[] cbuf)读入数据
3.1.3 使用FileReader和FileWriter实现文本文件的复制
3.2 FileInputStream 和FileOutputStream(byte[] 处理非文本文件)
01 File类的使用
- java .io.File 类: 文件 和文件目录路径 的抽象表示形式 ,与平台无关
- File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。
- 如果需要访问文件内容本身,则需要使用输入输出 流 。
- 想 要在 Java 程序中表示一个真实存在的文件或目录,那么必须有一个 File 对象 ,但是 Java 程序中的一个 File 对象,可能没有一个真实存在的文件或目录 。
- File 对象可以作为参数传递给流的构造器
1.1 创建File实例
1如何实例化File实例: 调用构造器 File(String filePath) File(String parentPath,String childPath) File(File parentFile,String childPath)
@Test
public void test1(){
// 构造器1 File(String filePath)
File file = new File("hello.txt"); //相对于当前modul
File file1 = new File("G:\\Java_study\\Java_Gaoji\\IOStream\\he.txt");// 决对路径
System.out.println(file);
System.out.println(file1); // 内存层面的对象
// 构造器2 File(String parentPath,String childPath)
File file2 = new File("\"G:\\\\Java_study","Java_Gaoji");
System.out.println(file2);
// 构造器3 File(File parentFile, String childPath)
File file3 = new File(file2,"hi.txt");
System.out.println(file3);
}
注意:路径分隔符
- windows:\\
- unix:/
Java程序支持跨平台运行,因此路径分隔符要慎用。
- 为了解决这个隐患,File类提供了一个常量:
public static final String separator。
根据操作系统,动态的提供分隔符。
File file1= new File("d:\\Work\\info.txt");
File file2= new File("d:"+ File.separator+ "Work"+ File.separator+ "info.txt");
File file3= new File("d:/Work");
1.2 File类的常用方法
1.2.1 File类的获取功能
- public String getAbsolutePath():获取绝对路径
- public String getPath() :获取路径
- public String getName() :获取名称
- public String getParent():获取上层文件目录路径。若无,返回null
- public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
- public long lastModified() :获取最后一次的修改时间,毫秒值
@Test
// File类的常用方法,获取功能
public void test2(){
File file = new File("hello.txt");
File file1 = new File("G:\\Java_study\\Java_Gaoji\\IOStream\\he.txt");
System.out.println(file.getAbsoluteFile());// G:\Java_study\Java_Gaoji\IOStream\hello.txt
System.out.println(file.getPath());//hello.txt
System.out.println(file.getName());//hello.txt
System.out.println(file.getParent());//null
System.out.println(file.length()); //未定义时: 0 、有文件时:输出文件长度
System.out.println(file.lastModified());//0 、 1646169028263
System.out.println();
System.out.println(file1.getAbsoluteFile());//G:\Java_study\Java_Gaoji\IOStream\he.txt
System.out.println(file1.getPath());// G:\Java_study\Java_Gaoji\IOStream\he.txt
System.out.println(file1.getName());//he.txt
System.out.println(file1.getParent());//G:\Java_study\Java_Gaoji\IOStream
System.out.println(file1.length()); //0
System.out.println(file1.lastModified());//0
}
如下的两个方法适用于文件目录:
public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组
public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组
@Test
// File类的常用方法
public void test3(){
File file = new File("G:\\Java_study"); // 要求文件存在!!!
String[] list = file.list(); //获取指定目录下的所有文件或文件目录的名称数组
for(String s : list){
System.out.println(s);
}
File[] list2 = file.listFiles();
for(File f : list2){
System.out.println(f);
}
}
1.2.2 重命名功能
public boolean renameTo(File dest):把文件重命名为指定的文件路径
比如:file1.renameTo(file2)为例:
要想保证返回true,需要file1在硬盘中是存在的,且file2不能在硬盘中存在。
public void test4(){
File file = new File("hello.txt");
File file2 = new File("G:\\Java_study\\Java_Gaoji\\IOStream\\he.txt");
boolean rename = file.renameTo(file2); //想要返回true,要保证file必须存在,且file2不存在
System.out.println(rename); //返回的是布尔型变量
}
1.2.3 File类的判断功能
- public boolean isDirectory():判断是否是文件目录
- public boolean isFile() :判断是否是文件
- public boolean exists() :判断是否存在
- public boolean canRead() :判断是否可读
- public boolean canWrite() :判断是否可写
- public boolean isHidden() :判断是否隐藏
@Test
public void test5(){
File file = new File("he.txt"); //一个文件,相对路径,四那个对于当前Module
System.out.println(file.isFile()); //判断是不是文件 true
System.out.println(file.isDirectory());//判断是不是文件夹 false
System.out.println(file.exists());//判断是不是存在 true
System.out.println(file.canRead());//判断是不是可读 true
System.out.println(file.canWrite());//判断是不是可写 true
System.out.println(file.isHidden());//判断是不是隐藏 false
}
1.2.4 File类文件删除和创建功能
创建硬盘中对应的文件
public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
删除磁盘中的文件或文件目录
public boolean delete():删除文件或者文件夹
* 删除注意事项:Java中的删除不走回收站。要想删除成功,该文件目录下不能有子文件或文件目录
// File类的文件创建和删除功能
@Test
public void test6() throws IOException {
File file = new File("hi.txt"); //目前不存在
if (!file.exists()){
file.createNewFile();
System.out.println("创建成功");
}else { //文件存在
file.delete();
System.out.println("删除成功");
}
}
创建硬盘中的文件夹
public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。如果此文件目录的上层目录不存在,也不创建。
public boolean mkdirs() :创建文件目录。如果此文件目录存在,就不创建了。如果上层文件目录不存在,一并创建
@Test
// 文件夹的创建
// file.mkdir(): 当file文件上层目录不存在时,就不创建
//file.mkdirs(): 当file文件上层目录不存在时,会连同上层目录一并创建
public void test7(){
File file = new File("G:\\Java_study\\Java_Gaoji\\IOStream\\IO1"); // IO1上层存在
boolean mkdir = file.mkdir();
if(mkdir == true){
System.out.println("创建成功");
}
File file2 = new File("G:\\Java_study\\Java_Gaoji\\IOStream\\IO2");
boolean mkdir2 = file2.mkdirs();
if(mkdir2){
System.out.println("创建成功2");
}
//要想删除成功,io4文件目录下不能有子目录或文件
File file3 = new File("D:\\io\\io1\\io4");
file3 = new File("D:\\io\\io1");
System.out.println(file3.delete());
}
}
1.3 课后练习
public class FileTest {
@Test
public void test() throws IOException {
File file = new File("D:\\io\\io1\\hello.txt");
//创建一个与file同目录下的另外一个文件,文件名为:hi.txt
File destFile = new File(file.getParent(),"i.txt");
boolean newFile = destFile.createNewFile();
if(newFile){
System.out.println("创建成功!");
}
}
}
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
//判断 指定目录下是否有后缀名为 .jpg 的文件,如果有,就输出该文件 名称
public class FileCondtructor {
public static void main(String[] args) throws IOException {
File file = new File("G:\\Java_study\\Java_Gaoji\\IOStream");//确定指定文件目录
//方式一
String[] list = file.list();
for (String s: list){
if(s.endsWith(".jpg")){
System.out.println(s);
}
}
// 方法二
File[] files = file.listFiles();
for(File f:files){
if(f.getName().endsWith(".jpg")){
System.out.println(f.getAbsolutePath());
}
}
// 方法三
/**
* File类提供了两个文件过滤器方法
* public String[] list(FilenameFilter filter)
* public File[] listFiles(FileFilter filter)
*/
File[] subFiles = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".jpg");
}
});
for(File f : subFiles){
System.out.println(f.getAbsolutePath());
}
}
}
public class fILE {
public static void main(String[] args) {
File file = new File("G:\\Java_study\\Java_Gaoji\\IOStream");
printSubFile(file);
System.out.println(getFileLength(file));
}
public static void printSubFi