文章目录
File概述
位于java.io包下,表示文件或目录的抽象路径形式。
File构造方法
1. File(String pathname) 给定路径名字
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
注意:\
是转义字符,用 \\
路径分割符:windows \\
; linux /
路径`
File file = new File("E:\\File");
file的绝对路径就是:E:\File
2. File(File parent, String child) 给定父目录(File对象)跟子路径
根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
File file = new File("E:\\File");
File file2 = new File(file,"a\\b.txt");
file2的绝对路径是:E:\File\a\b.txt
3. File(String parent, String child) 给定父目录跟子对象
根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
这个构造方法跟上一样,都是给定父目录跟子路径,不过上一个传的父目录是根据父File对象传的参。
File file3 = new File("E:\\File","a\\b.txt");
file3的绝对路径是:E:\File\a\b.txt
绝对路径和相对路径
绝对路径:绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从盘符开始的路径。Location
如:E:\\abc\a.txt
。 一般是从盘符开始的,绝对位置的路径
相对路径:由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系 (从某个路径开始的路径,相对于某个路径的路径。)Path
如:\a.txt
注意:javase中相对路径,是当前项目的路径
相对路径如果加“//”,代表项目的根盘符
相对路径案例:
public static void main(String[] args) {
//相对路径,是当前项目的路径
File file = new File("File");
System.out.println(file.getAbsolutePath());
//注意,如果加“//”,代表当前根盘符
File file2 = new File("\\File");
System.out.println(file2.getAbsolutePath());
}
运行结果:
E:\Java_Base_Project\eclipse_project\myproject\File
E:\File
这个时候就能想起来css的position属性了。回忆一下,position:absolute绝对位置,是在页面上的绝对位置,向下滚动滚动条,他也会跟着动,相当于固定在页面上。而绝对位置(position:relative)是相对于浏览器,不管页面怎么动他都在哪个位置。悬浮一样。
File类常用方法
方法名 | 描述 |
---|---|
isDirectory(); | 判断是不是一个目录,不存在返回false |
isFile(); | 判断是不是一个文件,不存在返回false |
exists(); | 判断文件或目录是否存在,boolean |
– | |
mkdir(); | 创建目录,但是没有父目录的话不能创建并返回false。创建的目录如果存在返回false |
mkdirs(); | 创建目录,没有父目录的话,可以创建父目录;创建的目录如果存在返回false |
– | – |
createNewFile(); | 创建一个新的空的文件,如果已存在返回false |
static File createTempFile(String prefix, String suffix); | 在默认目录创建一个空的临时文件 ,后缀默认是.temp Win7默认路径:C:\Users\Administrator\AppData\Local\Temp |
static File createTempFile(String prefix, String suffix, File directory) | 在指定目录创建临时文件,后缀默认是.temp ; |
– | – |
delete(); | 删除此抽象路径名表示的文件或目录,只能删除空目录,或者文件 |
– | – |
getAbsolutePath(); | 获取文件或目录的绝对路径 ,String |
getPath(); | 获取文件或目录名,String |
getParent(); | 获取父目录,String |
getParentFile(); | 获取父目录,返回文件,File |
lastModified() | 返回最后一次被修改时间,long |
length(); | 返回的是文件的长度,注意只表示文件的字节长度,文件夹的长度不定,long |
renameTo(File dest); | 重命名。 当同一个目录下时,为重命名,如果不在同一个目录下,是剪切操作。 boolean |
getName() | 返回文件名,带后缀。 |
练习代码
public static void main(String[] args) throws IOException {
File file = new File("E:\\File\\1.txt");
//判断方法。
boolean flag1 = file.isDirectory();//判断是不是一个存在路径
boolean flag2 = file.isFile();//判断是不是一个标准文件
boolean existsFlag = file.exists();//判断文件或目录是否存在
System.out.println("判断是不是一个存在路径:"+flag1);
System.out.println("判断是不是一个标准文件:"+flag2);
System.out.println("判断文件或目录是否存在:"+existsFlag);
//创建目录方法
boolean flag3 = file.mkdir();//创建不存在的目录,但是没有父目录的话不能创建。创建存在目录即同名目录返回false
System.out.println("mkdir,创建目录"+flag3);
boolean flag4 = file.mkdirs();//创建不存在的目录,没有父目录的话,可以创建父目录;创建存在目录即同名目录返回false
System.out.println("mkdirs(),创建目录,包括父目录:"+flag4);
//创建文件方法
boolean flag5 = file.createNewFile();//当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
System.out.println("创建一个新的空文件:"+flag5);
File fileCreate1 = file.createTempFile("zhang", ".txt"); //在默认目录创建临时文件:windows默认路径C:\Users\Administrator\AppData\Local\Temp
System.out.println("在默认目录创建临时文件,绝对路径:"+fileCreate1.getAbsolutePath());
File fileCreate2 = file.createTempFile("youyou", ".png", file); //在指定目录创建临时文件
System.out.println("在指定目录创建临时文件:"+fileCreate2);
System.out.println("Path路径:"+fileCreate2.getPath());
System.out.println("getName(),文件名:"+fileCreate2.getName());
System.out.println("getParent(),父目录:"+fileCreate2.getParent());
System.out.println("getParentFile(),父文件:"+fileCreate2.getParentFile());
//删除方法
File file2 = new File("E://File");
boolean deleteFlag = file2.delete();//删除此抽象路径名表示的文件或目录,只能删除空目录,或者文件
System.out.println("删除非空文件目录:"+deleteFlag);
boolean deleteFlag2 = file.delete();
System.out.println("删除文件或目录:"+deleteFlag2);
File file3 = new File("E:\\abcde");
System.out.println(file3.isDirectory());
System.out.println(file3.isFile());
System.out.println(file3.isHidden());
System.out.println(file3.isAbsolute());
}
public static void main(String[] args) throws IOException {
File file = new File("\\File","1");
System.out.println(file.getCanonicalPath());//返回此抽象路径名的规范路径名字符串。
System.out.println(file.mkdir());
File file1 = new File("\\File", "1\\1.txt");
System.out.println(file1.getAbsolutePath());
file1.createNewFile();
System.out.println(file1.equals(file));
** System.out.println(file1.lastModified());
System.out.println(new SimpleDateFormat("yyyy-MM-dd hh-mm-ss")
.format(new Date(file1.lastModified())));
** System.out.println("文件长度:"+file1.length());//如果文件不为空,返回字节长度。为空返回0
** System.out.println("目录长度:"+file.length());//目录返回值不确定
}
File遍历方法
1.listFiles()
/list()
返回的是目录中的文件夹和文件。(不包括子目录中文件夹和文件)
2.listFiles(FileFilter filter)
带有过滤器的文件遍历。
FileFilter过滤器: 筛选 ,符合要求的通过,不符合要求的不让通过。
练习:
public class FileMethodStudy1 {
public static void main(String[] args) {
File file = new File("\\File");
**//1. list() //只能获取到直接子目录和子文件。子目录里的获取不到**
String[] stringList = file.list();
for (String sName : stringList) {
System.out.println(sName);
}
System.out.println("-----------------------");
**//2. listFile()**
File[] filesList = file.listFiles();
for (File file2 : filesList) {
System.out.println(file2);
}
System.out.println("-----------------------");
**//3 listFile(FileFilter f) //获取文件目录**
File[] filesFilterList = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
//可以用 isDirctory() 判断是不是目录
//返回不是txt结尾的文件
return !pathname.getName().endsWith(".txt");
}
});
for (File file2 : filesFilterList) {
System.out.println(file2);
}
System.out.println("-----------------------");
**//4. listFile(FileFilter f) //获取文件**
File[] filesFilterList1 = file.listFiles(new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getName().endsWith(".txt");
}
});
if (filesFilterList1 != null) {
for (File file2 : filesFilterList1) {
System.out.println(file2);
}
}
System.out.println("-----------------------");
**//5 输出所有目录跟文件**
getFileList(file);//递归 输出所有目录跟文件
System.out.println("-----------------------");
}
//递归思想,输出目录中所有文件,包括子目录中的
public static void getFileList(File file) {
//获取所有
File[] filesFilterList = file.listFiles();
if (filesFilterList != null) {
for (File file2 : filesFilterList) {
if(file2.isDirectory()) {
System.out.println("目录:"+file2.getAbsolutePath());
getFileList(file2);
}else {
System.out.println("文件:"+file2.getAbsolutePath());
}
}
}
}
}
递归
递归就是,自己调用自己。递归使用必须有出口,否则会报StackOverflowError 栈溢出异常
(1)两种形式:
①直接递归
如:方法A,自身调自身
②间接递归
如:方法A,调用了方法B,方法B中调用了方法C,方法C中调用了方法A.
学习案例1:
/**
* 作者: 帅的一批
* 时间:2019年12月11日下午4:23:22
* 学习:递归
* 内容:
* 1.如果是正数就从1乘到这个数,如果是负数,就从-1乘到这个数
* 2.求任意数到0的和
*/
public class RecursionStudy {
public static void main(String[] args) {
System.out.println(jieCheng(-6));
System.out.println(getSumToZero(-10));
}
//名字是阶乘,但是阶乘没有负数,学习用
public static int jieCheng(int n) {
if(n == 0) {
return 1;
}else if (n == 1) {
return 1;
}else if (n == -1) {
return -1;
}else if (n > 0) {
return n*jieCheng(n-1);
}else {
return n*jieCheng(n+1);
}
}
//
public static int getSumToZero(int n) {
if(n == 0) {
return 0;
}else if (n > 0) {
return n+getSumToZero(n-1);
}else {
return n+getSumToZero(n+1);
}
}
}
学习案例2: 斐波那契数列
/**
* 作者: 帅的一批
* 时间:2019年12月11日下午4:57:19
* 学习:递归
* 内容:斐波那契数列
* 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少
* n=3 n=(n-1)+(n-2)
* 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584 ,4181,6765,10946,17711,28657,46368
*/
public class RecursionStudy1 {
public static void main(String[] args) {
System.out.println(fun(24));
}
public static int fun(int n) {
if(n > 0 && n < 3) {
return 1;
}else {
return fun(n-1)+fun(n-2);
}
}
}