IO流的概念
通过数据流、序列化和文件系统提供系统输入和输出。
IO:I => Input 输入---将数据源读到内存中;
相当于读取硬盘上的文件
O => Output 输出---将内存数据写(保存)到介质(硬盘)里;
相当于保存文件。
IO流体系
IO流分:字节流和字符流
字节流分:输入流和输出流
inputStream outputstream
字符流分:输入流(读流)和输出流(写流)
reader writer
File类
java.io.File类,包含了对文件和文件夹的操作方法,可通过File类对文件或文件夹进行操作(新建、删除、重命名等)。
File类不能访问文件中的内容,如需要访问文件内容则需要输入/输出流。
构造方法
a. File(String pathname)
//创一个新的File实例(即可以是文件也可以是文件夹)
例: File fi = new File("e:\\text\\a.txt");
File fi = new File("e:\\text\\t1\\");
b. File(File parent, String child)
例:File fi = new File("e:\\text","a.txt");
c. File(String parent, String child)
d. File(URI uri)
parent指定路径(父目录),可以是File类对象也可以是字符串,child中也可以加入路径层级,但要注意,所用的路径必须存在,不存在的路径不会新建。
常用方法:
boolean isDirectory(); //判断是否是目录
boolean isFile(); //判断是否是文件
File getAbsolutePath(); //获得文件的绝对路径
boolean isHidden(); //判断是否是隐藏文件
boolean exists(); //判断所关联的文件或文件夹是否存在
boolean createNewFile(); //创建一个新的文件(仅当对象文件不存在时)
boolean mkdir(); //创建一个文件夹
//要用mkdir()创建目录,必须上一级目录存在,即最底层目录前面的目录全都存在
boolean mkdirs(); //创建一个文件夹
//要想把File对象包含的目录一次性全都创建好,可以使用mkdirs()方法。
boolean renameTo(File dest); //重命名文件,为文件或文件夹改名
例:File fi1 = new File("e:\\a.txt");
File fi2 = new File("e:\\b.txt");
fi1.renameTo(fi2);
**********************************************
关于斜杠和反斜杠,只能如下生硬地先记住吧:
\\:右手用两个,比如new File("D:\\abc\\" + "Test.txt");
/:左手用一个。比如new File("D:/abc/" + "Test.txt");
**********************************************
boolean delete(); //删除指定的文件或文件夹
void deleteOnExit(); //在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。
boolean equals(Object obj); //比较的文件名字相同为true,不同为false
文件管理:
String getName(); //获得文件名或目录名
String getParent(); //获得文件的上一级父目录的名字
File getParentFile(); //获得文件的上一级父目录的对象
问:getParent()与getParentFile()的区别?
getParent()返回此抽象路径名父目录的路径名字符串;
如果此路径名没有指定父目录,则返回 null。
getParentFile()返回此抽象路径名父目录的抽象路径名;
如果此路径名没有指定父目录,则返回 null。
long lastModified(); //获得文件的最后修改时间(毫秒,当前时间与格林时间(1970 年 1 月 1 日,00:00:00 GMT)之间的毫秒数)
long length(); //获得文件大小(长度),以字节为单位
String[] list(); //获得指定文件夹下的所有文件的名字
File[] listFiles(); //获得文件夹下的所有文件的对象
//注:即是文件对象,那文件对象还有其他的属性,比如:
文件名:getName();
文件路径:getPath();
文件后缀名:str.substring(str.lastIndexOf(".")+1);
文件大小:length();
最后修改时间:lastModified();
static File listRoots();
//获得当前系统的盘符
问:获得系统所有的盘符怎么操作?
File[] f = File.listRoots();
for(File ss:f){
System.out.println(ss.getPath());
}
-----------------------------------------------------------
将毫秒数转成日期:
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
//该类用来对日期字符串进行解析和格式化输出
System.out.println(sdf.format(毫秒数));
列出一个文件夹下所有子文件夹以及子文件。
(1)指定文件夹路径;
(2)判断是否是文件,是文件就打印文件路径(到最底层了);相反如果是目录,则继续;
(3)获取文件夹下所有文件对象;
(4)遍历对象数组,执行递归。
递归写成方法:
File fs=new File("e:\\");
public static void prints(File f) {
if(f.isFile()){ //判断是否是文件
System.out.println(f.getPath());
}else if(f.isDirectory()){ //如果是文件夹
System.out.println(f.getPath());
if(f.listFiles()!=null) {
File[] fs=f.listFiles(); //得到下面所有的文件对象
for(File fa:fs){
prints(fa);
}
}
}
}
评论 (0)