1.File类
File.Seperator方法
package Part2.Day_23;
import java.io.File;
/*
java.io.File类
文件和目录路径名的抽象表示形式
java把电脑中的文件和文件夹封装为了一个File类
我们可以使用File类的方法
创建文件夹/文件
删除文件夹/文件
获取文件/文件夹
判断文件/文件夹是否存在
对文件夹进行遍历
获取文件的大小
File类是一个与系统无关的类,任何的操作系统都可以使用类中的方法
重点:记住3个单词
file:文件
directory:文件夹/目录
path:路径
*/
public class demo01File {
public static void main(String[] args) {
/*
操作路径,路径不能写死了
C:\develop\a\a.txt
C:/develop/a/a.txt
"C:"+File.separator+"develop"+File.separator+"a"+File.separator+"a.txt"
*/
String pathSeparator = File.pathSeparator;
System.out.println(pathSeparator);
String separator = File.separator;
System.out.println(separator);
/*
//文件名称分隔符 windows:反斜杠\ Linux:正斜杠/
//文件路径分隔符 window:分号; Linux:冒号:
*/
}
}
File类的3个构造方法
package Part2.Day_23;
import java.io.File;
/*
路径:
绝对路径:是一个完整的路径
以盘符(C:,D:)开始的路径
c::\\a.txt
C:\\Users\eqinxus\\Downloads\\mingw64\\123.txt
相对路径:是一个简化的路径
相对指的是相对于当前项目的根目录
如果使用当前项目的根目录,路径可以简化书写
123.txt
注意:
1.路径是不区分大小写
2.路径中的文件名称分隔符windows使用反斜杠,反斜杠是转义字符,两个反斜杠代表一个普通的反斜杠
*/
public class demo02file {
public static void main(String[] args) {
/*
File类的构造方法
*/
show01();
show02("c:\\","a.txt");
show03();
}
private static void show03(){
/*
好处:
父路径和子路径单独书写
父路径是File类型,可以使用File的方法对路径进行一些操作,再使用路径创建对象
*/
File parent = new File("c:\\");
File file = new File(parent, "hello.java");
}
/*
File(String pathname)通过将给定路径名字字符串转换为抽象路径来创建一个新File实例
参数:
String pathname字符串的路径名称
路径可以以文件结尾,也可以以文件夹结尾
路径可以是绝对路径也可以是相对路径
路径可存在可不存在
创建File对象,只是把字符串路径封装为File对象,不考虑真假
*/
private static void show01(){
File f1 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\a.txt");
System.out.println(f1);//重写了toString方法,打印了路径
//C:\Users\eqinxus\IdeaProjects\Mytest\a.txt
File f2 = new File("b.txt");
System.out.println(f1);//重写了toString方法,打印了路径
//b.txt
}
private static void show02(String parent, String child){
File file = new File(parent,child);
System.out.println(file);
}
}
package Part2.Day_23;
import java.io.File;
/*
File类获取功能的方法:
*/
public class demo03file {
public static void main(String[] args) {
//show01();
//show02();
show03();
show04();
}
private static void show04(){
/*
public long length() 返回由此File表示的文件的长度
*/
File f1 = new File("");
long l = f1.length();
System.out.println(l);//以字节 为单位的long型数字。如果地址不存在或者是文件夹,则为0
}
private static void show03(){
File f1 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\a.txt");
String name1 = f1.getName();
System.out.println(name1);
File f2 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\a.txt");
String name2 = f2.getName();
System.out.println(name2);
}
private static void show01(){
File f1 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\a.txt");
String absolutePath1 = f1.getAbsolutePath();
System.out.println(absolutePath1);
File f2 = new File("a.txt");
String absolutePath = f2.getAbsolutePath();
System.out.println(absolutePath);
/*
C:\Users\eqinxus\IdeaProjects\Mytest\a.txt
C:\Users\eqinxus\IdeaProjects\Mytest\a.txt
*/
}
private static void show02(){
File f1 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\a.txt");
File f2 = new File("a.txt");
String path1 = f1.getPath();
System.out.println(path1);
String path2 = f2.getPath();
System.out.println(path2);
System.out.println(f1);
System.out.println(f1.toString());
/*
C:\Users\eqinxus\IdeaProjects\Mytest\a.txt
a.txt
C:\Users\eqinxus\IdeaProjects\Mytest\a.txt
C:\Users\eqinxus\IdeaProjects\Mytest\a.txt
file.toString():
public String toString() {
return getPath();
}
*/
}
}
package Part2.Day_23;
import java.io.File;
public class demo04 {
public static void main(String[] args) {
show01();
show02();
}
private static void show01(){
File f1 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\a.txt");
System.out.println(f1.exists());//true
File f3 = new File("a.txt"); // 等同于 C:\Users\eqinxus\IdeaProjects\Mytest\a.txt
}
private static void show02(){
File f1 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest");
if (f1.exists()){
System.out.println(f1.isDirectory());
System.out.println(f1.isFile());
}
}
}
2.File类创建删除功能的方法
package Part2.Day_23;
import java.io.File;
import java.io.IOException;
public class demo05file {
public static void main(String[] args) {
show01();
show02();
}
private static void show01(){
File f1 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\a.txt");
boolean b1 = false;
try {
b1 = f1.createNewFile();
} catch (IOException e) {
e.printStackTrace(); //如果路径不存在,则抛出IO异常
}
System.out.println("b1"+b1);
}
private static void show02(){
File f1 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\src\\Part2\\Day_24");
f1.mkdir();
File f2 = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\src\\Part3\\Day_25");
f2.mkdirs(); //注意,这两个方法都只创建文件夹,不创建文件
}
}
package Part2.Day_23;
import java.io.File;
/*
File遍历目录功能
public String[] list():
public File[] listFiles():
注意:
list方法和listFiles方法遍历的是构造方法中给出的目录
*/
public class demo06file {
public static void main(String[] args) {
show01();
show02();
}
private static void show01(){
File file = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\src\\Part2\\Day_23");
String[] arr = file.list(); //遍历文件路径和不存在的路径会返回空指针异常
for (String fileName : arr) {
System.out.println(fileName); //可以获取隐藏的文件和文件夹
/*
demo01File.java
demo02file.java
demo03file.java
demo04.java
demo05file.java
demo06file.java
*/
}
}
private static void show02(){
File file = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\src\\Part2\\Day_23");
File[] files = file.listFiles();
for (File f : files) {
System.out.println(f);
/*
C:\Users\eqinxus\IdeaProjects\Mytest\src\Part2\Day_23\demo01File.java
C:\Users\eqinxus\IdeaProjects\Mytest\src\Part2\Day_23\demo02file.java
C:\Users\eqinxus\IdeaProjects\Mytest\src\Part2\Day_23\demo03file.java
C:\Users\eqinxus\IdeaProjects\Mytest\src\Part2\Day_23\demo04.java
C:\Users\eqinxus\IdeaProjects\Mytest\src\Part2\Day_23\demo05file.java
C:\Users\eqinxus\IdeaProjects\Mytest\src\Part2\Day_23\demo06file.java
*/
}
}
}
3.递归
递归的使用前提:调用方法时,方法主体不变,参数在变化就可以用递归实现
构造方法创建对象使用的,如果一直递归,会导致内存中无数个对象,导致编译报错
package Part2.Day_23.demoDigui;
public class demo01recursion {
public static void main(String[] args) {
int s = sum(3);
}
public static int sum(int n){
if (n==1){
return 1;
}
return n+sum(n-1);
}
}
阶乘:
package Part2.Day_23.demoDigui;
public class demo02recursion {
public static void main(String[] args) {
int m = mul(4);
System.out.println(m);
}
public static int mul(int n){
if (n==1){
return 1;
}
return n*mul(n-1);
}
}
4. File:遍历文件名:
package Part2.Day_23.demoDigui;
import java.io.File;
/*
遍历文件夹里的文件
*/
public class demo04recursion {
public static void main(String[] args) {
File file = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\src\\Part2\\Day_23");
getAllfile(file);
}
public static void getAllfile(File file){
File[] files = file.listFiles();
for (File f : files) {
if (f.isDirectory()){
getAllfile(f);
}else {
System.out.println(f);
}
}
}
}
搜索文件:
package Part2.Day_23.demoDigui;
import java.io.File;
import java.util.Locale;
/*
遍历文件夹里的文件
*/
public class demo05recursion {
public static void main(String[] args) {
File file = new File("C:\\Users\\eqinxus\\IdeaProjects\\Mytest\\src\\Part2\\Day_23");
getAllfile(file);
}
public static void getAllfile(File file){
File[] files = file.listFiles();
for (File f : files) {
if (f.isDirectory()){
getAllfile(f);
}else {
//只要java结尾的文件
//String name = f.getName();
//String name = f.getPath(); 或者toString也是用的getPath
String name = f.toString();
name = name.toLowerCase();
//if(f.getName().toLowerCase().endsWith(".java")){}
boolean b= name.endsWith(".java");
if (b){
System.out.println(f);
}
}
}
}
}
5.Filefilter过滤器