java基础 ---- 文件类
文件的理解概述:
- java把电脑中的文件和文件夹(目录)封装为了到java.io.File类中,可以使用File类的方法进行创建,删除,判断存在与否,获取文件,获取文件大小,遍历一个文件/文件夹。
- File类是一个与系统无关的类,任何的操作系统都可以使用这个类中的方法
- 绝对路径:是一个以盘符(c:,D:)开始的完整路径,如 C:\\Users\itcast\\IdeaProjects\\shungyuan\\123.txt;相对路径:是一个可以省略项目的根目录的简化路径,如 123.txt。
文件的使用概述:
- 考虑到代码对不同操作系统的兼容性,路径不能写死:
C:\develop\a\a.txt windows
C:/develop/a/a.txt linux
推荐: "C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt" - 路径是不区分大小写。
- 构造方法新建的File对象不一定存在,若不存在需要调用createNewFile(),mkdir(),mkdirs()方法创建一个对应的文件或文件夹。
- delete方法是直接在硬盘删除文件/文件夹,不走回收站,删除要谨慎。
文件的测试代码:
package com.baishi.stage1.day10;
import java.io.File;
import java.io.IOException;
public class MyTest {
public static void main(String[] args) throws IOException {
show1();
show2();
show3();
show4();
show5();
show6();
}
/**
* show1():
* 打印文件类的路径分隔符,名称分隔符
*/
public static void show1() {
String pathSeparator = File.pathSeparator;
//Char pathSeparatorChar = File.pathSeparatorChar;
//
System.out.println(pathSeparator);//路径分隔符 windows:分号; linux:冒号:
String separator = File.separator;
//Char separatorChar = File.separatorChar;
//
System.out.println(separator);// 文件名称分隔符 windows:反斜杠\ linux:正斜杠/
}
/**
* show2():File类构造方法创建File实例
* 测试public File( String pathname):将给定的路径名字符串转换为抽象路径名来创建新的Fe实例
*/
public static void show2() {
//
//为了和"\"作转义字符区分开来,编程时用"\\"
File file = new File("C:\\hello.java");
//File file = new File("C:\\User\\Test"); 路径也可以以文件夹结尾
//File file = new File("hello.java"); 路径也可以以相对路径结尾
//File file = new File("E:\\hello.java"); E:\hello.java 路径也可以不存在,创建File对象,只是把字符串路径封装为File对象,不考虑路径的真假情况
System.out.println(file); //"C:\hello.java" 说明重写了Object类的toString方法
/*public File( File parent, String child):从父抽象路径名和子路径名字符串创建新的File实例
//父路径和子路径,可以单独书写,使用灵活;父路径和子路径都可以变化
* File file = new File("c:\\","hello.java");
* System.out.println(file); //c:\hello.java
*/
/*public File( String parent, String child):从父路径名字符串和子路径名字符串创建新的Fie实例
//父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象
File parent = new File("c:\\");
File file = new File(parent,"hello.java");
System.out.println(file);// c:\hello.java
*/
}
/**
* show3():File类获取功能的方法
* 1.测试public long length()方法获取文件长度
* 2.测试public String getName()方法返回File表示的文件或目录的名称
* 3.测试public String getPath()方法获取路径名字字符串
* 4.测试public String getAbsolutePath()方法返回此File的绝对路径名字符串
*/
public static void show3() {
//1.
File f1 = new File("C:\\develop\\a\\1.jpg");
long l1 = f1.length();
System.out.println(l1);//780831字节
//
//如果构造方法中给出的路径不存在,那么length方法返回0
File f2 = new File("C:\\User\\2.jpg");
System.out.println(f2.length());//0
//
//文件夹是没有大小概念的,不能获取文件夹的大小
File f3 = new File("C:\\User\\a");
System.out.println(f3.length());//0 文件夹没有大小概念的
//2.
//getName()获取路径的结尾部分,可以是文件
File f4 = new File("C:\\Users\\a.txt");
String name4 = f4.getName();
System.out.println(name4);//a.txt
//
//getName()获取路径的结尾部分,也可以是目录
File f5 = new File("C:\\Users\\a");
String name5 = f5.getName();
System.out.println(name5);//a
//3.
/*
toString方法调用的就是getPath方法
源码:
public String toString() {
return getPath();
}
*/
File f6 = new File("C:\\Users\\a.txt");
String path6 = f6.getPath();
System.out.println(path6);
//System.out.println(f6.toString());
//4.
// 无论路径是绝对的还是相对的,getAbsolutePath方法返回的都是绝对路径
File f7 = new File("a.txt");
String absolutePath7 = f7.getAbsolutePath();
System.out.println(absolutePath7);// C:\Users\a.txt
}
/**
* show4():File类判断功能的方法
* 测试调用 public boolean isDirectory()方法判断构造方法中给定的路径是否以文件夹结尾
* 测试调用 public boolean isFile() 方法判断构造方法中给定的路径是否以文件结尾。
* 测试调用 public boolean exists()方法判断File表示的文件或文件夹是否实际存在。
*/
public static void show4() {
File f1 = new File("C:\\Users\\a.txt");
//
//不存在,两种判断总是返回为false
if(f1.exists()){//exists()方法可以判断绝路径,相对路径
System.out.println(f1.isDirectory());//false
System.out.println(f1.isFile());//true
}
//
File f2 = new File("C:\\Users\\a");
if(f2.exists()){
System.out.println(f2.isDirectory());//true
System.out.println(f2.isFile());//false
}
}
/**show5():File类创建,删除功能的方法
* 1.测试调用 public boolean createNewFile()方法当且仅当具有该名称的文件尚不存在时,创建一个新的空文件
* 2.测试调用 public boolean mkdir() 创建由此File表示的目录。
* 测试调用 public boolean mkdirs() 创建由此File表示的目录,包括任何必需但不存在的父目录
* 3.测试调用 public boolean delete() 删除由此File表示的文件或目录
*/
public static void show5() throws IOException {
//1.
//只能创建不存在的文件,已存在的不会创建
File f1 = new File("08_FileAndRecursion\\2.txt");
System.out.println(f1.createNewFile());
//
//不论文件字符形式如何,都会创建文件,不会创建文件夹
File f2 = new File("08_FileAndRecursion\\新建文件夹");
System.out.println(f2.createNewFile());
//
//路径不存在,会抛出IOException
File f3 = new File("08_FileAndRecursi\\3.txt");
System.out.println(f3.createNewFile()); //IOException
//2.
//文件夹不存在,创建单级文件夹,返回true;文件夹存在,不会创建,返回false;
File f4 = new File("08_FileAndRecursion\\aaa");
boolean b4 = f4.mkdir();
System.out.println("b4:" + b4);
//
//构造方法中给出的路径不存在返回false,不会抛出异常,路径不存在,不会创建
File f5 = new File("08_FileAndRecursion\\aaa");
boolean b5 = f5.mkdir();
System.out.println("b5:" + b5);
//
//mkdirs()既可以创建单级空文件夹,也可以创建多级文件夹
File f6 = new File("08_FileAndRecursion\\111\\222\\333\\444");
//File f6 = new File("08_FileAndRecursion\\111);
//
boolean b6 = f6.mkdirs();
System.out.println("b6:" + b6);
//
//不论文件字符形式如何,都会创建文件夹,不会创建文件
File f7 = new File("08_FileAndRecursion\\abc.txt");
boolean b7 = f7.mkdirs();
System.out.println("b7:" + b7);
//
//构造方法中给出的路径不存在返回false,不会抛出异常,路径不存在,不会创建
File f8 = new File("08_F\\ccc");
boolean b8 = f8.mkdirs();//不会抛出异常,路径不存在,不会创建
System.out.println("b8:"+b8);
//3.
File f9 = new File("C:\\User\\新建文件夹");
boolean b9 = f9.delete();//文件/文件夹删除成功,返回true; 文件夹中有内容,不会删除返回false;构造方法中路径不存在false
System.out.println("b9:" + b9);
}
/**show6():File类比遍历功能的方法
*1.测试调用public String[] list()方法,返回一个String数组,表示该File目录中的所有子文件或目录的名称
*2.测试调用public File[] listFiles()方法,返回一个File数组,表示该File目录中的所有的子文件或目录对象
*/
public static void show6() {
File file = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\08_FileAndRecursion");
//File file = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\08_FileAndRecursion\\1.txt");NullPointerException如果构造方法中给出的路径不是一个目录,也会抛出空指针异常
//File file = new File("C:\\Users\\itcast\\IdeaProjects\\shungyuan\\08_Fi");NullPointerException如果构造方法中给出的目录的路径不存在,会抛出空指针异常
String[] arr = file.list();
for (String fileName : arr) {
System.out.println(fileName);
}
File[] files = file.listFiles();
//获取当前目录下的文件以及文件夹对象,只要拿到了文件对象,那么就可以获取更多信息
//
for (File f : files) {
System.out.println(f);
}
}
}