IO流尚学堂知识点

File创建文件夹

创建文件会返回true,但不会创建

 mkdir():只创建目录最后一个文件夹,倘若最有一个文件夹已存在或目录前面的文件夹不存在则返回false

mkdirs():创建文件夹。若目录中的文件夹不存在,先创建目录中缺失的文件夹,再创建指定的文件夹,返回值表示是否创建成功。

File file = new File("d:\\404\\a.txt");
Boolean boolean = file.mkdir();

exists方法

判断资源是否存在,存在返回true,不存在返回false(既可以判断文件夹也可以判断文件)

File file = new File("d:\\sxt\\sxt.txt");
Boolean exists = file.exists();
if(exists){
    System.out.println("此文件已存在");
}else{
    System.out.println("此文件不存在");
}

创建空白文件

所创建的目录下不能出现同名文件夹或文件,否则会返回false

可以创建任何后缀名正确的文件,只不过所创建的文件为空白文件,无任何内容

file.createNewfile() 会抛出异常IOException,进行捕获即可

public static void main(String[] args) throws IOException {
        File file = new File("d:\\sxt\\sxt.txt");
        boolean newFile = file.createNewFile();
        System.out.println(newFile);
    }

重命名文件

file.renameTo(File)  利用剪切特性,把资源剪切后放回到源路径,起新名字,实现重命名。还可以通过此功能实现文件更换目录的要求

相同目录或不相同目录重命名都可

public static void main(String[] args) throws IOException {
        File file = new File("d:\\sxt\\sxt.txt");
        boolean b = file.renameTo(new File("d:\\sxt\\sxt666\\sxt777.txt"));
        System.out.println(b);//true
    }
 public static void main(String[] args) throws IOException {
        File file = new File("d:\\sxt\\sxt.txt");
        boolean b = file.renameTo(new File("d:\\sxt\\sxt666.txt"));
        System.out.println(b);//true
    }

删除文件(夹)

无法删除有内容的文件夹

public static void main(String[] args) throws IOException {
        File file = new File("d:\\sxt\\sxt.txt");
        boolean delete = file.delete();
        System.out.println(delete);
    }

查看目录中的内容

list() 返回值为目录中资源的名称。返回值类型String[]。数组长度和资源个数相同。如果是空文件夹返回为一个长度为0的数组对象。如果是文件夹不存在则返回null.

 public static void main(String[] args)  {
        File file = new File("d:\\PS");
        String[] list = file.list();
        for (String s : list) {//遍历数组
            System.out.println(s);
        }
    }

 

listFile()返回值为目录中资源的名称。返回值类型File[]。数组长度和资源个数相同。如果是空文件夹返回为一个长度为0的数组对象。如果是文件夹不存在则返回null.

public static void main(String[] args)  {
        File file = new File("d:\\PS");
        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1);
        }
    }

 

public static void main(String[] args) {
        File file = new File("d:\\PS");
        File[] files = file.listFiles();
        for (File file1 : files) {
            System.out.println(file1.getName());//只获取文件名字
        }
    }


 

输入流:读取 Input

输出流:写入 Output

  

FileInputStream、FileOutputStream是文件操作常用的两种流。借助这两个流实现文件的读取、文件输入和拷贝等功能

 FileInputStream 读

FileOutputStream 写

FileInputStream常用的方法

 FileOutputStream常用的方法

 从一个文件里面读取内容(无中文)

package file.homework;

import java.io.FileInputStream;
import java.io.IOException;

