关于IO流的一些简单理解以及整理

File类

File类是java.io包中很重要的一个类

File类的对象可以表示文件,还可以表示目录,在程序中一个File类对象可以代表一个文件或目录

File对象可以对文件或目录的属性进行操作,如:文件名、最后修改日期、文件大小等

File对象无法操作文件的具体数据,即不能直接对文件进行读/写操作

构造方法摘要

方法原型说明
File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例
File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例
File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例
File(URI uri)通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例
//在当前目录下创建一个与aaa.txt文件名相关联的文件对象
File f1 = new File("aaa.txt");
//指明详细的路径以及文件名,请注意双斜线或用反斜杠
File f2 = new File("D:\\Java\\Hello.java");
//指明详细的路径以及目录名,请注意双斜线
File f3 = new File("D:\\Java");

常用方法

list()将目录下的子目录及文件的名字,返回到String数组中
listFiles()将目录下的子目录及文件的实例返回到File数组中
isFile()判断是否为文件,是文件返回true,否则返回false
isDirectory()判断是否为目录,是目录返回true,否则返回false
getName()获得文件的名称
length()获得文件的长度(字节数)
createNewFile () throws IOException当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件
delete()删除此抽象路径名表示的文件或目录
toString()返回此抽象路径名的路径名字符串

输入输出

把电脑硬盘上的数据读到程序中,称为输入,即input,进行数据的read操作

从程序往外部设备写数据,称为输出,即output,进行数据的write操作

输入流与输出流

  • 流按输出的传输方向分为:

输入流:往程序中读叫输入流

输出流:从程序中往外写叫输出流

  • 所有输入流都是InputStream类或者Reader类的子类

​ 类名以InputStream结尾的类都是InputStream的子类。

​ 类名以Reader结尾的类都是Reader类的子类

  • 所有输出流都是OutputStream类或者Writer类的子类

​ 类名以OutputStream结尾的类都是OutputStream的子类。

​ 类名以Writer结尾的类都是Writer类的子类

字节流与字符流

  • 从数据流编码格式上划分为:字节流和字符流

  • InputStream和OutputStream的子类都是字节流(可以读写二进制文件,主要处理音频、图片、歌曲、字节流,处理单元为1个字节)

  • Reader和Writer的子类都是字符流

    ——主要处理字符或字符串,字符流处理单元为2个字节

    ——字节流将读取到的字节数据,去指定的编码表中获取对应文字

字节流常用类:字节输入流 FileInputStream

​ 字节输出流 FileOutputStream

字符流常用类:字符输入流 FileReader

​ 字符输出流 FileWriter

节点流与处理流

根据封装类型不同流又分为:节点流与处理流

节点流:

​ 如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流。

处理流:

​ 如果流封装的是其它流对象,称为处理流。

​ 处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法。

节点流常用类
字节输入流 FileInputStream
字节输出流 FileOutputStream
字符输入流 FileReader
字符输出流 FileWriter
处理流常用类
缓冲字节输出流 BufferedOutputStream
缓冲字节输入流 BufferedInputStream
缓冲字符输入流 BufferedReader
缓冲字符输出流 BufferedWriter

Print流

**Print 打印流:**只做输出没有输入, 打印流分为字节打印流和字符打印流

**PrintWriter:**字符打印流,print方法可以打印各种类型数据

PrintWriter特点:

  • 可以打印各种数据类型
  • 可以做字符流和字节流的转换
  • 可以直接向文件中写入数据

public class PrintWriterDemo {

    public static void main(String[] args) throws FileNotFoundException {
        PrintWriter out = new PrintWriter("E:\\demo.dat");
        //从服务器端 向 客户端  浏览器打印输出网页内容
        out.println(3);
        out.print("adsasdas");
        out.print("adsasdas");
        out.print("adsasdas");
        out.close();
    }
}

对象序列化

Java 的对象序列化将那些实现了 Serializable 接口的对象转换成一个字节序列(因此,只能使用 Stream 相关类进行操作),并能够在以后将这个字节序列完全恢复为原来的对象。只要对象实现了 Serializable 接口(该接口仅是一个标记接口,并不包括任何方法),对象序列化和反序列化通过以下两步实现:

  • 创建 OutputStream 对象,封装在 ObjectOutputStream 对象中,只需调用 writerObject 即可将对象序列化
  • 创建 InputStream 对象,封装在 ObjectInputStream 对象中,只需调用 readObject 即可将对象序列化
public class ObjectOutPutDemo {

    public static void main(String[] args) throws IOException {
        FileOutputStream out=new FileOutputStream("E:\\Object.txt");
        ObjectOutputStream object=new ObjectOutputStream(out);

        Date date=new Date();
        String str="hello";
        object.writeObject(str);
        object.writeObject(date);
        object.writeObject(new User("jim","3523525"));
        object.close();
    }
}

public class ObjectInPutDemo {

    public static void main(String[] args) throws IOException, ClassNotFoundException {
        FileInputStream in=new FileInputStream("E:\\Object.txt");
        ObjectInputStream object=new ObjectInputStream(in);
        String str=(String) object.readObject();//按照序列化的顺序反序列化
        Date date=(Date) object.readObject();
        User user=(User)object.readObject();
        System.out.println(user);
        System.out.println("str="+str);
        System.out.println("data="+date);
    }
}

public class User implements Serializable {
    private String name;
    private String password;
    private int age;

    public User(){

    }

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

    public User(String name, String password) {
        this.name = name;
        this.password = password;
    }
}

以上三个程序就是将对象序列化以及反序列化输出的表示结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值