File对象和IO流

目录

1.File对象

1.1file的介绍

1.2创建File对象

1.3增加操作

1.4删除操作

1.5修改操作

1.6查询操作

1.7经典题目: 用的方法的递归调用

2 IO流

2.1IO流介绍

2.2Writer字符输出

2.3Reader字符输入流


1.File对象

1.1file的介绍

File 类 就是当前系统中 文件或者文件夹的抽象表示     
通俗的讲  就是 使用File对象 来操作我们电脑系统中的文件或者文件夹
学习File类 其实就是学习 如果通过file对象 对系统中的文件/文件夹进行增删改查

1.2创建File对象

 public static void main(String[] args) {
        //创建一个File对象 并指定文件得路径  \转移字符串
        File file1 = new File("F:\\File\\aaa.txt");

        /*
           \\目录层级  在window系统下层级分割符为\  但是在linux和mac系统上分割符为 /
           我们得java代码是一种跨平台得语言。 我们得开发在window  但是我们项目得部署在linux.
           我们使我们得代码能在任意系统下来用。 我们有两种解决办法
           (1)第一种 因为window 兼容 / 和 \
         */
        File file2 = new File("F:/File/bbb.txt");


        // 第二种 File.separator根据当前代码所在得系统自动获取相应得分割符

        System.out.println(File.separator); // \因为我们当前在window下
        File file3 = new File("D:"+File.separator+"AAA"+File.separator+"ccc.txt");


    }

1.3增加操作

 //创建一个file对象,并指定文件的路径
        File file1 = new File("F:/File/aaa.txt");
        file1.createNewFile(); //创建相应的文件
        File file2 = new File("F:/File/bbb");
        file2.mkdir(); //创建目录,make directory 单层目录
        File file3 = new File("F:/File/ccc/ddd");
        file3.mkdirs();//创建多层目录
        File file4 = new File("F:/File/aaa");
        file4.createNewFile(); //根据调用的方法不同,创建不同的类型

1.4删除操作

public static void main(String[] args) throws InterruptedException {
        File file1 = new File("F:/File/aaa");
        file1.delete(); //删除文件
        File file2 = new File("F:/File/ccc");
        file1.deleteOnExit();//退出时删除
        Thread.sleep(10000); //休眠
        File file3 = new File("F:/File/bbb/b"); //删除空目录
        file3.delete();
    }

1.5修改操作

 public static void main(String[] args) throws IOException {
        File file1 = new File("F:/File/b.txt");
        file1.createNewFile();
        file1.setReadable(false); //设置该文件的权限为不能读
        file1.setWritable(false);//设置该文件不能写
        file1.setReadOnly(); //设置只读的权限
        file1.renameTo(new File("F:/File/c.txt")); //重命名
    }

1.6查询操作

 public static void main(String[] args) {
        File file1 = new File("F:/File/ccc/ddd/a.txt");
        String name = file1.getName();//得到文件名称
        System.out.println("name======="+name);
        String parent = file1.getParent(); //得到父级目录
        System.out.println("parent========"+parent);
        String path = file1.getPath(); //得到文件的路径名称
        System.out.println("path========="+path);
        boolean f1 = file1.isFile(); //判断该文件的对象是否为文件类型
        System.out.println("f1========="+f1);
        boolean f2 = file1.isDirectory(); //判断该文件的对象是否为目录类型
        System.out.println("f2========="+f2);
        File file2 = new File("F:/File");
        String[] list = file2.list(); //列出File目录下所有的子文件的名称
        System.out.println(Arrays.toString(list));
        File[] files = file2.listFiles(); //列出File目录下所有文件对象
        for(File f :files){
            System.out.println(f.toString());
        }
    }

1.7经典题目: 用的方法的递归调用

显示指定目录下的所有文件

public static void main(String[] args) {
        showAllFiles("F:/File");
    }

public static void showAllFiles(String path){
//使用传入的路径构建文件对象
    File file = new File(path);
    //判断文件是否存在 或者文件是否为目录
    if(!file.exists() || !file.isDirectory()){
        return;
    }
    //列出该目录下所有的文件对象
    File[] files = file.listFiles();
    //遍历数组
    for(File f:files){
        if(f.isDirectory()){
            System.out.println(f.getPath()+" <Dir>");
            showAllFiles(f.getPath());//继续调用本方法
        }else {
            System.out.println(f.getPath()+" ");
        }
    }
}

2 IO流

2.1IO流介绍

1. IO 表示有两个单词的缩写。
  I: Input 输入   O: Output 输出

2. IO的作用:就是对文件中的内容进行操作。
  输入: 读操作(读取文件的内容)   输出: 写操作(往文件中写内容)
 