public class HomeWork03 {
    public static void main(String[] args) {
        FileInputStream fileInputStream = null;
        try {
            fileInputStream = new FileInputStream("d:\\a.txt");
            int read = 0;
            while((read = fileInputStream.read())!= -1){
                System.out.println((char)read);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                fileInputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

往一个文件内写入内容

倘若要添加内容的文件夹中没有此文件。执行代码后会创建此文件并执行添加内容。连文件夹都没有会报错

package file.homework;

import java.io.FileOutputStream;
import java.io.IOException;

public class HomeWork03 {
    public static void main(String[] args) {
        FileOutputStream fileOutputStream=null;
        try {
            fileOutputStream=new FileOutputStream("d:\\a.txt",true);//true表示添加的内容是以追加的方式
            String str = "ta是添加的内容";
            byte[] bytes = str.getBytes();
            fileOutputStream.write(bytes);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                fileOutputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }


    }
}

文件的拷贝FileInputStream,FileOutputStream

package file.homework;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class HomeWork03 {
    public static void main(String[] args) {
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            fileInputStream = new FileInputStream("d:\\test.png");
            fileOutputStream = new FileOutputStream("d:\\test_copy.png");
            byte[] bytes1 = new byte[1024];
            int read ;
            while((read = fileInputStream.read(bytes1))!= -1){
                fileOutputStream.write(bytes1,0,read);
            }

        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                fileOutputStream.close();
                fileInputStream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

字符输入流FileReader

 字符输出流FileWriter

通过 字符输出流FileWriter 字符输入流FileReader 不同文件的内容拷贝

将a.txt 的内容复制到 b.txt里面

package file.homework;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class HomeWork03 {
    public static void main(String[] args) {
        FileReader fileReader =null;
        FileWriter fileWriter = null;
        try {
            fileReader = new FileReader("d:\\a.txt");
            fileWriter = new FileWriter("d:\\b.txt");
            char[] chars = new char[1024];
            int readln;
            while((readln =fileReader.read(chars) )!=-1 ){
                fileWriter.write(chars,0,readln);
                //System.out.println(new String(chars,0,readln));
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                fileWriter.close();
                fileReader.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

缓冲流

 字节缓冲流 

 字符缓冲流

 通过字符缓冲输入输出流完成a.txt内容到b.txt的复制

package file.homework;

import java.io.*;

public class HomeWork03 {
    public static void main(String[] args) {
        BufferedWriter bufferedWriter =null;
        BufferedReader bufferedReader = null;
        try {
            bufferedReader =new BufferedReader(new FileReader("d:\\a.txt"));
            bufferedWriter= new BufferedWriter(new FileWriter("d:\\b.txt"));
            String str = null;
            while((str  = bufferedReader.readLine())!=null){//用于接受bufferedReader.readLine()的内容
                bufferedWriter.write(str);
                bufferedWriter.newLine();
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                if (bufferedWriter!= null){
                    bufferedWriter.flush();
                }
                if (bufferedReader!= null){
                    bufferedWriter.flush();
                }
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

序列化和反序列化

 

 

序列化

 反序列化

序列化 反序列化实例

创建Student类

package file.homework;

import java.io.Serializable;

public class Student implements Serializable {
    private String name;
    private int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

序列化

package file.homework;

import java.io.*;

public class HomeWork03 {
    public static void main(String[] args) {
        //序列化
        Student jack = new Student("jack", 3);
        try {
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("d:\\a.txt"));
            objectOutputStream.writeObject(jack);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
         

    }
}

文件内容

 

反序列化 

package file.homework;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;

public class HomeWork03 {
    public static void main(String[] args) {
        //反序列化
          try {
                  ObjectInputStream objectInputStream =new ObjectInputStream(new FileInputStream("d:\\a.txt"));
                  Student stu = (Student)objectInputStream.readObject();
                  System.out.println(stu);
                 
          }catch (IOException e) {
              throw new RuntimeException(e);
          } catch (ClassNotFoundException e) {
              throw new RuntimeException(e);
          }   
    }
}

输出

 

序列码

 倘若序列码是由JVM机自己给定的,当在执行完序列化之后,再在Student类中增加一条属性,并修改对应的构造器和toString方法。此时再执行反序列化时就会报错。

当如果序列码是由我们自己指定的,当在执行完序列化之后,再在Student类中增加一条属性,并修改对应的构造器和toString方法。此时再执行反序列化时就会输出新增加的属性,不过是为数据类型的默认值,因为再序列化时并未对其进行操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值