文章目录
File
概述
File类:File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。
概念:对文件和文件夹(目录)的统称
作用:操作文件和文件夹(操作指:创建、删除、获取)
File类的静态字段
import java.io.File;
/*
*File类的静态字段
* static String pathSeparator:代表当前操作系统的路径分隔符,
* pathSeparator是以字符串的形式表示
例如:当前widows系统路径分隔符";"
static char pathSeparatorChar:代表当前操作系统的路径分隔符,
* pathSeparatorChar是以字符的形式表示
例如:当前widows系统路径分隔符';'
static String separator:代表当前操作系统的名称分隔符
* separator是以字符串的形式表示
例如:当前widows名称分隔符"\\"
static char separatorChar:代表当前操作系统的名称分隔符
* separator是以字符的形式表示
例如:当前widows名称分隔符'\\'
*/
public class Demo01 {
public static void main(String[] args) {
//如path环境变量 c:/jdk;c:windows
System.out.println(File.pathSeparator);//";"代表当前操作系统中的路径分隔符
System.out.println(File.pathSeparatorChar);//';'//字符类型;不同的操作系统执行这段代码,打印出来的而结果不同
//因为不同操作系统的路径分隔符不同,说明java跨平台
//"c:\1.txt"+File.pathSeparator+"d:\a.doc"
//磁盘路径分隔符
System.out.println(File.separator);// "\" 代表路径中的名称分隔符
//widnows在路径中以\(反斜杠)来分隔名称
//d:\abc\1.txt
System.out.println(File.separatorChar);//'\'
System.out.println("\\"); //两个\\代表一个普通的\字符
}
}
相对路径与绝对路径
-
绝对路径:文件或文件夹的路径中以盘符开头就是绝对路径(唯一路径)
一旦项目位置发生变化,代码可能会引起异常:找不到文件的异常
例如:D:\1.txt ;E:\abc\2.txt -
相对路径:其中一个文件与另外一个文件相对关系,一定会有一个参照物
不会因为项目的位置发生变化,而引起代码中路径书写的变化
例如:
2.txt的相对路径
参照物绝对路径:F:\JavaBaseCourse\JavaSEProject\day
2.txt的绝对路径:F:\JavaBaseCourse\JavaSEProject\day\src\2.txt
2.txt的相对路径:src\2.txt
File类的构造函数
- URI和URL
URL:http://www.baidu.com
统一资源定位符 万维网上的一个唯一访问地址
URI:包括url,和本地的一个磁盘路径D:\aa\2.txt
import java.io.File;
/*File类中的构造方法
File(String pathname):传入一个路径字符串来构造一个File对象
File(String parent, String child):传入一个parent(一般穿路径不包含文件名)和一个child(文件或文件夹名字),
最终底层还是把parent和child做一个拼接,成为一个完整的路径
File(File parent, String child):传入一个parent的File对象(一般穿路径不包含文件名)和一个child(文件或文件夹名字),
最终底层还是把parent和child做一个拼接,成为一个完整的路径
*/
public class Demo02 {
public static void main(String[] args) {
method();
//method02();
//method03();
}
private static void method03() {
// File(File parent, String child)
File parent=new File("E:\\");
String child="abc\\后来.txt";
File f=new File(parent,child);//第一个参数为File类型,因为我们有可能对parent这个路径
//想调用File类的方法
System.out.println(f);//E:\abc\后来.txt
}
private static void method02() {
//File(String parent, String child)
File f=new File("d:\\","2.txt");//第一个参数我们一般传入一个路径但是不包含文件或文件夹
//第二个参数我们一般写文件或文件夹的名称
//底层还是把parent和child拼接一块作为一个完整路径
System.out.println(f);//d:\\2.txt
}
private static void method() {
//File(String pathname)
File f=new File("F:\\1.txt");//传入的是
//1.txt文件的绝对路径
//File对象就代指硬盘1.txt文件
System.out.println(f);//打印的就是File构造函数中封装的路径
File f2=new File("M:\\2.txt");//new File的时候不会去检测这个路径在硬盘是否真正存在
System.out.println(f2.getAbsolutePath());//绝对路径
}
}
import java.io.File;
import java.util.ArrayList;
import java.util.List;
//判断文件类型,如是不是图片
public class Demo03 {
public static void main(String[] args) {
File file = new File("src\\com\\Demo.java");
String fileName = file.getName();
System.out.println("文件名:"+fileName);//Demo.java
//获取后缀名
String lastName = fileName.substring(fileName.lastIndexOf('.') + 1);//java
System.out.println(lastName);
//list集合存储图片格式
List<String> list = new ArrayList<>();
list.add("jpg");
list.add("jpeg");
list.add("gif");
System.out.println("是不是图片文件:"+list.contains(lastName.toLowerCase()));//false
}
}
File类的创建功能
创建文件功能
import java.io.File;
import java.io.IOException;
/*
*File类的创建功能:利用File类的方法创建文件或文件夹
* 创建文件:
* boolean createNewFile():
* 利用File对象中封装的文件路径,把这个文件创建出来
* 如果当前文件创建成功,返回true
* 如果当前文件已存在,不再创建,返回false
* 如果传入一个计算机不存在路径(不存在盘符),直接抛异常 java.io.IOException: 系统找不到指定的路径
* 只能创建文件
*/
public class Demo {
public static void main(String[] args)throws IOException {
//boolean createNewFile()
//1.创建一个File对象
File f=new File("d:\\1.txt");//File对象中封装的是1.txt路径
//2.调用createNewFile()创建出1.txt
boolean b=f.createNewFile();//创建了一个无内容的1.txt文件
//打印返回值
System.out.println(b);//true
/* File f2=new File("M:\\2.txt");
boolean b2=f2.createNewFile();
System.out.println(b2);*/
File f3=new File("f:\\新建文件夹");
boolean b3=f3.createNewFile();//不能创建文件夹创建出来的是一个名字叫做 新建文件夹文件
System.out.println(b3);
}
}
创建文件夹功能
/*
*File类创建目录(文件夹)功能
* boolean mkdir():mkdir是 make directory
* 根据File对象中的路径创建目录
* 如果创建成功返回true,
* 创建失败返回false
* 注意:mkdir()只能创建单级文件夹
* boolean mkdirs():可以创建单级或多级文件夹,其它的特点跟mkdir一样
* 如果创建成功返回true,创建失败返回false
*/
File类的删除功能
/*
*File的删除功能:
* boolean delete():
* 删除文件或文件夹,如果删除成功返回true,如果删除失败返回false;
* 注意:
* 1.delete()删除的文件不走回车 shift+delete
* 2.delete()如果删除文件夹,要求这个文件夹必须为空才能删掉
*
*/
File类的判断功能
/*File类的判断功能:
* boolean exists():测试指定的文件或文件夹在硬盘上是否真的存在,如果存在返回true
* 否则就返回false
* boolean isDirectory():判断指定的路径是否是一个目录,如果是返回true,否则返回false
boolean isFile():判断指定的路径是否是文件,如果是返回true,否则返回false
*/
File类的获取功能
创建完了File对象之后,那么File类中都有如下常用方法,可以获取文件相关信息
/*
*File类的获取功能:不管路径在硬盘是否真的存在
String getPath():创建File对象的时候,传入了什么路径,getPath最终就返回什么路径
*
String getAbsolutePath():无论传入什么路径,返回的都是绝对路径
File getAbsoluteFile():跟上面的功能相同,只不过将返回的绝对路径封装成了一个File对象
如果返回的路径还想要使用File类的方法,我们就选用 File getAbsoluteFile()功能
String getParent():获取的是父级路径(除了最后一级路径之前的路径)
File getParentFile():获取的是父级路径(除了最后一级路径之前的路径),但是返回的是一个File对象,还可以使用File类中的方法
* String getName():获取最后一级路径的名称
* long length():返回文件的字节大小
*/
方法示例
import java.io.File;
import java.io.IOException;
//创建:G:\\com\\coydone\\1.txt
public class Demo04 {
public static void main(String[] args) throws IOException {
File file = new File("G:\\com\\coydone");
//判断要创建文件或目录是否存在
if (!file.exists()){
boolean flag = file.mkdirs();
System.out.println(flag);
}
//在G:\\com\\coydone下创建1.txt
File txt1 = new File(file,"1.txt");
if (!txt1.exists()){
boolean flag = txt1.createNewFile();
System.out.println(flag);
}
}
}
list()方法与listFiles()方法
获取一个目录中的所有文件或者目录中的文件夹,一个目录中可能有多个文件或者文件夹,那么如果File中有功能获取到一个目录中的所有文件和文件夹,那么功能得到的结果要么是数组,要么是集合。
/*
*File类两个获取功能:
* String[] list():只获取当前文件夹下所有的文件或文件夹(不包含子文件夹下的内容)
* 如果传入的是一个文件路径,直接返回null
* 无论使用相对路径还是绝对路径,最终返回的字符串数组中存储的都是文件或文件夹名称
*
File[] listFiles():只获取当前文件夹下所有的文件或文件夹(不包含子文件夹下的内容)
* 如果传入的是绝对路径,那么获取的该文件夹下的文件或目录也是绝对路径
* 如果传入的是相对路径,那么获取的该文件夹下的文件或目录也是相对路径
* 如果传入的是一个文件路径,直接返回null
*/
递归
递归概述
/*
*递归:
* 方法自身调用自身
* 递归容易出现的问题:Exception in thread "main" java.lang.StackOverflowError:栈内存溢出
*
* 递归一般都有出口
* 递归效率不高,因为入栈和弹栈消耗内存资源
*/
public class Demo {
public static void main(String[] args) {
method();
}
public static void method(){
method();
}
}
递归求阶乘
/*分别利用循环和递归求某一个数的阶乘
* 0!=1
* 1!=1
* 2!=2*1=2
* 3!=3*2*1=6 1*2*3
*
* 1!=1
* 2!=2 * 1!
* 3!=3 * 2!
*/
public class Demo {
public static int getJieCheng1(int n){
int sum=1;//累计求积的结果
for(int i=1;i<=n;i++){
sum=sum*i;//当n为3的时候:第一次循环sum=1*1
//第二次循环:sum= 1 * 2=2
//第三次循环:sum= 2 * 3=6
}
return sum;
}
public static int getJieCheng2(int n){
if (n==0||n==1){
return 1;
}
return n*getJieCheng2(n-1);
}
public static void main(String[] args) {
System.out.println(getJieCheng1(4));
System.out.println(getJieCheng2(4));
}
}
递归显示文件目录中的所有文件名
import java.io.File;
public class Demo{
public static void main(String[] args) {
File otherFile = new File("G:\\Program Files (x86)");
showFileName(otherFile);
}
public static void showFileName(File otherFile){
File[] files = otherFile.listFiles();
for (File file : files) {
//文件输出文件名
if (file.isFile()){
System.out.println(file.getName());//文件夹
}
//如果是文件夹,遍历下面的文件
if (file.isDirectory()){
showFileName(file);
}
}
}
}
递归显示文件目录中文件的所有路径
import java.io.File;
public class Demo {
public static void main(String[] args) {
printFilePath(new File("G:\\Program Files (x86)"));
}
//形参定义成file是为了利用File类中的方法
public static void printFilePath(File dir){
//1.获取传递过来的目录下的所有的文件或文件夹(不包含子目录下的文件或文件夹)
File[] fileOrDirs = dir.listFiles();
//2.遍历这个数组
for (File f : fileOrDirs) {
//3.判断当前的file对象是文件还是文件夹
if(f.isFile()){//判断是文件我们就直接打印它的路径
System.out.println(f);
}else{//说明是文件夹
//继续获取该文件夹下的内容,仍然是调用listFiles方法,循环遍历
//跟我们上面的代码重复,或者说跟printFilePath功能相同,
//所以重复调用自身
printFilePath(f);
}
}
}
}