【学习笔记】IO 流(三)

IO 流(三)

 

File 类

我们使用流的方式可以读取和写入内容,但是像删除、剪切文件、获取文件创建时间等等这样的操作,我们使用流就不能实现了,所以我们学习一下 File 类的使用

  • 概念:代表物理盘符中的一个文件或文件夹

  • 方法:

    • createNewFile() //创建一个文件

    • mkdir() //创建一个新目录

    • delete() //删除文件或空目录

    • exists() //判断File对象所代表的文件是否存在

    • getAbsolutePath() //获取文件的绝对路径

    • getName() //获得文件的名字

    • getParent() //获取文件/目录 所在的目录

    • isDirectory() //判断文件是否是目录

    • isFile() //判断是否是文件

    • length() //获得文件的长度

    • listFiles() //列出目录中的所有内容

    • renameTo() //修改文件名为

 

1.分隔符

package com.iosteam.fileClass;
​
import java.io.File;
​
public class Demo16 {
    public static void main(String[] args) {
        separator();
    }
    public static void separator(){
        System.out.println("路径分隔符:"+ File.pathSeparator);
        System.out.println("名称分隔符:" + File.separator);
    }
}

image-20220727163156932

 

2.文件操作

2.1创建文件

//1创建文件
File file = new File("f:\\test\\file.txt");   //创建File对象
if(!file.exists()){               //判断文件是否存在
    boolean flag = file.createNewFile();     //创建文件
    System.out.println("创建结果:" + flag);
}

如果文件存在了,再去创建那么就会返回false

文件存在的话,调用exists方法就会返回true,反之返回false

在创建File对象时,给的路径不是绝对路径的话,就会在运行的项目的目录下创建

2.2删除文件

第一种方法:直接删除,调用delete方法

//删除文件
file.delete();

如果文件不存在,则返回false

第二种方法:使用jvm退出时删除

//第二种
file.deleteOnExit();

 

2.3获取文件信息

//获取文件信息
    System.out.println("获取文件的绝对路径:" + file.getAbsolutePath());
    System.out.println("获取路径:" + file.getPath());
    System.out.println("获取文件名称:" + file.getName());
    System.out.println("获取父目录:" + file.getParent());
    System.out.println("获取文件长度:" + file.length());
    System.out.println("获取文件创建时间:" + new Date(file.lastModified()));
}

image-20220727165622990

 

2.3判断文件

//判断
System.out.println("文件是否可写:" + file.canWrite());
System.out.println("是否是文件:" + file.isFile());
System.out.println("文件是否隐藏:" + file.isHidden() );

 

3文件夹操作

3.1创建文件夹

//1创建文件夹
File dir = new File("f:\\test\\aaa");   //创建单个目录
File dir1 = new File("f:\\test\\bbb\\ccc");   //创建多个目录
if (!dir.exists()){
    System.out.println("创建单个目录:"+dir.mkdir());
}
if (!dir1.exists()){
    System.out.println("创建多个目录:"+dir1.mkdirs());
}

创建文件夹时,有两个方法 mkdir() 和 mkdirs()

mkdir 只能创建单级目录

mkdirs() 单级目录和多级目录都能创建

3.2删除文件夹

第一种方法:直接删除

//第一种方法:直接删除
dir1.delete();

删除目录时只能删除最里面的目录,并且如果目录中有文件的话,则不能删除该目录

第二种方法:使用jvm退出时删除

//第二种方法:使用jvm退出时删除
dir1.deleteOnExit();

 

3.3获取文件夹信息

//获取文件夹信息
System.out.println("获取文件夹的绝对路径:" + dir1.getAbsolutePath());
System.out.println("获取文件夹路径:" + dir1.getPath());
System.out.println("获取文件夹名称:" + dir.getName());
System.out.println("获取父目录:" + dir.getParent());
System.out.println("获取文件创建时间:" + new Date(dir.lastModified()));

image-20220727173311522

 

3.4判断

//判断
System.out.println("是否是文件夹:"+ dir1.isDirectory());
System.out.println("是否是隐藏文件夹:" + dir1.isHidden());

 

3.5遍历文件夹

获取某个文件夹中的内容

//遍历文件夹
File file = new File("f:\\test");
String[] str = file.list();
for (String strs:
     str) {
    System.out.println(strs);
}

image-20220727173827104

 

FileFilter 接口

