目录:

IO流

路径&路径分隔符:

File方法

文件本身操作(文件创建删除):

例子:创建文件

例子:删除文件

IO流原理

文件读取案例:

文件读取案例2:

文件写案例1:

文件读入写出案例:

字节流Stream输入输出案例:

为什么使用数组:

缓冲流的使用案例:

转换流(属于字符流)

标准输入输出流(了解):

打印流(了解):

数据流(了解):

对象流:

序列化反序列化案例:

随机存取文件流

NIO2(了解)


本节的所有代码都在这里:这里

位于javalearn的filelearn中

 

IO流

File类的一个对象代表一个类或者一个文件目录

File声明在java.io包下。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

 

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

路径&路径分隔符:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

File方法

需要注意的是:new File()是不会创建一个新的文件的,只是在内存中创建对应的对象。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

文件本身操作(文件创建删除):

未对文件内部操作

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

例子:创建文件

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

例子:删除文件

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

IO流原理

我们是站在程序的角度上看输入和输出。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

字符流:常用于文本文件。

字节流:常用于图片,视频。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

流的使用步骤:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

文件读取案例:

注意读入需要文件本身存在!!!

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

上述代码只是代码主体,但是如果使用throws方法进行异常处理,如果在关闭前出现了异常,整段代码最终就不会关闭,容易造成内存泄漏,所以我们需要使用try-catch-finally方法进行异常处理。所以我们更改为下面代码:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

但是这段代码还是有问题:问题在于如果我们创建了一个fr的对象之后,在new的时候出现了异常,也就是没有成功创建对象,最后我们在关闭fr时就会出现空指针问题。所以为了解决这个问题,我们需要修改finally中的方法:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

文件读取案例2:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

文件写案例1:

没有的文件会直接自动创建

写操作覆盖整个文件(缺省)。如果修改为true就表示不覆盖,直接在后面写。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

 

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

文件读入写出案例:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

字节流Stream输入输出案例:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

为什么使用数组:

如果每次存取一个祖字符,这样交互产生的开销会非常大。这个数组就相当于组成原理中的缓存的概念,取一个合适的大小最终再一起读或者取。但是不能太大否则内存消耗过大。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

上述的四种方式在实际操作过程中用的很少,原因在于这个方法效率不高,一般来说我们都会使用缓冲流。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

注意处理流是不可以直接创建的,需要在节点流的基础上使用

缓冲流的使用案例:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

使用了缓冲流之后再数组同为10时:花费时间为58.如果不适用缓冲流,如上图所示时间为6714.

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

转换流(属于字符流)

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

转换流案例:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

标准输入输出流(了解):

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

打印流(了解):

只有输出流

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

数据流(了解):

用于持久化基本数据类型的变量或者字符串

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

例子:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

读取数据的顺序需要和当初写入文件的顺序相同。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

对象流:

数据流没法存储相应的对象,所以产生了对象流。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

对象的序列化:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

详细说明上述三种问题:

1.注意一个自定义的类如果能够序列化我们需要这个对象实现Serializable这种接口称之为标识接口,没有方法。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

其次我们需要一个标识***

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

2.就是说如果不加这个版本***,我们要是修改了序列化之后的自定义类,很有可能会在反序列化的时候出现异常。

3.如果我们的自定义类中还有其他的自定义类,但是这个其他的自定义类没有声明为可序列化的也会导致错误出现。

4.补充知识:如果成员变量使用的是static或者是transient修饰,则不能序列化。会出现无法保存的问题(transient表示不能序列化这个属性)

序列化反序列化案例:

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

随机存取文件流

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

写文件的时候会从头开始进行覆盖。

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化) 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

NIO2(了解)

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

NIO是JDK7之前的,NIO2为JDK7之后的

 不是太细的java自学笔记进阶篇7(p577-618)(IO,字节流,字符流,对象流,序列化,反序列化)

 

 

 

 

相关文章:

  • 2021-12-17
  • 2021-10-28
  • 2022-01-09
  • 2021-06-23
  • 2022-12-23
  • 2021-11-07
  • 2021-11-13
  • 2021-12-04
猜你喜欢
  • 2021-12-04
  • 2022-12-23
  • 2021-08-24
  • 2022-12-23
  • 2021-06-07
  • 2022-01-13
  • 2021-07-18
相关资源
相似解决方案