Java小白的第29&30&31课一一IO流

IO流(文件流)

  • 什么是IO流
    • 主要针对磁盘文件及文件夹的操作,新建、删除、修改等等操作

1. File 文件类

  1. 包: Java.io
  2. public Class File extends Object implements Serializable, Comparer<File>
  3. 文 件 \color{#ff0036}{文件} 目 录 路 径 名 \color{#ff0036}{目录路径名} 的抽象表示形式
  4. 常用的构造方法: File(String pathname) 通过给定的路往名来创建一个新的File实例。
  5. 常用方法:
返回值用法作用
booleancreateNewFile()当且仅当路径指定的文件不存在的时候,创建一个空文件
booleandelete()删除此路径表示的文件或目录
booleanexists()测试此路径指的文件或目录是否存在
StringgetName返回此路径所表示的文件名或文件来名
booleanisDirectory检测此路径表示的是否是文件夹
booleanisFile是否是文件
booleanisHidden是否是隐藏文件
booleanmkdir创建抽象路经指的目录
返回抽象路径的信息
String []list ()返回一个字符串数组,是该路径下的所有文件和文件来名
list []listFiles()返回文件对象数组

Serializable 序列化接口

  1. 用处: java的类只有实现了Serializable接口,它的对象才是可序列化的,Serializable是 一 个 空 接 口 \color{#ff0036}{一个空接口} ,它的目的只是简单的标识一个类的对象可以被序列化。
  2. 什么是序列化和反序列化?
    • 序列化将对象写入到IO流中;
    • 反序列化从IO流中恢复成对象;
    • 意义: 允许将实现了序列化的类转换位字节序列,这些字节序列可以保存到磁盘上,或者通过网络传输,以达到以后恢复成原来的对象。序列化使对象可以脱离程序的运行而独立存在。
    • 场景: 所有可以在网络上传输的对象都必须是可序列化的
    • 详细请点这里:传送门

流的关系

  • 针对文件的操作
    • 输出流(Outputstream): 写入的动作 将内存中的数据写入到磁盘中
    • 输入流(inputstream): 读的动作 将文件内容读取出来到内存中
    • 总的来说: 读 取 输 入 输 出 写 入 \color{#ff0036}{读取输入 输出写入} 我们站在内存中来看

OutPutStream 字节输出流

  1. 包: Java.io
  2. public abstract class OutPutStream implements Closeable, Flushable
  3. 抽 象 类 \color{#ff0036}{抽象类} 是表示 输 出 字 节 流 \color{#ff0036}{输出字节流} 的所有类的超类。

FileOutputStream 文件输出字符流

  • 包: java.io
  • public class FileOutputStream extends OutputStream
  • 文件输出流 是用于将数据写入File或FileDescriptor 的输出流。
  • FileOutputStream用于写入图像之类的原始字节的流。要写入字符流,建议使用FileWriter
  • 构造方法:
    在这里插入图片描述
  • 常用方法:
返回值用法作用
voidclose()关闭此文件输出流释放与此流有关的所有资源
protected voidfinalize()清理此文件的所有连接,并确保此文件输出流时调用close方法
voidwrite(byte[] b)将此字节数组长度的数据从此数组流入文件中

FileWriter 字符流

  1. 包: java.io
  2. public class FileWriter extends OutputStreamWriter
  3. 用来写入的便捷类
  4. 构造方法:
    在这里插入图片描述
  5. 常用方法
    • write
      • public void write(String str)
      • 写入字符串
    • flush
      • public void flush()
      • 刷新缓冲区

BufferedWriter

  • 包: java.io
  • public void BufferedWriter extends Writer
  • 写入字符流,效率较高
  • 构造函数
    在这里插入图片描述
  • 方法:
    • 和前面的差不多

InputStream 输入流

  • 从文件到内存
  • public abstract class InputStream extends Object implements Closeable
  • 方法:
返回值用法作用
intavailable()返回实际的可读字节数
voidclose()关闭输入流
voidmark(int redlimit)此输入流中标记当前位置
booleanmarkSupported测试这个输入流是否支持mark和reset方法
abstract intread()返回读取流的下个字节
intread(byte[] b)从此输入流中读取到一定数量的字节,并存储到b中
voidreset()重新回到最后一个mark()方法的位置
longskip(long n)跳过和丢弃此输入流数据中n个字节

FileInputStream 文件输入流

  • 字节流,其它的和FileOutputStream相反

FileReader

  • 用于读取字节的便捷类。
  • emm… 和FileWriter是一对

BufferedReader

  • 读取字符流,缓冲各个字符,从而高效读取
  • 特殊方法:readLine() 读取一行 遇到\r或\n时输出

[面试题]java中IO流分成几种?

  • 按功能分:
    输入流(InputStream) 输出流(OutputStream)
类(接口)说明
OutputStream输出流把对象从内存→文件
InputStream输入流把文件→内存
FileOutputStream字节流输出(写),操作任何文件类型
FileInputStream字节流输入(读),操作任何文件
BufferedWriter/FileWriter字符流写 字符串
BufferedReader/FileReader字符流读 字符串
  • 按类形分
    • 字节流和字符流: 节位是以 8 字 节 \color{#ff0036}{8字节} 8大小输入/出流动,节符以 16 字 节 \color{#ff0036}{16字节} 16大小流动

DataOutputStream 数据输出流

  • 可以将多种数据类型写入文件,不再只是字串了。
  • public class DataOutputStream extends FilterOutputStream implements DataOutput
  • 构造方法: DataOutputStream(OutputStream out)
  • 常用方法:
    • write数据类型: 写入 用包装类中的方法,将基本类型数据转成机器可识别的long int 4-byte…然写入文件。
public class TestDataOutputStream {

	public static void main(String[] args) {
		String name="小旺";
		int age=22;
		double score=100;
		
		FileOutputStream out = null;
		 DataOutputStream dos =null;
		try {
			 //1.实例化一个FileoutputStream
			 out = new  FileOutputStream("e:\\temp\\info\\data.txt",true);
			 //2.实例化一个DataOutputStream
			 dos = new DataOutputStream(out);
			 //使用其方法writexxx方法
			 //写name
			 dos.writeUTF(name);
			 //写age
			 dos.writeInt(age);
			 //写double
			 dos.writeDouble(score);
			 System.out.println("写入成功~~");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
				try {
					if (dos!=null)
					dos.close();
					if (out!=null)
						out.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}

	}

DataInputStream 数据输入流

  • 可以有类型的读取文件中的数据,而不只是字符串
  • public class DataInputStream extends FliterInputStream implements DataInput
  • 构造方法: DataInputStream(InputStream in)
public class TestDataInputStream {

	public static void main(String[] args) {
		String name ="";
		int age=0;
		double score=0;
		FileInputStream fis = null;
		DataInputStream dis =null;
		try {
			//1.实例化一个FileInputStream对象
			fis = new  FileInputStream("e:\\temp\\info\\data.txt");
			//2.实例化一个DataInputStream对象
			dis = new DataInputStream(fis);
			//3.使用其方法readxxx方法
			//读name
			 name = dis.readUTF();
			 //读age
			 age = dis.readInt();
			 //读成绩
			 score = dis.readDouble();
			 System.out.println(name+","+age+","+score);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				if (dis!=null)
				dis.close();
				if (fis!=null)
					fis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

}

序列化与反序列化

ObjectOutputStream 序列化存储

  • 将对象及对象的信息状态存储在文件中。
  • public class ObjectOutputStream extends OutputStream implements ObjectOutput ,ObjectStreamConstants
    • 将Java 对象的基本数据类型和图形写入OutputStream。可以用ObjectInputStream 读取对象,实现对象的持久存储
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值