3. IO流的分类:

 (1)根据流的方向:
    ---输入流: 程序可以从中读取数据的流。
    ---输出流: 程序能向其中写入数据的流。
    
 (2)根据流的单位:
    ---字节流: 以字节为单位传输数据的流
    ---字符流: 以字符为单位传输数据的流
 
 (3)根据功能
    ---节点流: 直接和文件进行交互
    ---处理流: 不是直接作用在文件上。
    
四个基本的流: 其他的流都是在这四个流的基础上进行扩展的
        字节输入流
        字节输出流
    
        字符输入流
        字符输出流

2.2Writer字符输出

 public static void main(String[] args) throws IOException {
        //字符输出流 ---指定对哪个文件(路径)进行写操作
        //true:表示允许追加内容到文件中
        Writer writer = new FileWriter("F:/File/aaa.txt",true);
        String str = "Hello World";
        writer.write(str);
        writer.flush(); //刷新流
        writer.close(); //关闭流资源
    }

2.3Reader字符输入流

 public static void main(String[] args) throws Exception {
        //创建字符输入流对象. 作用:就是读取aaaa.txt里的内容
        Reader reader = new FileReader("F:/File/aaa.txt");
        int count = 0; //表示读取字符的个数
        char[] cs = new char[10]; 每次读取到元素存入该数组中
        while((count = reader.read(cs))!=-1){
            String str = new String(cs,0,count);
            System.out.println(str);
        }
        reader.close();
    }

2.4文件内容复制

 @Test
    public void test1() throws IOException {
        //1.创建一个字符输入流
        FileReader fr = new FileReader("F:/SSS/a.txt");
        //2.创建一个字符输出流
        FileWriter fw= new FileWriter("F:/SSS/b.txt");
        int count = 0;
        char[] cs = new char[10];
        while((count = fr.read(cs))!=-1){
            fw.write(cs,0,count);
        }
        fw.close();
        fr.close();
    }

3.字节流

3.1字节输出流--OutputStream

它可以对任意文件进行操作,对文件进行输出操作。以字节为单位。 它是所有字节输出流的父类,FileOutputStream

 //测试字节输出流
    @Test
    public void testOutStream() throws IOException {
        OutputStream os = new FileOutputStream("F:/SSS/c.txt");
        String str = "asdfd";
        byte[] bytes = str.getBytes();
        os.write(bytes);
        os.flush();
        os.close();
    }

3.2字节输入流--InputStream

它可以对任意文件进行读操作 ,以字节为单位,它是所有字节输入流的父类,子类有FileInputStream

@Test
    public void testInputStream() throws IOException {
        InputStream is = new FileInputStream("F:/SSS/c.txt");
        int count = 0; //读取到的个数
        byte[] bytes = new byte[10];
        while((count = is.read(bytes))!=-1){
            //把byte数组转换为字符串
            String str = new String(bytes,0,count);
            System.out.println(str);
        }
        is.close();
    }

3.3使用字节输入和输出流完成文件的复制

 @Test
    public void testCopy() throws IOException {
        //创建字节输入流
        InputStream is = new FileInputStream("F:/SSS/a.txt");
        //字节输出流
        OutputStream os = new FileOutputStream("F:/SSS/b.txt");
        byte[] bytes = new byte[10];
        int count = 0;
        while((count = is.read(bytes))!=-1){
            os.write(bytes,0,count);
        }
        is.close();
        os.close();
    }

4 缓存流

     缓存流是在基础流[InputStream OutputStream Reader Writer]之上 添加了一个缓存池功能.
BufferInutStream  BufferOutputStream BufferReader  BufferWriter 提高IO的效率,降低IO的次数。

 @Test
    public void TestBuffer() throws Exception {
        OutputStream out = new FileOutputStream("F:/SSS/bbb/b.txt");
        BufferedOutputStream bos = new BufferedOutputStream(out); //缓存流要作用再基础流上
        String str = "asdsfghjklgf";
        byte[] bytes = str.getBytes();
        bos.write(bytes); //因为你写的内容 暂时放入缓存池中  并没有直接放入文件中。 所以文件中没有你的内容。
        bos.close();
    }

5.对象流

 //存档  序列化:
    @Test
    public void testObjectStream() throws Exception { 
        OutputStream out = new FileOutputStream("F:/SSS/aaa/a.txt");
        //对象输出流
        ObjectOutputStream oos = new ObjectOutputStream(out);
        //使用对象输出流调用输出方法 输出的类对象 该类必须实现Serializable 序列化接口
        Role r= new Role("夏侯","3段",2,"独眼");
        oos.writeObject(r);
        oos.close();
    }
    //测试 读档  反序列化:
    @Test
    public void testObectStream2() throws Exception {
        InputStream input = new FileInputStream("F:SSS/aaa/a.txt");
        ObjectInputStream ois = new ObjectInputStream(input);
        Object o = ois.readObject();
        System.out.println(o);
        ois.close();
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值