IO流

public class FileTest {

/*
1、如何创建File类的实例
public File(String pathname) 以pathname为路径创建File对象,可以是绝对路径或者相对路径,如果 pathname是相对路径,则默认的当前路径在系统属性user.dir中存储。
绝对路径:是一个固定的路径,从盘符开始
相对路径:是相对于某个位置开始
public File(String parent,String child) 以parent为父路径,child为子路径创建File对象。
public File(File parent,String child) 根据一个父File对象和子文件路径创建File对象

2、
相对路径:
绝对路径:

3、路径分隔符
windows:\
unix:/

*/
@Test
public void test1(){
//构造器1
File file = new File(“Hello.txt”);//相当于module 相对路径
File file1 = new File(“D:\he.txt”);//绝对路径 相对于某个路径下,指明的路径

//构造器2
File file3 = new File(“D:\“,”JavaFileTest”);

//构造器3
File file2 = new File(file3,”java.txt”);
}
}

File类的方法

File类的获取功能

  • public String getAbsolutePath():获取绝对路径
  • public String getPath() :获取路径
  • public String getName() :获取名称
  • public String getParent():获取上层文件目录路径。若无,返回null
  • public long length() :获取文件长度(即:字节数)。不能获取目录的长度。
  • public long lastModified() :获取最后一次的修改时间,毫秒值  public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组

对于文件目录的操作

  • public list[] list(); **获取指定目录下的所有文件或者文件目录的名称数组**
  • public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组

File类的重命名功能

  • public boolean renameTo(File dest):把文件重命名为指定的文件路径

File类的判断功能

  • public boolean isDirectory():判断是否是文件目录
  • public boolean isFile() :判断是否是文件
  • public boolean exists() :判断是否存在
  • public boolean canRead() :判断是否可读
  • public boolean canWrite() :判断是否可写
  • public boolean isHidden() :判断是否隐藏

File类的创建功能

  • public boolean createNewFile() :创建文件。若文件存在,则不创建,返回false
  • public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。 如果此文件目录的上层目录不存在,也不创建。
  • public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建 注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目 路径下。

File类的删除功能

  • public boolean delete():删除文件或者文件夹 删除注意事项: Java中的删除不走回收站。 要删除一个文件目录,请注意该文件目录内不能包含文件或者文件目


一、流的分类

  • 按操作数据单位不同分为:字节流(8 bit),字符流(16 bit)
  • 按数据流的流向不同分为:输入流,输出流
  • 按流的角色的不同分为:节点流,处理流

抽象基类

  • 字节流
    • InputStream
    • OutputStream
  • 字符流
    • Reader
    • Writer

节点流

  • FileInputStream(byte[] bbufs)
  • FileOutputStream(byte[] bbufs,0,len)
  • FileReader(char[] chars)
  • FileWriter(char[],0,len)

缓冲流

  • BufferedinputStream(byte[] bbufs)
  • BufferedOutputStream(byte[] bbufs,0,len)
  • BufferedReader(char[] chars)readline:一次读取一行,到文件末尾返回null
  • BufferedWriter(char[],0,len)

作用:提高了读写速度
方式:提供了一个8192大小的缓冲区

read()方法一次读取一个字符,括号里有东西就是一次读取括号里的变量,并且 返回读取长度
write()要么是你想写什么就写到括号里,要么是你想写什么变量,按照上面的格式输入三个参数

具体看idea IOStream BufferedTest

转换流
InputStreamReader;将一个字节输入流转换成字符的输入流——解码UTF-8
OutputStreamWriter:将一个字符的输出流转换成字节的输出流——编码gbk

对象流
用于存储和读取基本数据类型数据或对象的处理流。它的强大之处就是可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。

  • 序列化:用ObjectOutputStream(FileOutputStream)类保存基本类型数据或对象的机制

注意:写出一次就需要flush一次

  • 反序列化:用ObjectInputStream(FileInputStream)类读取基本类型数据或对象的机制

对象需要满足以下要求才可以序列化:
1、需要实现Serializable()接口
2、需要声明
private static final long serialVersionUID = 21324812153L ;
如果类没有显示定义这个静态常量,它的值是Java运行时环境根据类的内部细节自 动生成的。若类的实例变量做了修改,serialVersionUID 可能发生变化。故建议, 显式声明。
3、还需要保证其内部所有属性可序列化
4、不可以序列化static和transient修饰的成员变量

RandomAccessFile 类

  • RandomAccessFile 声明在java.io包下,但直接继承于java.lang.Object类。并 且它实现了DataInput、DataOutput这两个接口,也就意味着这个类既可以读也 可以写。
  • RandomAccessFile 类支持 “随机访问” 的方式,程序可以直接跳到文件的任意 地方来读、写文件
    • 支持只访问文件的部分内容
    • 可以向已存在的文件后追加内容
  • RandomAccessFile 对象包含一个记录指针,用以标示当前读写处的位置。 RandomAccessFile 类对象可以自由移动记录指针:
    • long getFilePointer():获取文件记录指针的当前位置
    • void seek(long pos):将文件记录指针定位到 pos 位置
  • 如果写出的文件内容已经存在,那么会对原有文件内容从头覆盖

构造器
public RandomAccessFile(File file, String mode)
public RandomAccessFile(String name, String mode)

创建 RandomAccessFile 类实例需要指定一个 mode 参数,该参数指 定 RandomAccessFile 的访问模式:

  • r: 以只读方式打开
  • rw:打开以便读取和写入
  • rwd:打开以便读取和写入;同步文件内容的更新
  • rws:打开以便读取和写入;同步文件内容和元数据的更新