建立测试框架:
1.项目中创建一个文件夹,比如lib
2.复制junit的jar文件到lib目录下
3.项目右键—>open module settings—>dependencies—>点击+,jars and directories—>选择刚才创建的lib文件夹
IO:
(1)网络IO
(2)本地IO
特性:
1.实质是数据在不同设备间流转
2.只能处理一次(读取操作后的部分就没有了)
3.使用完毕要关闭(反向关闭)
流
在 Java中所有数据都是使用流读写的。流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象流的划分.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象
流的类型划分:
1.输入/输出(与观测角度有关):Input/Output
输入就是将数据从各种输入设备(包括麦克风,扫描器,键盘,鼠标等)中读取到内存中。
输出则正好相反,是将数据写入到各种输出设备(比如显示器、磁盘等)。
2.字节/字符流:
字节流:字节型二进制数据 Stream
字符流:字符型文本数据 Writer输出字符流 Reader输入字符流
转换流:字节流和字符流之间需要通过转换流转换 InputStreamReader(输入转换) OutputStreamWriter输出转换
输入:
FileInputStream 从文件系统中的某个文件中获得输入字节。
FileInputStream 用于读取诸如图像数据之类的原始字节流.
FileInputStream(File file)
通过打开与实际文件的连接创建一个FileInputStream,该文件由文件系统中的File对象file命名
FileInputStream(String name)
通过打开与实际文件的连接来创建一个FileInputStream,该文件由文件系统中的路径名name命名。
输出:
文件输出流是用于将数据写入到输出流 File 或一个 FileDescriptor 。 文件是否可用或可能被创建取决于底层平台。
特别是某些平台允许一次只能打开一个文件来写入一个 FileOutputStream (或其他文件写入对象)。 在这种情况下,如果所涉及的文件已经打开,则此类中的构造函数将失败。
FileOutputStream(File file)
创建文件输出流以写入由指定的File对象表示的文件。
FileOutputStream(String name)
创建文件输出流以指定的名称写入文件。
字节缓冲流 BufferedInputStream 和 BufferedOutputStream
为什么需要有缓冲流?
答:当我们用read()读取文件时,每读一个字节,访问一次硬盘,效率很低 。文件过大时,操作起来也不是很方便。因此我们需要用到buffer缓存流,当创建buffer对象时,会创建一个缓冲区数组。当我们读一个文件时,先从硬盘中读到缓冲区,然后直接从缓冲区输出即可,效率会更高。
BufferedInputStream 为另一个输入流添加了功能,即缓冲输入和支持 mark 和 reset 方法的功能。 当创建 BufferedInputStream 时,将创建一个内部缓冲区数组。
当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重填充,一次有多个字节。 mark 操作会记住输入流中的一点,并且 reset 操作会导致从最近的 mark 操作之后读取的所有字节在从包含的输入流中取出新的字节之前重新读取.
BufferedInputStream(InputStream in)
创建一个 BufferedInputStream 并保存其参数,输入流 in ,供以后使用。
BufferedInputStream(InputStream in, int size)
解释并保存其参数,输入流 in ,供以后使用。
该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。
BufferedOutputStream(OutputStream out)
创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
BufferedOutputStream(OutputStream out, int size)
创建一个新的缓冲输出流,以便以指定的缓冲区大小将数据写入指定的底层输出流。
3.文件流;File
文件的相对路径和绝对路径
绝对路径:全路径(E:\C语言项目\java web2\Test23\data\s.txt).
相对路径:./(当前目录),…/(上一级目录)(data\s.txt)
文件操作的工具类
方法 说明
public boolean exists() 测试指定路径中文件或者目录是否存在
public boolean isDirectory() 判定一个文件是目录
public boolean isFile() 判定是否是文件
public boolean delete() 删除文件
public boolean createNewFile() 创建一个新文件
throws IOException
File类常用方法-目录操作
方法 解释
public boolean mkdir() 创建一个空目录
public boolean mkdirs() 创建目录(无论有多少级父目录,都会创建)
public String getParent() 取得父路径
public File getParentFile() 取得父File对象
File类常用方法-文件属性操作
方法 解释
public long length() 取得文件大小(字节)
public long lastModified() 最后一次修改日期
File类常用方法-其他操作
idea项目在idea中的编译路经:
idea中文件位置—>右击文件名—>Show In Explorer
文件相关方法使用及递归打印目录
class/classLoader获取资源或IO流
项目中一般使用getClassLoader().getResourceAsStream()通过相对路径获取IO流
4.Scanner中包含流
5.PrintWriter:打印数据到某个流对象
应用场景:PrintWriter可以应用将输出流打印输出到其他输出流,如:字符串获取异常堆栈信息,可以结合PrintWriter\StringWriter来获取
6.StringWriter:字符串输出流
7.缓冲流:Buffered
特殊的IO操作类\工具类
Scanner:接收输入
File:文件类
Files:文件操作的工具类
Class/ClassLoader对象.getResourceAsStream() 通过相对获取输入流
序列化与反序列化
什么是序列化和反序列化
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
这两个过程合起来也叫深拷贝;