关于文件的操作(java)

xiaoxiao2021-02-27  198

对文件的操作从本质上和前面解析的各种类有着本质的区别。前面所有类的操作都是基于计算机的内存,只要断电,所有数据都消失。而对于文件来讲,计算机是储存在磁盘上。
先来简单的说说内存和磁盘(硬盘),因为这会在文件读写的速度上有着很大的影响。首先要说内存和硬盘都用来储存数据的,但是为什么还有区分成两者呢?大家都应该知道,计算机本身的操作都是靠着电路实现的,cpu对于电的操作反应速度是很快的,内存其实就是电路组成,这样会使得cpu对于内存的反应操作的速度巨快,但是也会带来一个问题,只要断电,所有在内存上的数据都会消失,这也就是大家平时在写文档时,没有立即保存电脑强制关机重启后,文档内未保存的内容全部消失的原因。正是因为内存会出现这种问题,所有提出了磁盘,也就是硬盘。硬盘是由磁组成的,上面存着都是磁信号(南北极也是两种状态可以代替电路的通断两种状态表示0和1)。大家看到的C盘多少个G,D盘多少G,都是指磁盘。因为上面是磁性号,这样断电之后,所有的数据都是保存下来的。但是硬盘有一个问题,就是因为它是磁信号,cpu必须得先将电信号转换为磁信号才能刻录在磁盘上,这也就意味着cpu对于磁盘的处理速度远远慢与磁盘。我们现在对于电脑的操作,基本上都是先在内存上处理部分数据后再储存在硬盘上。
上面说简单的阐述了一下自己对于磁盘和硬盘的理解后,再来说说java对于文件的处理。 java说一切皆对象,那么每一个文件就是一个对象。 java.io.File就是文件类。 使用File可以: 1.访问文件或目录的属性(如:大小,名字,修改时间等) 2.操作文件或目录(创建,删除文件和目录) 3.访问目录中的所有内容 **但是不可以: 访问文件数据(即对文件的读写)** File类的**注意事项**: 1.**文件路径的书写**(见构造方法) 2.file.delete()**只能删除空目录**(见demo5)和**不为空的目录删除**(见demo8)(**递归**) 3.file.mkdir()和dir.mkdiers()的区别(见demo5)(**file.mkdir()为创建一个目录,其他所有父目录必须存在,dir.mkdiers()方法在创建当前目录的同时将多有不存在的父目录一并创建出来**) 4.**获取一个目录下的部分子项**(获取满足条件的部分子项)**需要用到FileFilter接口及重写其过滤器方法accept()**见demo8
构造方法 File file=new File("."+File.separator+"demo.txt"); 这里需要注意,构造方法传入的参数是文件的路径,但是这里**尽量不要写绝对路径**,因为不同操作系统之间绝对路径存在着很大的差别(例如:Windows系统有各种盘符(C盘D盘等),而Linux系统只有一个根目录,没由盘符),这就会导致在不同操作系统之间移植的时候,会各种报错,这也就失去了java的优势。所以在写路径时,**尽量去写相对路径而不是绝对路径**,这样就可以保证在不同操作体统间移植的时候不会报错。除了这一点,在写路径时,**尽量不要去写当前系统的分离器**(例如Windows系统路径C:\XAMPP\htdocs,这其中的\就是Windows系统的分离器),不同操作系统之间的分离器也不同,我们在写代码时,**不要写\,而应该写成File.separator**,这是File类的一个成员变量,表示当前系统的分离器。当你移植到不同操作系统时,不同的虚拟机会自动帮你匹配。

这个类的方法有很多 例如: demo1

File file=new File("."+File.separator+"demo.txt"); //获取名字 String name=file.getName(); System.out.println("name:"+name); //大小(占用的字节量) long lenth=file.length(); System.out.println("大小:"+lenth+"字节"); //是否为文件 boolean isFile=file.isFile(); System.out.println("是文件:"+isFile); //是否为目录 boolean isDir=file.isDirectory(); System.out.println("是目录:"+isDir); //是否问隐藏文件 boolean isHidden=file.isHidden(); System.out.println("是否为隐藏文件"+isHidden); //最后修改时间 long time=file.lastModified(); Date date=new Date(time); System.out.println(date);

