Java第八章_IO流

IO流

File类

在程序中需要对计算机硬盘上的文件进行操作,如何在程序中表示硬盘上的一个文件? --file

File类的对象可以表示文件,目录.

File对象可以对文件或目录的属性进行操作.(文件名,最后修改时间,文件大小等)

无法操作文件的具体数据(读/写)

File(String pathname) 指定文件(或目录)名和路径创建文件对象.

File f1 = new File("abc.txt");
File f2 = new File("D:\\Java\\Hello.java");
File f3 = new File("D:\\Java");
String a = "D:\\Java"; //或String a = "D:/Java";
File f4 = new File(a,"test.txt");

一些常用方法:

在这里插入图片描述

canRead()	//判断文件是否可读

canWrite()	//判断文件是否可写

canExecute()	//判断文件是否可执行

isAbsolute()	//判断是否是绝对路径

isHidden()	//判断文件是否为隐藏文件

isDirectory()	//判断是否为目录

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

exists()	//判断文件是否存在

length()	//获取文件的长度(字节数)

lastModified()	//获取文件的上次修改时间

getAbsolutePath()	//获取绝对路径

getName()	//获取文件的名称
File f = new File("E:/demo");
f.mkdir();	//创建名称为demo的目录(文件夹)
f.delete();	//删除目录时,需目录为空

遍历目录

File f = new File("E:/api");

File []fs = f.listFiles();

for(File fo : fs){

System.out.println(fo);

}

输入及输出的概念

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

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

输入流与输出流

流按着数据的传输方向分为:
输入流:往程序中读叫输入流。
输出流:从程序中往外写叫输出流。
所有输入流都是InputStream类或者Reader类的子类。
类名以InputStream结尾的类都是InputStream的子类。
类名以Reader结尾的类都是Reader类的子类。
所有输出流都是OutputStream类或者Writer类的子类。
类名以OutputStream结尾的类都是OutputStream的子类。
类名以Writer结尾的类都是Writer类的子类。

字节流与字符流

从数据流编码格式上划分为字节流字符流.
InputStream和OutputStream的子类都是字节流,可以读写二进制文件,主要处理音频、图片、歌曲、字节流,处理单元为1个字节。
Reader和Writer的子类都是字符流,主要处理字符或字符串,字符流处理单元为2个字节。字节流将读取到的字节数据,去指定的编码表中获取对应文字。

节点流与处理流

根据封装类型不同流又分为节点流处理流
节点流:如果流封装的是某种特定的数据源,如文件、字符串、字符串数组等,则称为节点流。
处理流:如果流封装的是其它流对象,称为处理流。处理流提供了缓冲功能,提高读写效率,同时增加了一些新的方法。

Print流

只做输出没有输入.

打印流分为字节打印流字符打印流.

PrintWriter字符打印流.

print方法可以打印各种类型的数据.

对象输入输出流

主要用于写入对象信息和读取对象信息.

对象信息一旦写到文件上,那么对象的信息就可以做到持久化了.

对象序列化

对象的寿命通常随着生成该对象的程序的终止而终止.

输出对象信息到指定文件,长久保存,这个过程为对象的序列化.

//对象序列化
        FileOutputStream in = new FileOutputStream("D:/temp.obj");
        ObjectOutputStream objin = new ObjectOutputStream(in);
        Date date = new Date();
        String str = "abc";
        User u = new User("小红","111",4);
        objin.writeObject(date);
        objin.writeObject(str);
        objin.writeObject(u);
//对象反序列化
        FileInputStream in = new FileInputStream("D:/temp.obj");
        ObjectInputStream objin = new ObjectInputStream(in);
        Date date = (Date)objin.readObject();
        String str = (String)objin.readObject();
        User u = (User)objin.readObject();
        System.out.println(date);
        System.out.println(str);
        System.out.println(u);
public class User implements Serializable {
    private static final long serialVersionUID = -50632779358220372L;
    public String userName;
    public String password;
    public /*transient*/ int age; //transient  被修饰的属性不被序列化

    public User(String userName, String password, int age) {
        this.userName = userName;
        this.password = password;
        this.age = age;
    }

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

如果实现Serializable接口,不显示的生成序列号版本id号会自动生成.但是类的信息一旦改变,序列号id也会随之改变,也可以显示的声明创建id号.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值