1.1IO流所解决的问题
解决之前的数据存储在内存中,不能永久保存。
因此需要将数据存储在硬盘上,文件是数据存储的载体。
如何实现将数据保存到文件中:
思路:
1 定位到文件:对文件进行相应的操作:删除,修改 , 重命名,获取文件属性信息 但是不能读写文件
2 读写文件的数据:IO流技术 可以实现对文件中的数据进行读写
1.2File类
File类及其与IO操作相关的类都位于java.io包下,表示文件和目录路径名的抽象表示。代表系统中
的文件对象(文件、文件夹)
File类提供了如:定位文件 获取文件本身的信息,删除文件 创建文件 创建目录等功1.
1.3常见的API
File类的对象的创建:
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File 实例。 |
File(String pathname) | 通过将给定的路径名字符串转换为抽象路径名来创建新的 File 实例。 |
File(String parent, String child) | 从父路径名字符串和子路径名字符串创建新的 File 实例。 |
File(File parent, String child) | 从父抽象路径名和子路径名字符串创建新的 File 实例。 |
File对象 可以定位到文件和文件夹
File封装的对象仅仅是一个路径名,这个路径可以存在 也可以不存在
绝对路径和相对路径
绝对路径: 从盘符开始
File f1 = new File("D:\\src\\a.txt")
相对路径:不带盘符 默认直接到当前工程下的目录寻找文件
File f2 = new File("模块名称\\a.txt")
public static void main(String[] args) {
// 1 创建File对象(指定文件路径)
File f1 = new File("D:\\code\\1.jpg");
File f2 = new File("D:/code/1.jpg");
long size1 = f1.length();//获取文件的大小
long size2 = f2.length();// 单位:字节
System.out.println(size1 +"---"+size2);
// 屏蔽系统之间的路径分隔符的差异 File.separator
File f3 = new File("d:"+File.separator+"code"+File.separator+"1.jpg");
System.out.println(f3.length());
// 以上在表示文件路径的时候 我们采用的都是绝对路径
File f4 = new
File("D:\\workSpace\\idea\\JavaSEDemo\\day_06\\src\\1.jpg");
File f5 = new File("day_06/src/1.jpg");// 相对路径 相对于当前工程
System.out.println(f4.length() +"---"+ f5.length());
//使用file表示一个目录
File f6 = new File("D:\\code");
File f7= new File("day_06/src");
System.out.println(f6.exists());// 表示路径是否存在
System.out.println(f7.exists());
}
//File对象的其他创建方式
//f8表示f6这个父路径下的1.jpg文件
File f8 = new File(f6,"1.jpg");
File f9 = new File("D:\\code","1.jpg");
System.out.println(f8.length());
System.out.println(f9.length());
判断文件类型 获取文件信息
public static void main(String[] args) {
// 1 使用绝对路径创建一个File对象
File file1 = new File("D:/code/1.jpg");
File file2 = new File("day_06/src/1.jpg");
// a 获取他的绝对路径
System.out.println(file1.getAbsolutePath());
System.out.println(file2.getAbsolutePath());
// b 获取文件定义时使用的路径
System.out.println(file1.getPath());
System.out.println(file2.getPath());
//c 获取文件的名称 带文件的扩展名
System.out.println(file1.getName());
System.out.println(file2.getName());
//d 获取文件的大小 返回的是字节数
System.out.println(file2.length());
//e 获取文件的最后的修改时间 返回的是距离1970年1月1日 00:00:00 一个毫秒值
long time = file2.lastModified();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String modifiedTime = sdf.format(time);
System.out.println(modifiedTime);
// f 判断File对象表示的是一个文件还是目录
System.out.println(file1.isDirectory());//false
System.out.println(file2.isFile());//true
System.out.println(file1.exists());//true
}
创建文件 删除文件
public static void main(String[] args) throws IOException {
File file= new File("day_06/src/a.txt");
if(!file.exists()){//不存在 则创建一个新的文件
file.createNewFile();
}
File file1 = new File("day_06/src/a");
if (!file1.exists()){
file1.mkdir();
}
File file2 = new File("day_06/src/a/b/c/d");
if (!file2.exists()){
file2.mkdirs();
}
}
删除文件
使用delete删除目录的时候 只能删除文件和空目录
delete方法删除的时候 直接删除 不经过回收站
public static void main(String[] args) throws IOException {
File file= new File("day_06/src/a.txt");
if(!file.exists()){//不存在 则创建一个新的文件
file.createNewFile();
}
File file1 = new File("day_06/src/a");
if (!file1.exists()){
file1.mkdir();
}
File file2 = new File("day_06/src/a/b/c/d");
if (!file2.exists()){
file2.mkdirs();
}
// 删除文件
file.delete();
file2.delete();
File file3 = new File("day_06/src/a");
file3.delete();
}
遍历文件夹
public static void main(String[] args) {
//1 定位到一个目录
File f1 = new File("D:/code");
String[] names = f1.list();
for (String name : names){
System.out.println(name);
}
// 2 一级文件对象
// 可以获取当前目录下的一级目录 到一个文件对象数组中
File[] files = f1.listFiles();
for (File f : files){
System.out.println(f.getAbsolutePath());
}
}
listFiles方法的注意事项:
当调用者不存在时,会返回null
当调用者是一个文件时,返回null
当调用者是一个空目录时,返回一个长度为0的数组
当调用者是一个有内容的目录时,将里面所有的文件和目录的路径放在File数组中返回
当调用者中包含隐藏文件是,也可以扫描到
需求: 统一一个目录下的每种文件的个数并打印:
打印的格式为:
txt:3个
doc:5个
jpg:2个
public class FileDemo5 {
public static void main(String[] args) {
// 1 定位到指定的目录
File f = new File("d:/code");
// 2 获取目录下的文件的列表
File[] files = f.listFiles();
Map<String,Integer> map = new HashMap<>();
// 3 遍历
for (File file : files){
if (file.isFile()){
String name = file.getName();
System.out.println(name);
int lastIndex = name.lastIndexOf(".");
String regx = name.substring(lastIndex +1);
System.out.println(regx);
if(map.containsKey(regx)){
map.put(regx, map.get(regx) + 1) ;
}else{
map.put(regx,1);
}
}
}
// 遍历Map 重写组织输出格式
Set<Map.Entry<String,Integer>> set = map.entrySet();
for (Map.Entry<String,Integer> entry:set){
System.out.println(entry.getKey() +":"+entry.getValue()+"个");
}
}
}
欢迎一起讨论学习!