在当前项目根目录下创建test.txt文件。 demo2

File file=new File("text.txt"); /** * boolean exists() *判断当前File表示的文件或目录是否已经存在了 */ if(!file.exists()){ file.createNewFile(); System.out.println("创建完毕"); }

删除当前目录下的test.txt demo3

File file=new File("test.txt"); if(!file.exists()){ file.delete(); System.out.println("删除完毕!"); }else{ System.out.println("该文件不存在"); }

在当前目录下创建一个名为demo的目录 demo4

File dir=new File("demo"); if(!dir.exists()){ //创建该目录 dir.mkdirs(); System.out.println("创建完毕"); }else{ System.out.println("该目录已存在"); }

在当前目录下创建目录:多级目录 a/b/c/d/e/f demo5

File dir=new File("a"+File.separator+ "b"+File.separator+ "c"+File.separator+ "d"+File.separator+ "e"+File.separator+ "f"); if(!dir.exists()){ /** * dir.mkdir()方法不能创建多级目录,它只可以创建一个目录, * 其他所有父目录必须存在 * * 要创建多级目录就得使用dir.mkdiers()方法 * 在创建当前目录的同时将多有不存在的父目录一并创建出来。 */ dir.mkdirs(); System.out.println("创建完毕!"); }else{ System.out.println("目录已存在"); }

删除目录 demo6

File dir=new File("demo"); if(dir.exists()){ /* * 删除目录必有一个要求,该目录必须是一个 * 空目录才可以将其删除 * (比如将demo目录改成a目录(因为a目录下还有目录)) */ dir.delete(); System.out.println("删除完毕!"); }else{ System.out.println("该目录不存在"); }

获取当前目录下的所有子项 (是一个list文件集合) demo7

File dir=new File("."); /* * File[] listFiles() * 获取当前目录下的所有子项 */ File[] subs=dir.listFiles(); //遍历 for(File sub:subs){ if(sub.isFile()){ System.out.print("文件:"); }else{ System.out.print("目录:"); } System.out.println(sub.getName()); }

获取当前目录下名字以“.”开头的子项(需要用到接口FileFilter的accept过滤器方法(重写)) demo8

File dir=new File("."); /* * 重载的listFiles方法会将所有子项都经过一次过滤器 * 但是该方法只会讲满足过滤器accept方法的子项返回 */ File[] subs=dir.listFiles(new MyFilter()); for(File sub:subs){ String name=sub.getName(); System.out.println(name); } System.out.println("************"); /* * 使用匿名内部类形式创建一个获取当前(目录下的所有文件)的过滤器 */ File[] subss=dir.listFiles(new FileFilter(){ @Override public boolean accept(File file) { return file.isFile(); } }); for(File sub:subss){ System.out.println(sub.getName()); } ....... class MyFilter implements FileFilter{ @Override public boolean accept(File file) { //过滤条件:名字是以“.”开头 String name=file.getName(); System.out.println("正在过滤"+name); return name.startsWith("."); } }

目录下面还有多级子目录的删除(使用递归层级删除) demo9

//删除文件 public static void f(File dir){//递归 if(dir.isFile()){//如果是文件直接删除 System.out.println(dir.getName()); dir.delete(); } //如果是目录 File[] dirs=dir.listFiles(); if(dirs.length==0){//当前目录没有子项直接删除 System.out.println(dir.getName()); dir.delete(); } //如果有子项,每个子项递归 for(File file:dirs){ f(file); System.out.println(dir.getName()); dir.delete(); } } public static void main(String[] args) { File dir=new File("a"); f(dir); System.out.println("删除完毕"); }

以上就是所有对于File的总结

转载请注明原文地址: https://www.6miu.com/read-9907.html

最新回复(0)