文件过滤器

  • public interface FileFilter

    • boolean accept(File pathname)

  • 当调用File 类中的 listFiles() 方法时,支持传入FileFilter接口实现类,对获取文件进行过滤,只有满足条件的文件才可以出现在listFiles() 的返回值中

我们使用这个接口来过滤txt文件

//FileFilter 接口
System.out.println("---------FileFilter 接口---------");
File[] files = dir2.listFiles(new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        if (pathname.getName().endsWith("txt")){
            return true;
        }
        return false;
    }
});
for (File f:
     files) {
    System.out.println(f.getName());
}

image-20220727180016389

 

 

案例一:递归遍历文件夹

在文件夹中创建两个子文件夹和两个文件,并且在两个子文件夹中分别创建两个文件

要求把所有文件夹和文件都打印出来

//递归遍历文件夹
public static void listDir(File dir){
    File[] files = dir.listFiles();   //获取全部文件夹
    System.out.println(dir.getAbsolutePath());   //打印父目录
    if (files != null && files.length>0){    //如果这个文件夹不是空
        for (File f: files) {                  //遍历
            if (f.isDirectory()){             //判断是不是文件夹
                listDir(f);               //如果是文件夹,就递归
            }else{
                System.out.println(f.getAbsolutePath());         //如果是文件就打印
            }
        }
    }
}

 

image-20220727193235595

 

 

案例二:递归删除文件夹

删除上面打印的文件和文件夹

//递归删除文件夹
public static void deleteDir(File dir){
    File[] files = dir.listFiles();
    if (files != null && files.length>0){
        for (File f: files) {
            if (f.isDirectory()){
                deleteDir(f);
            }else{
                System.out.println(f.getAbsolutePath()+"删除:" + f.delete());
            }
        }
    }
    System.out.println(dir.getAbsolutePath() + "删除:" + dir.delete());
}

image-20220727195735967

 

 

Properties

  • Properties 是属性集合,继承了Hashtable,是线程安全的 集合

  • 特点:

    • 存储属性名和属性值

    • 属性名和属性值都是字符串

    • 没有泛型

    • 与流有关

  • 方法:

    • String getProperty(String key) //通过key来获取属性值

    • void list(PrintStream out) //将属性列表输出到指定的输出流

    • void load(InputStream inStream) //从输出流中获取属性列表

    • Object setProperty(String key,String value) //设值,调用Hashtable的put方法

package com.iosteam.file;
​
import java.util.Map;
import java.util.Properties;
import java.util.Set;
​
public class Demo18 {
    public static void main(String[] args) {
        //创建Properties集合
        Properties properties = new Properties();
        //添加数据
        properties.setProperty("username","zhangsan");
        properties.setProperty("age","18");
        System.out.println(properties);
        //删除数据
//        properties.remove("username");
//        System.out.println(properties);
​
        //遍历数据
        //1.keySet
        System.out.println("-----------keySet-----------");
        Set<Object> keySet = properties.keySet();
        for (Object o: keySet) {
            System.out.println((String)o+"======="+properties.getProperty((String)o));
        }
        //2.entrySet
        System.out.println("-----------entrySet-----------");
        Set<Map.Entry<Object,Object>> entry = properties.entrySet();
        for (Map.Entry<Object,Object> o:
             entry) {
            System.out.println(o);
        }
        //3.stringPropertyNames
        System.out.println("-----------stringPropertyNames-----------");
        Set<String> pronames = properties.stringPropertyNames();
        for (String pro: pronames) {
            System.out.println(pro + "======="+properties.getProperty(pro));
        }
​
​
    }
}

image-20220728094907396

  • 和流有关的操作

//4.和流有关的操作
//-----list-------
System.out.println("---------list----------");
PrintWriter pw = new PrintWriter("f://test//print");
properties.list(pw);
pw.close();

image-20220728094850588

 

//-------store方法,向store.properties保存数据-------
FileOutputStream fos = new FileOutputStream("f:\\test\\store.properties");
properties.store(fos,"注释");
fos.close();

image-20220728095841931

第一行为我们的”注释“,因为properties文件不允许输入中文

 

//--------load方法,从store.properties加载数据----------
System.out.println("--------store------");
Properties properties1 = new Properties();
FileInputStream fis = new FileInputStream("f:\\test\\store.properties");
properties1.load(fis);
fis.close();
System.out.println(properties1);

image-20220728100359499

 

 

posted @ 2022-07-28 10:08  GrowthRoad  阅读(22)  评论(0编辑  收藏  举报