File类,文件的操作
File的常用方法:
FilenameFilter:文件过滤器
序列化和反序列化:
多台机器远程通信,将机器中A的某个java对象转换为字符序列进行传输的过程叫做序列化。序列化还可以将一个对象保存到硬盘中,然后反序列化将对象读取到内存。
- 方式 :一个对象如果支持序列化,需要实现Serializable接口
- 序列化到硬盘:ObjectOutputStream、ObjectInputStream
- transient关键字:如果不希望某个属性被序列化,可用transient声明
关于序列化版本号:
在一个类实现Seriaizable接口后,系统分配一个序列化版本号,但这个类的源码被修改后,
系统重新分配一个版本号。保证序列化和反序列化一致。例如将一个对象序列化到硬盘之后,
修改这个对象所对应类的源码,在进行反序列化是就会报出InvalidClassException异常。
如果手动编写序列化版本号之后,就不会出现这个异常了。
Code:
- test() :使用File类创建文件和文件夹
- test2():使用File类重命名、删除文
- test3():File类中关于判断的方法
- test4():File类的其他常用方法
- FileTest:统计D盘目录下的以txt结尾的文件名,并打印
- FileTest1:FilenameFilter接口,实现文件名过滤功能
- FileTest2:从键盘接收一个路径,将这个路径下的所有文件和文件夹的名字按层级打印
- SeriaDemo:ObjectInputStream写入对象到硬盘中,ObjectInputStream从硬盘读取对象到内存
package io; import java.io.File; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.Date; import org.junit.Test; /** * File类 */ public class FileDemo { //使用File类创建文件和文件夹 @Test public void test() throws IOException{ File file1 = new File("D:\\hello.txt"); //创建文件,成功则返回true,否则返回true /* System.out.println(file1.createNewFile()); //创建目录(文件夹) file1 = new File("D:\\new"); System.out.println(file1.mkdir()); //创建多级目录 file1 = new File("D:\\monkey\\1024"); System.out.println(file1.mkdirs());*/ //创建的是1024.txt文件夹,而不是.txt文件 file1 = new File("D:\\mon\\10241111.txt"); // file1.createNewFile();如果没有createFile,则就是创建目录 System.out.println(file1.mkdirs()); System.out.println(file1.isDirectory()); System.out.println(file1.isFile()); } /* * 使用File类重命名、删除文件 public boolean renameTo(File dest):把文件重命名为指定的文件路径 public boolean delete():删除文件或者文件夹 * */ @Test public void test2() throws IOException{ //文件重命名 /* File oldFile = new File("D:\\hello.txt"); File newFile = new File("D:\\world.txt"); oldFile.renameTo(newFile);*/ //更换路径的文件重命名,如果两个文件的路径不相同,则会剪切被修改的文件,重命名放到新路径里面 File oldf1 = new File("D:\\world.txt"); File newf1 = new File("D:\\monkey\\java.txt"); oldf1.renameTo(newf1); //删除文件,不会放回回收站 File del1 = new File("D:\\monkey"); //如果文件夹下有其他文件则不会删除,如果删除不会放回回收站 System.out.println(del1.delete()); } //File类中关于判断的方法 @Test public void Test3() throws IOException{ /* File file1 = new File("D://monkey"); System.out.println(file1.isDirectory()); System.out.println(file1.isFile());*/ /* File file2 = new File("D:\\new.txt"); file2.createNewFile(); System.out.println(file2.isDirectory()); System.out.println(file2.isFile()); */ //判断文件是否存在 /* System.out.println(file2.exists());*/ File file3 = new File("D:\\新建文件"); // file3.mkdirs();如果没有这个方法,则不创建目录 //判断文件是否隐藏 System.out.println(file3.isHidden()); System.out.println(file3.exists()); } //File类的其他常用方法 @Test public void test4(){ //获取绝对路径 File f1 = new File("d:\\1024.txt"); System.out.println(f1.getAbsolutePath()); //查看文件的大小,单位是字节 System.out.println(f1.length()); //最后修改时间 Date date = new Date(f1.lastModified()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); System.out.println(sdf.format(date)); //获取目录下同级文件或文件夹的名称并输出 File f2 = new File("D:\\"); String[] nameArray = f2.list();System.out.println("目录:"); for(String n : nameArray){ System.out.println(n); } //获取目录下同级文件或文件夹的File对象 File[] fileArray = f2.listFiles(); //打印出文件的绝对路径 for(File f : fileArray){ System.out.println(f); } } } package io; import java.io.File; //test1:统计D盘目录下的以txt结尾的文件名,并打印 public class FileTest { public static void main(String[] args) { //先拿到文件名 //判断文件名是否以.txt结尾 //如果是,打印 File file = new File("D:\\"); File[] arrFile = file.listFiles(); int count = 0; String end = ".txt"; for(File f : arrFile ){ String name = f.toString(); //扫描txt文件,且是文件而不是目录 if(name.endsWith(end)&&f.isFile()){ count++; System.out.println(name); } } System.out.println("以.txt结尾的文件共有"+count+"个"); } } package io; import java.io.File; import java.io.FilenameFilter; //FilenameFilter接口,实现文件名过滤功能 public class FileTest1 { public static void main(String[] args) { File file = new File("D:\\"); String[] nameArray = file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { File f1 = new File(dir,name); //筛选条件 return f1.isFile() && f1.getName().endsWith(".txt"); } }); System.out.println("以.txt结尾的文件个数是:"+nameArray.length+"个"); for(String s : nameArray){ System.out.println(s); } } } package io; import java.io.File; import java.util.Scanner; /** * 从键盘接收一个路径,将这个路径下的所有文件和文件夹的名字按层级打印 * * 1 键盘录入文件名路径 * 2 控制count为缩进,使用递归打印文件夹下面的文件夹 */ public class FileTest2 { static int count = 0; public static void main(String[] args) { File file = getFile(); getFileNames(file); } private static File getFile() { System.out.println("请输入路径:"); Scanner sc = new Scanner(System.in); while(true){ String input = sc.nextLine(); File file = new File(input); if(!file.exists()){ System.out.println("文件路径错误或不存在!请重新输入:"); }else if(file.isFile()){ System.out.println("您输入的是文件,请输入一个文件夹的路径:"); }else{ sc.close(); return file; } } } private static void getFileNames(File file) { File[] fileArr = file.listFiles(); for(int i =0; i<fileArr.length ; i++){ //打印缩进 for(int j = 0 ; j<count ; j++){ System.out.print("\t"); } //打印文件或者文件夹的名字 System.out.println(fileArr[i]); //遍历完最后一个File对象,且最后一个File对象不是文件夹,说明当前文件夹遍历结束 if(i==fileArr.length-1 && !fileArr[i].isDirectory()){ count--; } //如果是一个文件夹,使用递归重复上面的操作 if(fileArr[i].isDirectory()){ count++; getFileNames(fileArr[i]); } } } } package io; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import org.junit.Test; public class SeriaDemo { //ObjectInputStream写入对象到硬盘中 @Test public void ObjectOutput(){ Student s = new Student(); s.setName("张三"); try( ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\zhangsan")); ){ oos.writeObject(s); oos.flush(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //ObjectInputStream从硬盘读取对象到内存 @Test public void ObjectInput(){ try( ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\zhangsan")); ) { Student s = (Student)ois.readObject(); System.out.println(s.getName()); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!