File:代表文本
IO流:读写数据
1、 File 类构建对象的方式是什么样的? File 的对象可以代表哪些东西?
注意
· File 对象既可以代表文件、也可以代表文件夹。
● File 封装的对象仅仅是一个路径名,这个路径可以是存在的,也允许是不存在 。
2、绝对路径和相对路径是什么意思?
.绝对路径:从盘符开始
File file1 = new File (" D :\\ xinbao \\ a . txt ");
.相对路径:不带盘符,默认直接到当前工程下的目录寻找文件。
File file3= new File ("模块名\\ a . txt ");
创建对象
package com.xinbao.d1_file;
import java.io.File;
public class FileTest1_1 {
public static void main(String[] args) {
//1、创建一个File对象,指代某个具体的文件
//路径分隔符
//File f1 = new File("C:\\Users\\86182\\Desktop\\c++基础.txt");
// File f1 = new File("C:/Users/86182/Desktop/c++基础.txt");
File f1 = new File("C:" + File.separator + "Users" + File.separator + "86182" + File.separator + "Desktop/c++基础.txt");
System.out.println(f1.length());//文件大小
File f2 = new File("C:\\Users\\86182\\Desktop");
System.out.println(f2.length());
//File对象可以指代一个不存在的文件路径
File f3 = new File("C:\\Users\\86182\\Desktop\\c+++++.txt");
System.out.println(f3.length());
System.out.println(f3.exists());
//如果要定位的文件在模块中,应该怎么定位呢?
//绝对路径:带盘符的
//File f4 = new File("E:\\JVsoft\\file-io-app\\src\\com\\xinbao\\d1_file\\xinbao");
//相对路径:不带盘符,默认直接去工程下寻找文件
File f4 = new File("com\\xinbao\\d1_file\\xinbao");
System.out.println(f4.length());
}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=13344:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app FileTest1
5179
16384
0
false
6
进程已结束,退出代码为 0
方法
判断文件类型,获取文件信息
package com.xinbao.d1_file;
import java.io.File;
import java.text.SimpleDateFormat;
public class FileTest2 {
public static void main(String[] args) {
//1、创建文件对象,指代某个文件
File f1 = new File("E:\\JVsoft\\file-io-app\\src\\com\\xinbao\\d1_file\\xinbaby");
File f2 = new File("E:\\JVsoft\\file-io-app\\src\\com\\xinbao\\d1_file");
File f3 = new File("E:\\JVsoft\\file-io-app\\src\\com\\xinbao\\d1_file\\xinbao");
//2、判断当前文件对象对应的路径是否存在,存在返回true
System.out.println(f1.exists());//false
System.out.println(f2.exists());//true
//3、判断当前文件对象指代的是否是文件,是文件返回true,反之
System.out.println(f3.isFile());//true
//4、判断当前文件对象指代的是否是文件夹,是文件夹返回true,反之
System.out.println(f2.isDirectory());//true
//5、获取文件名称(包括后缀)'
System.out.println(f1.getName());//xinbaby
//6、获取文件大小,返回字节数
System.out.println(f3.length());
//7、获取文件的最后修改时间
long time = f3.lastModified();
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(date.format(time));
//8、获取创建文件对象时,使用的路径
File f4 = new File("E:\\fpga\\课程设计\\I型指令设计.ppt");
File f5 = new File("file-io-app\\src\\com\\xinbao\\d1_file");
System.out.println(f4.getPath());
System.out.println(f5.getPath());
//9、获取绝对路径
System.out.println(f4.getAbsolutePath());
System.out.println(f5.getAbsolutePath());
}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=13622:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app com.xinbao.d1_file.FileTest2
false
true
true
true
xinbaby
8
2023-10-29 22:38:25
E:\fpga\课程设计\I型指令设计.ppt
file-io-app\src\com\xinbao\d1_file
E:\fpga\课程设计\I型指令设计.ppt
E:\JVsoft\api-app3-3\file-io-app\src\com\xinbao\d1_file
进程已结束,退出代码为 0
创建,删除文件、文件夹
package com.xinbao.d1_file;
import java.io.File;
import java.io.IOException;
public class FileTest3 {
public static void main(String[] args) throws Exception {
//1、创建一个新文件(文件内容为空),创建成功返回true,反之
File f1 = new File("E:/JVsoft/luluxiao.txt");
System.out.println(f1.createNewFile());//IOException,害怕E盘不存在,throw出去
//2、创建文件夹,注意:只能创建一级文件夹
File f2 = new File("E:/JVsoft/luluxiao");
File f3 = new File("E:/JVsoft/pape/mark");
System.out.println(f2.mkdir());
System.out.println(f3.mkdir());//false 多级
//3、创建文件夹,注意:可以创建多级文件夹
File f4 = new File("E:/JVsoft/pp/bk/pp");
System.out.println(f4.mkdirs());
//4、删除文件,或者空文件夹,注意:不能删除非空文件夹
System.out.println(f1.delete());//非空文件
File f5 = new File("E:/JVsoft/pp");
System.out.println(f5.delete());//非空文件夹
System.out.println(f2.delete());//空文件夹
}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=8822:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app com.xinbao.d1_file.FileTest3
true
true
false
false
true
false
true
进程已结束,退出代码为 0
遍历文件夹
使用 listFiles 方法时的注意事项:
.当主调是文件,或者路径不存在时,返回 null
.当主调是空文件夹时,返回一个长度为0的数组
.当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在 File 数组中返回
.当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在 File 数组中返回,包含隐藏文件
.当主调是一个文件夹,但是没有权限访问该文件夹时,返回 null
package com.xinbao.d1_file;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
public class FileTest4 {
public static void main(String[] args) throws Exception {
//public String [] list ()
//获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。
File f1 = new File("E:\\硬件课设");
String[] files = f1.list();
for (String file : files) {
System.out.println(file);
}
//public File [] listFiles ()
//获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点)
File[] filesArray = f1.listFiles();
for (File file : filesArray) {
System.out.println(file.getAbsolutePath());
}
File f = new File("E:\\硬件课设/aaa");//不存在
File[] files1 = f.listFiles();//null
System.out.println(Arrays.toString(files1));
File f3 = new File("E:\\硬件课设\\bbb.txt");
System.out.println(f3.createNewFile());//空文件
File[] f4 = f3.listFiles();
System.out.println(Arrays.toString(f4));//null
File f5 = new File("E:\\硬件课设/ccc");
System.out.println(f5.mkdir());
System.out.println(Arrays.toString(f5.listFiles()));//[]
}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=9178:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app com.xinbao.d1_file.FileTest4
bbb
bbb.txt
BIN
README.TXT
UPDATES
E:\硬件课设\bbb
E:\硬件课设\bbb.txt
E:\硬件课设\BIN
E:\硬件课设\README.TXT
E:\硬件课设\UPDATES
null
false
null
true
[]
进程已结束,退出代码为 0
方法递归
什么是方法递归?
.递归是一种算法,在程序设计语言中广泛应用。
·从形式上说:方法调用自身的形式称为方法递归( recursion )。
递归的形式
直接递归:方法自己调用自己。
间接递归:方法调用其他方法,其他方法又回调方法自己。
使用方法递归时需要注意的问题:
.递归如果没有控制好终止,会出现递归死循环,导致栈内存溢出错误。
package com.xinbao.d2_recursion;
public class RecursionTest1 {
public static void main(String[] args) {
test1();
}
//直接方法递归
public static void test1() {
System.out.println("---test1---");
test1();//死循环,栈内存溢出
}
//间接方法递归
public static void test2(){
System.out.println("---test2---");
test3();
}
public static void test3() {
test2();//间接递归
}
}
算法思想
明确递归的公式,递归的终结点,算法必须走向终结点
案例1:计算n的阶乘
package com.xinbao.d2_recursion;
public class RecursionTest2 {
public static void main(String[] args) {
System.out.println(f(5));//120
}
public static int f(int n) {
if (n == 1){
return 1;
}else{
return f(n - 1) * n;
}
}
}
案例2:计算1 ~ n的和
package com.xinbao.d2_recursion;
public class RecursionTest3 {
public static void main(String[] args) {
System.out.println(f(10));//55
}
public static int f(int n) {
if (n == 1){
return 1;
}else{
return f(n - 1) + n;
}
}
}
案例
文件搜索
在 Data ( D :)中搜索
需求:从 D :盘中,搜索" QQ . exe "这个文件,找到后直接输出其位置。分析:
①先找出 D :盘下的所有一级文件对象
②遍历全部一级文件对象,判断是否是文件
)如果是文件,判断是否是自己想要的
如果是文件夹,需要继续进入到该文件夹,重复上述过程
package com.xinbao.d2_recursion;
import java.awt.*;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
public class RecursionTest4 {
public static void main(String[] args) throws Exception {
//"C:\Users\86182\Desktop\WPS Office.lnk"
searchFile(new File("E:/"), "WPS Office");
}
/**
* 去目录下搜索某个文件
* @param dir 目录
* @param fileName 文件名
*/
public static void searchFile(File dir, String fileName) throws Exception {
//1、把非法情况都拦截
if (dir == null || !dir.exists() || dir.isFile()){
return;//代表无法搜索
}
//2、dir不是null,存在,一定是目录对象
//获取当前目录下的全部一级文件对象
File[] files = dir.listFiles();
//3、判断当前目录下是否存在一级文件对象,以及是否可以拿到一级文件对象
if (files != null && files.length > 0){
//4、遍历全部一级文件对象
for (File file : files) {
//5、判断这个文件对象是文件还是文件夹
if (file.isFile())
{
//是文件,判断文件名是否匹配
if (file.getName().contains(fileName)){
System.out.println("找到了:" + file.getAbsolutePath());
// Runtime runtime = Runtime.getRuntime();
// File f = new File("C:\\Users\\Public\\Desktop\\Microsoft Edge.lnk");
// runtime.exec(f.getAbsolutePath());
}
}else{
//是文件夹,递归
searchFile(file,fileName);
}
}
}
//System.out.println("没找到");
}
}
E:\JVsoft\Java\jdk-17\bin\java.exe -javaagent:E:\JVsoft\IntelliJIDEA2021.1.1\lib\idea_rt.jar=59383:E:\JVsoft\IntelliJIDEA2021.1.1\bin -Dfile.encoding=UTF-8 -classpath E:\JVsoft\api-app3-3\out\production\file-io-app com.xinbao.d2_recursion.RecursionTest4
找到了:E:\国赛\预测结果\无风化预测\WPS Office.lnk
进程已结束,退出代码为 0