File

1、File类的一个对象,代表文件或者一个文件目录(俗称文件夹)

  • File file = new File(“a.txt”);

2、路径分割符:

  • Windows下的分隔符:\和Linux下/可以使用File.separatorChar替代

3、关于File创建实例的3钟方式:

  1. File(String filePath);
  2. File(String parentPath,String childPath);
  3. File(File parentFile,String childPath);

代码:File创建实例的3种方法

4、File的方法:

  • LastModified():获取最后一次修改的时间,毫秒值
  • list():获取指定目录下所有文件或者文件目录的名称数组(获取的是文件名)
  • listFiles():获取指定目录下所有的文件或者文件目录的File数组(获取的是绝对路径)
  • renameTo(File file):这个方法表示将文件剪切,并且可以修改名称为file。
  • isDirectory():判断是否是目录
  • isFile():判断这个是否是文件
  • exists():判断是否存在
  • createNewFile():创建一个新的文件
  • delete():删除一个文件
  • mkdir():创建文件目录,如果此文件存在不创建,只创建单个文件
  • mkdirs():创建文件目录,如果此文件目录存在不创建,如果不存在就创建该目录。
  • length():获取文件的大小,以字节的方式返回长度。

代码:文件方法的使用

5、IO流以操作数据单位不同分为:

  1. 字节流(除文本之外可以进行读取写入,文本不能再控制台输出读取。)
  2. 字符流(只有文本可以进行读取写入)

6、流的分类
在这里插入图片描述
7、流的体系结构
在这里插入图片描述8、字符的读取写入:

  1. FileReader(File file):表示创建一个文件的读取对象。可以通过read()读取数据。
  2. FileWriter:输出操作,对应的File可以不存在,如果不存在,在输出的过程中,会自动创建此文件,如果存在,就是对该文件进行操作。
          FileWriter(File file) : 表示对原有file的覆盖操作,
          FileWriter(File file,true): 表示对原有file的追加内容

代码:字符流读取和写入代码

9、字节流:

  • FileInputStream:输入流,从文件中读取数据到控制台
        read():读取单个字节,当没有读取到数据时,返回-1
        read(byte[] data):读取多个字节存储到data数组中,当读取到数组时,返回数据的长度,当没有读取到数据时,返回-1.
        read(byte[] data,int off,int len):表示读取len个字节存储到data中,数据从data的off位置开始存储,
        代码:read方法使用代码
  • FileOutputStream:输出流,从控制台输出数据到文件。

代码:字节流的使用

10、转换流:提供字符流和字节流之间的转换

  • InputStreamReader:将一个字节的输入流转换为字符的输入流
  • OutputStreamWriter:讲一个字符的输出流转换为字节的输出流。

在这里插入图片描述代码:转换流代码

11、标准的输入、输出流

  • System.in:标准的输入流,默认从键盘输入
  • System.out:标准的输出流,默认从控制台输出
  • System类的setIn(InputStream is ) / setOut(PrintStream ps) 方式重新指定输入和输出流
  • 打印流:将原本输出到控制台的信息,重新定义位置到其它地方。
  • PrintStream
  • PrintWriter

代码:打印流和输入流的代码

12、数据流(数据流写入文件,只能使用数据流读取文件。)

  • DataInputStream 和 DataOutputStream
  • 作用:用于读取或写出基本数据类型的变量或字符串。

代码:数据流读取和写入

13、对象流:用于存储和读取基本数据类型数据或对象的处理流,它的强大之处在于可以将java中的对象写入到数据源中,也能把对象从数据源中还原回来。实现对象流的对象条件要满足序列化。

  13.1、对象流的序列化:

  • 对象序列化机制:允许吧内存中的java对象转换成平台无关的二进制流,从而输到另一个网络节点。当其他程序获取了这种二进制流,就可以恢复成原来的java对象。
  • 序列化的好处在于可将任何实现了Serializable接口的对象转化为字节数据,使其在保存和传输时可被还原。

  13.2、序列化需要

  • 1、继承Serializable,
  • 2、同时要定义一个默认的属性:public static final long serialVersionUID = 12456; 数字可以自己随便定义。
  • 3、除了当前的类需要实现Serializable接口外,还必须保证其内部所有属性也必须是可序列化的。(默认情况下,基本数据类型可序列化)
  • 4、序列化需要注意的事项:
        4.1:序列化和反序列化 对象版本要一致(属性名,属性个数等等都要一致)
        4.2:要序列化多个对象用一个ObjectOutputStream对象writeObject多次即可
    或者把多个对象放入list等集合对象中再writeObject一次即可readObject反序列化得到的对象也是集合对象
        4.3:一定要在多个ObjectOutputStream对象中写多个对象情况怎么反序列化?文件追加模式时会默认加4个字节的换行符 字符,这样反序列化会失败,因此在序列化时,添加的第二个对象开始就需要去除这4个字节。
         long pos = 0;
         pos = os1.getChannel().position() - 4;
         os1.getChannel().truncate(pos);
        oos2.writeObject(users2);
    代码:序列化注意事项代码

  13.3、对象流的方法:

  • ObjectInputStream:
  • ObjectOutputStream:

代码:对象流使用

14、随机存取文件流:
  RandomAccessFile直接继承于java.lang.Object类,实现了DataInput和DataOutput接口
  RandomAccessFile既可以作为一个输入流,又可以作为一个输出流。

14.1、public RandomAccessFile(File,String mode);

  mode表示访问模式:

  • r:只读方式打开
  • rw:打开以便读取和写入
  • rwd:打开以便读取和写入,同步文件内容的更新(发送异常也会保存发生异常前的信息)
  • rws:大爱以便读取和写入;同步文件内容和元数据的更新。

14.2、方法:

  • seek(n):把指针放到index=n的位置

代码:随机存取文件流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值