在变量、数组和对象中存储的数据是暂时存在的,程序结束后它们就会丢失。想要永久地存储程序创建的数据,就需要将其保存在磁盘文件中(就是保存在电脑的C盘或D盘中),而只有数据存储起来才可以在其他程序中使用它们。Java的I/O技术可以将数据保存到文本文件、二进制文件甚至是ZIP压缩文件中,以达到永久性保存数据的要求。
目录
一 输入/输出流
二 File类
1.文件的创建与删除
第一种构造方法
第二种构造方法
第三种构造方法
2.File类的使用
(1)获取文件信息
(2)文件夹的操作
1.创建单层文件夹
2.创建多层文件夹
3.删除文件夹
编辑4. 获取文件夹下的所有子文件
一 输入/输出流
😶🌫️😶🌫️😶🌫️流是一组有序的数据序列,根据操作的类型,可分为输入流和输出流两种。I/O(Input/Output,输入/输出)流提供了一条通道程序,可以使用这条通道把源中的字节序列送到目的地。虽然IO流通常与磁盘文件存取有关,但是程序的源和目的地也可以是键盘、鼠标、内存或显示器窗口等。
Java有数据流处理输入/输出模式,程序从指向源的输入流中读取源中的数据,如图所示。源可以是文件、网络、压缩包或其他数据源。
Java语言定义了许多类专门负责各种方式的输入/输出,这些类都被放在java.io包中。其中,所有
输入流类都是抽象类InputStream(字节输入流)或抽象类Reader(字符输入流)的子类;而所有输出
流都是抽象类OutputStream(字节输出流)或抽象类Writer(字符输出流)的子类。
二 File类
File 类是java.io包中唯一代表磁盘文件本身的类。File类定义了一些与平台无关的方法来操作文件,可以通过调用File类中的方法,实现创建、删除、重命名文件等操作。File类的对象主要用来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等。数据流可以将数据写入文件中,文件也是数据流最常用的数据媒体。
1.文件的创建与删除
第一种构造方法
:File(String pathname)
该构造方法通过将给定的路径名字符串转换为抽象路径名来创建一个新File实列。
file创建中的抽象路径的三种表示方法 ,如图1,2,3;
图一: 在MyProject下创建一个word.txt。此时word.txt不在src的包里面。
图二: word.txt与Dome在同一个包中
图三:
那么我们来看一下决定路径下如何创建文件:
1.首先,我们在c盘里面创建一个文件夹,名字为text;
2.然后 ,在text文件夹中创建一个文本,文本名为word.txt;
3.查看绝对路径,这里我们可以右键看属性,也可以直接双击上面的标题;
第二种构造方法
:File(String parent,String chid)
该构造方法根据定义的父路径和子路径字符串(包含文件名)创建一个新的File对象。语法如下:
new File(String parent,String child)
▢parent:父路径字符串,如D:/或D:/doc。
也就是说他它所在的位置信息。
▢child:子路径字符串,如letter.txt。文档,项目的名字。
第三种构造方法
:File(File f, String child)
该构造方法根据f抽象路径名和child路径名字符串创建一个新File实例。语法如下:
new File(File f,String child)
▢f:父路径对象,如D:/doc/。
▢child:子路径字符串,如letter.txt。
【源码】
package my;import java.io.File;public class Demo {public static void main(String[] args) {/** 项目下的路径(默认路径):word.txt* 包中的文件路径:src/my/word.txt* 注意: 可以用/表示文件夹* 可以用\\表示文件夹(转义字符)* 绝对路径:C:\\text\\word.txt*/ File f1 = new File("C:\\text\\word.txt");//第一种构造方法File f2 = new File("C:\\text\\","word.txt");//第二种构造方法/** parent:C:\\text\\(文件在c盘的文件夹text中)* child:word.txt(它的文档名字是word.txt)*/File dir = new File("C:\\text\\");//文件夹File f3 = new File(dir,"word.txt");//第三种构造方法/** 也可以用下面的式子表示* File f3 = new File(new File("C:\\text\\"),"word.txt");*/System.out.println(f1.getAbsolutePath());System.out.println(f2.getAbsolutePath());System.out.println(f3.getAbsolutePath());System.out.println(f1==f2);/** f1和f2不相等是因为它们是通过不同的构造方法创建的对象。* 尽管它们的路径和文件名都相同,但它们是两个不同的对象。* 比较两个对象时,需要使用.equals()方法而不是==运算符。* 所以应该使用f1.equals(f2)来比较它们是否相等。* 他们只是一个代表,好比a与b是朋友,c也与b是朋友,而a与c并不一定是朋友。*/System.out.println(f1.equals(f2));}
}
2.File类的使用
(1)获取文件信息
File类提供了很多方法用来获取文件本身信息。如表:
【代码】
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;public class Demo {public static void main(String[] args) {File f1 = new File("C:\\text\\word.txt");System.out.println("文件是否存在:"+f1.exists());System.out.println("文件名:"+f1.getName());System.out.println("文件的绝对路径:"+f1.getAbsolutePath());System.out.println("文件是否隐藏:"+f1.isHidden());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));boolean f = f1.delete();System.out.println("文件是否删除成功:"+f);try {boolean fl = f1.createNewFile();System.out.println("创建文件是否成功:"+fl);} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();}}}
【运行结果】
运行完后我们会发现word文件大小变为0了,这是因为我们删除了,又重新创建的原因。
(2)文件夹的操作
1.创建单层文件夹
创建单层文件夹用mkdir()或mkdirs()方法。
package mt;import java.io.File;public class Demo {public static void main(String[] args) {File dir = new File("dir");boolean flag = dir.mkdir();//创建文件夹System.out.println("创建文件夹是否成功:"+flag);}}
创建前我们可以看到左侧没有dir文件:
运行刷新后:
我们可以发现左侧出现了dir文件夹的图标。
2.创建多层文件夹
创建多层文件夹我们要用mkdirs()方法;
【代码】
package mt;import java.io.File;public class Demo {public static void main(String[] args) {File dir = new File("dir/dir2/dir3/dir4/");boolean flag = dir.mkdir();//创建文件夹boolean flag2 = dir.mkdirs();//创建文件夹及其父文件夹System.out.println("创建文件夹是否成功:"+flag);System.out.println("创建多层文件夹是否成功:"+flag2);}}
【运行结果】
3.删除文件夹
删除文件夹用delete()方法,默认删除最后一个文件夹。
【代码】
package mt;import java.io.File;public class Demo {public static void main(String[] args) {File dir = new File("dir/dir2/dir3/dir4/");boolean flag = dir.mkdir();//创建文件夹boolean flag2 = dir.mkdirs();//创建文件夹及其父文件夹System.out.println("创建文件夹是否成功:"+flag);System.out.println("创建多层文件夹是否成功:"+flag2);boolean de1 = dir.delete();System.out.println("删除文件夹是否成功:"+de1);}}
【运行结果】
4. 获取文件夹下的所有子文件
【代码】
package mt;import java.io.File;public class Demo {public static void main(String[] args) {File f = new File("C:\\windows\\");File files[] = f.listFiles();for(File tmp:files) {if(tmp.isFile()) {System.out.println("文件:"+tmp.getName());}else if(tmp.isDirectory()){System.out.println("文件夹:"+tmp.getName());}}}}
【运行结果】