最近几天都在学习IO流 本来想着昨天晚上写完这篇总结的 太困也就作罢 今天也是满满4节课 终于拖到晚上有了时间来写这篇博客.
接下来的讨论我分为外部和内部来操作一个文件
整体概述一下文章内容 体系
- 外部: 即对文件整体进行操作,比如删除,重命名,剪切,获取文件路径之类的操作
- 内部: 即对txt之类的文本文件的内容操作,比如读写,添加之类的操作
区别 前者是以文件(文件夹 文件)为单位 后者是以文件(txt等文件)内容为单位
首先介绍一下外部的体系内容:
核心类: File 描述的是一个文件或文件夹 通俗一点就是相当关于一个标志 指向了一个地址 那个地址就是文件和文件夹存放的地址
举个例子:
// 检验指定路径下是否存在指定的目录或者文件.
File file = new File("c:\\a.txt");//寻找到了a这个文件
System.out.println(file.exists());
// File对象是否是目录
System.out.println(file.isDirectory());
// 对象是否是文件
System.out.println(file.isFile());
File也可以是个抽象路径 意思就是说 它可以真实存在 也可以表示不存在的文件 可以通过exists()来判断是否存在文件
File创建 需要导包 import java.io.File
1. new File(String url);
2. new File(File parent,String child); //D:\我是文件夹\我是子文件
D:\我是文件夹就是File parent的路径 而我是子文件就是child
注意路径分隔符 Windows是’\’或者单个’/’ 而Linux是’/’
File.separator可以得到对应系统的分隔符
例:new File(“c:” + File.separator + “a.txt”);
路径问题:
绝对路径: 该文件在硬盘上 的完整路径。绝对路径一般都是以盘符开头的。
相对路径: 相对路径就是资源文件相对于当前程序所在的路径。
. 当前路径
.. 上一级路径
File file = new File(“.”);是得到当前的路径
file.getAbsolutePath()可以显示当前路径 也就是绝对路径
File file2 = new File(“..\..\a.txt”);是相对路径 ..表示返回上一个文件层
基础的File讲完了 来介绍一下File的基本操作吧
创建:
- createNewFile() //创建一个空的文件
- mkdir() //创建一个目录 这只会创建最后一级目录,如果上级目录不存在就抛异常。
- mkdirs() 在指定位置创建目录,这会创建路径中所有不存在的目录。
- renameTo(File dest) //dest是目标文件
这里就介绍一下renameTo 有两个作用 1.重命名 2.剪切
如果源文件和目标文件是在同一个目录下 那么就是重命名 前提目标文件不存在 不然会冲突
如果源文件和目标文件不是在同一个文件下 那么就是剪切 但是不能对文件夹进行操作
删除
1. delete() 删除文件或一个空文件夹,如果是文件夹且不为空,则不能删除
2. deleteOnExit() 一般用于删除临时 文件 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录,保证程序异常时创建的临时文件也可以被删除
判断:
1. exists() 文件或文件夹是否存在。
2. isFile() 是否是一个文件
3. isDirectory() 是否是一个目录
4. isHidden() 是否是一个隐藏的文件或是否是隐藏的目录。
5. isAbsolute() 测试此抽象路径名是否为绝对路径名。
获取:
1. getName() 获取文件或文件夹的名称,不包含上级路径。
2. getAbsolutePath() 获取文件的绝对路径
3. length() 获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
4. getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
5. lastModified() 获取最后一次被修改的时间。
举个例子:
File file = new File("..\\..\\a.txt");
System.out.println("文件名:"+ file.getName());
System.out.println("获取绝对路径:"+ file.getPath());
System.out.println("getAbsolutePath获取绝对路径:"+file.getAbsolutePath());
System.out.println("获取文件的的大小(字节为单位):"+ file.length());
System.out.println("获取文件的父路径:"+ file.getParent());
//使用毫秒值转换成Date对象
long lastModified = file.lastModified();
Date date = new Date(lastModified);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
System.out.println("获取最后一次的修改时间(毫秒值):"+ dateFormat.format(date) );
针对文件夹还有其他的操作 这个比较常用
1. staic File[] listRoots() 列出所有的根目录(Window中就是所有系统的盘符)
2. list() 返回目录下的文件或者目录名,包含隐藏文件。 String类型
3. listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。
4. list(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。
5. listFiles(FilenameFilter filter) 返回指定当前目录中符合过滤条件的子文件或子目录。
讲一下 .
(当前目录在eclipse作用)
我们来看一下.的作用的吧
File file=new File(".\\src");
String[] strings=file.list();
for(String x:strings) { System.out.println(x); }
结果:
由此可知.
代表的而是这个项目的当前目录 即day13文件夹 ,而不是所在类的当前目录(虽然x.java所在的haha是文件夹 但是 这里不是当前目录)
再看一个栗子:也可以知道当前目录是day13
File file=new File("src");
String[] strings=file.list();
for(String x:strings) { System.out.println(x); }
结果:
这里提一下 FilenameFilter是筛选器
举个例子:
// 自定义一个文件名过滤器
class MyFilter implements FilenameFilter{
@Override
public boolean accept(File dir, String name) {
//System.out.println("文件夹:"+dir+" 文件名:"+ name);
return name.endsWith(".java");//结尾是.java的返回true
}
}
public static void main(String[] args) {
File dir = new File("F:\\1208\\day06\\代码\\day06");
listJava2(dir);
}
public static void listJava2(File dir){
File[] files = dir.listFiles(new MyFilter()); //得到文件夹下面的所有子文件与文件夹。
for(File file : files){
System.out.println(file.getName());
}
}
分隔符:了解一下
File.separatorChar 等效separator 与系统有关的默认名称分隔符 // pathSeparatorChar 等效pathSeparator 与系统有关的路径分隔符 ;
这是上篇 还有下篇了解一下