【javaSE】IO流

一个File 类的对象,可以表示计算机硬盘上一个具体的文件或目录(文件夹)

通过File类的对象 来获取文件/目录的相关信息(例如创建时间,是否可写…),

但是不能读取文件中的内容

File f=new File(pathname:“E:/a.txt”);

File f1 = new File (pathname:“E:/a”);//表示E盘中的a 文件夹

Sout(f. canWrite());  //返回文件是否可以写入

  Sout(f.exists());   //判断文件/目录是否存在

  Sout(f.getAbsoluteFile()); // 获取文件绝对地址

  Sout(f.isHidden());  //返回文件/目录是否是隐藏模式

  Sout(f.isDirectory());  //判断是否是目录

Sout(f.isFile());  // 判断是否是文件

  Sout(f.lastModidied()); //返回文件最后一次修改的时间(long 类型的 毫秒值)

Sout(new Date(1659435531L)); //把long类型的时间 转换为Date对象

  Sout(f.getName());  //获取文件名

 Boolean res = f.createNewFile(); // 创建文件

   Sout( f.delete());  //删除文件

 File f = new File(“E:/aa”);

  f.mkdir(); //只能创建单级目录

  f.delete(); // 也可以删除文件夹的,但是要求文件夹中没有其他的内容

 File f = new File (“E:/aa//bb/cc”);

  f.mkdirs(); //可以创建多级目录

f.length(); //获取到的是文件的字节数,一个英文字母占一个字节,在utf-8编码表中一个汉字占3个字节

File f = new File(“E:/a”);

 String[] Strings = f.list(); //获取到指定目录下一级所有文件/目录的名字(String)

 For(string s : strings){

   Sout(s);

}

 File [ ] files = f.listFiles();

 For(File file : files){

   If(file.isDirectory){

    

}

   file.delete();

}

输入和输出 是相对于程序而言的

Java中还提供了许多的类,一些负责从硬盘上读文件(输入),

一些负责将程序中的数据写(输出)到目标位置,

这些类形象的成为流(管道)

字节:计算机最小存储单位是字节,电脑上所有的文件最终都是以字节的 形式存储到硬盘的

      例如:图片、视频、音频……

字符:文字,底层还是字节 例如:中à 20013à3个字节

    字符流  以字符为单位进行读写操作  底层会将原始的字节转为字符

    字符流只能读取,纯文本文件(只能写字符,不能有其他内容)

字节流:一次读写操作以字节为单位

输入流:

InputStream

文件输入字节流: FileInputStream

输出流:

OutputStream

文件输出字节流:FileOutputStream

 

  

字符流:一次读写操作以字符为单位(一个汉字占3个字节 一次可以直接读到一个字符)

输入流:

Reader

输出流:

Write

节点流与处理流

节点流: 原始的流,直接用来操作文件(数据),例如 FileInputStream

处理流:;在节点流的基础上,对读到数据进行额外的二次处理

Reader 首先想到字符流

 

PrintWriter

   单向的输出,

   后面再javaEE(服务器端开发)中,可以使用PrintWriter从后端程序响应数据

在javaweb项目中,服务器端向客户端响应数据以打印流的方式响应.

PrintWriter printWriter = new PrintWriter(“E:/index.html”);

     printWriter.write(“<h1>一级标签<h1>”);

printWriter.close();

对象输入输出流:

有时候,需要将运行中的对象信息持久保存起来,因为对象在内存中程序如果中止 对象信息就不存在了

将对象信息输出到文件的过程,称为对象的序列化,使用ObjectOutoutStream完成(处理流)

将对象信息从文件中输入到java程序的过程,称为对象反序列化,使用的ObjectInputStream

对象的反序列化,会在内存中创建新的对象保存数据,所以,也是java中创建对象的一种方式

String s = new String (“abc”);

Date date = new Date  ();

  

  FileOutoutStream  out = new FileOutputStream(“E:/obj.txt”);

  ObjectOutputStream  outPutStream = new ObjectOutputStream(out);

   ~.writeObject(s)

  ~.writeObject(data);

  ~.flush();

  ~.close();

当我们把一个类的对象用输出流向外输出时,要求这个类必须要实现序列化接口,

否则会报错,java.io.NotSerializableException

Implements Serializable

一旦一个类实现了Serializable 接口,会自动的为每个生成一个序列化编码(唯一的)

虽然实现Serializable接口,可以生成一个序列化id号,但是一旦类信息发生了修改,序列化编号就会变

如果重新输入对象时,两次的序列化版本号就不一致了

解决办法:

  显示的在类中生成一个序列化版本号

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值