JavaEE_day_21_File类、序列化流、Properties

目录

  1. 数据流
  2. 对象流
  3. File类

1.数据流

为了方便地操作Java语言的基本数据类型和String的数据,可以使用数据流。
里面新添加很多有关数据类型与字符串的方法

boolean readBoolean()  
char readChar()  
double readDouble()  
long readLong()
String readUTF()
byte readByte()  
float readFloat()  
short readShort()  
int readInt()
void readFully(byte[] b)
  • 代码演示
  try (
    FileOutputStream fos = new FileOutputStream("D:/user.txt");
    //创建数据流输出对象
    DataOutputStream oos = new DataOutputStream(fos);
    FileInputStream fis = new FileInputStream("D:/user.txt");
    //可以把缓冲区的对象传进数据流
    BufferedInputStream bis = new BufferedInputStream(fis);
    //创建数据流输入对象
    DataInputStream ds = new DataInputStream(bis);
    ) {
   long start = System.currentTimeMillis();
//   oos.writeUTF("hhhhhhhhh132456hhhhhhhhhhh");
   //会转成ASC码对应字符显示在文件中
   oos.writeInt(123);
   oos.flush();
   System.out.println(ds.readUTF());
   long end = System.currentTimeMillis();
   System.out.println(end- start);

2.对象流

  • 之前我们都是把数据放到硬盘中,对象是在内存中的,从来没有把对象放到过硬盘中
    但是, 硬盘中的数据是可以持久化的(长期保存) , 但是内存中不同,比如关机之后 就没了.
  • 而有时候我们的对象也是需要长期保存的,所以出现了序列化技术,就是为了把对象持久化保存到硬盘
  1. 第一步
    将对象实现Serializable接口
class User implements Serializable
  1. 第二步(序列化)
User u = new User(true);
  try (FileOutputStream fos = new FileOutputStream("D:/user");
    ObjectOutputStream oos = new ObjectOutputStream(fos);) {
   //将对象写入对应地址
   oos.writeObject(u);
   oos.flush();
  1. 第三步(反序列化)
try (
    FileInputStream fis = new FileInputStream("D:/user");
    ObjectInputStream ois = new ObjectInputStream(fis);
    ){
   // 读取,返回值为Object,需要转换类型
   User user =(User) ois.readObject(); 
   System.out.println(user);
//   user.show();
   System.out.println(user.isPos());
  1. 如果不加UID,每次更改User类,都需要重新序列化,否则反序列化会报错
    目的就是序列化对象版本控制,一旦反序列化时,版本不对应会抛出InvalidClassException

//在对象类中写入以下代码

//固定外存中对象的uid属性, 序列化,反序列化都要固定,这样更改对象属性时才不会报错
 private static final long serialVersionUID = 1L;
  1. transient 使用该修饰符修饰,则该属性不会被序列化

3.File类

  • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。
    如果需要访问文件内容本身,则需要使用输入/输出流。
    想要在Java程序中表示一个真实存在的文件或目录,那么必须有一个File对 象,但是Java程序中的一个File对象,可能没有一个真实存在的文件或目录。


获取功能:

Ø  public String getAbsolutePath():获取绝对路径

Ø  public String getPath() :获取路径

Ø  public String getName() :获取名称

Ø  public String getParent():获取上层文件目录路径。若无,返回null

Ø  public long length() :获取文件长度(即:字节数)。不能获取目录的长度。

Ø  public long lastModified() :获取最后一次的修改时间,毫秒值

Ø  public String[] list() :获取指定目录下的所有文件或者文件目录的名称数组

Ø  public File[] listFiles() :获取指定目录下的所有文件或者文件目录的File数组

重命名功能:

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

判断功能:

Ø     public boolean isDirectory():判断是否是文件目录

Ø  public boolean isFile() :判断是否是文件

Ø  public boolean exists() :判断是否存在

Ø  public boolean canRead() :判断是否可读

Ø  public boolean canWrite() :判断是否可写

Ø  public boolean isHidden() :判断是否隐藏

创建删除功能:

Ø     public boolean
createNewFile() :创建文件。若文件存在,则不创建,返回false

Ø  public boolean mkdir() :创建文件目录。如果此文件目录存在,就不创建了。
如果此文件目录的上层目录不存在,也不创建。

Ø  public boolean mkdirs() :创建文件目录。如果上层文件目录不存在,一并创建
注意事项:如果你创建文件或者文件目录没有写盘符路径,那么,默认在项目
路径下。
public boolean delete():删除文件或者文件夹

遍历该目录下所有的文件(叶子文件)

public static void show(File file) {
  // 判断是否是叶子文件
  if (file.isFile()) {
   System.out.println(file.getName());
   //结束此方法的运行,开始下一个递归方法
   return;
  }
  //输出此目录下的所有文件
  File[] files = file.listFiles();
  //输出文件时,一旦有目录就继续寻找子文件,没有就目录运行show后就可以打印出来
  for (File file2 : files) {
   show(file2);
  }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值