Java-I/O流(输入/输出)

流是一组有序的数据序列,根据操作类型分为输入流和输出流

java中定义许多类负责各种输入/输出流,这些类都放在java.io包中

所有的输入流类都是抽象类InputStream(字节输入流)和抽象类Reader(字符输入流)的子类

所有的输出流类都是抽象类OutputStream(字节输出流)和抽象类Writer(字符输出流)的子类

1.输入流

InputStream类:

方法功能
read()从输入流读取数据的下一个字节,返回0-255int值,无数据则返回-1
read(byte[] b)从输入流读入一定长度的字节,以整数形式返回字节数
mark(int readlimit)在输入流当前位置标记,readlimit为在标记失效前允许读取的字节数
reset()将输入指针返回到当前所做的标记处
skip(long n)跳过输入流上的n个字节,并返回实际跳过的字节数
markSupported()如果当前流支持mark()/reset()操作就返回True
close()关闭输入流并释放与该流关联的所有系统资源
Reader类:
InputStream是用来处理字节的,不适合处理字符文本,java为字符文本的输入专门提供了一套单独的Reader类

Reader类的层次结构


2.输出流

OutputStream类:

方法功能
write(int b)将指定的字节写入此输出流
write(byte[] b)将b个字节从指定的byte数组写入此输出流
write(byte[] b,int off,int len)指定数值byte从偏移量off开始的len个字节写入此输出流
flush()彻底完成输出并清空缓存区
close()关闭输出流
Write类是字符输出流的抽象类

3.File类

File类可以实现创建、删除、重命名文件等操作,File类的对象主要用来获取文件本身的一些信息,如文件所在的目录、文件的长度、文件读写权限等

①文件的创建和删除:

File file=new File(“d:/1.txt”);创建文件对象

file.delete();删除文件

file.createNewFile();创建该文件

②获取文件信息:

File类提供了很多方法获取文件本身的信息:

方法返回值说明
getName()String获取文件的名称
canRead()boolean判断文件是否可读
canWirte()boolean判断文件是否可被写入
exits()boolean判断文件是否存在
length()long获取文件的长度(以字节为单位)
getAbsolutePath()String获取文件的绝对路径
getParent()String获取文件的父路径
isFile()boolean判断文件是否存在
isDirectory()boolean哦按段文件是否是一个目录
isHidden()boolean判断文件是否是隐藏文件
lastModified()boolean获取文件最后时间
4.文件输入/输出流:

当程序结束或关闭,数据将消失,如果需要将数据保存,可用文件输入/输出流与指定的文件建立连接,将需要的数据永久保存到文件中

①FileInputStream类与FileOutputStream类:

使用FileInputStream类向文件中写入数据,用FileOutputStream类从文件读取内容

不足:这两个类只提供对字节或数组的读取方法,读取汉字可能出现乱码

public class FileTest { // 创建类
	public static void main(String[] args) { // 主方法
		File file = new File("word.txt"); // 创建文件对象
		try { // 捕捉异常
			// 创建FileOutputStream对象
			FileOutputStream out = new FileOutputStream(file);
			// 创建byte型数组
			byte buy[] = "测试一下文件输入/输出流".getBytes();
			out.write(buy); // 将数组中信息写入到文件中
			out.close(); // 将流关闭
		} catch (Exception e) { // catch语句处理异常信息
			e.printStackTrace(); // 输出异常信息
		}
		try {
			// 创建FileInputStream类对象
			FileInputStream in = new FileInputStream(file);
			byte byt[] = new byte[1024]; // 创建byte数组
			int len = in.read(byt); // 从文件中读取信息
			// 将文件中信息输出
			System.out.println("文件中的信息是:" + new String(byt, 0, len));
			in.close(); // 关闭流
		} catch (Exception e) {
			e.printStackTrace(); // 输出异常信息
		}
	}
}


②FileReader类和FileWriter类:
可读取字符流

5.带缓存的输入/输出流:


①BufferedInputStream类

两种构造方法
BufferedInputStream(InputStream in)创建了一个带有32位的缓存流
BufferedInputStream(InputStream in,int size)按指定大小创建缓存区

②BufferedOutputStream类

两种构造方法
BufferedOutputStream(OutputStream in)创建一个32个字节的缓存区
BufferedOutputStream(OutputStream in,int size)按指定大小创建缓存区

③BufferedReader类:

常用方法
read()读取单个字符
readLine()读取一个文本行
write(String s,int off,int len)写入字符串的一部分
flush()刷新该流的缓存
newLine()写入一个行分割符

④BufferedWriter类:

使用Write()方法时,数据没有立刻被写入到输出流,而是首先进入缓存区

import java.io.*;

public class Student { // 创建类
	public static void main(String args[]) { // 主方法
		// 定义字符串数组
		String content[] = { "好久不见", "最近好吗", "常联系" };
		File file = new File("word.txt"); // 创建文件对象
		try {
			FileWriter fw = new FileWriter(file); // 创建FileWriter类对象
			// 创建BufferedWriter类对象
			BufferedWriter bufw = new BufferedWriter(fw); 
			for (int k = 0; k < content.length; k++) { // 循环遍历数组
				bufw.write(content[k]); // 将字符串数组中元素写入到磁盘文件中
				bufw.newLine(); // 将数组中的单个元素以单行的形式写入文件
			}
			bufw.close(); // 将BufferedWriter流关闭
			fw.close(); // 将FileWriter流关闭
		} catch (Exception e) { // 处理异常
			e.printStackTrace();
		}
		try {
			FileReader fr = new FileReader(file); // 创建FileReader类对象
			// 创建BufferedReader类对象
			BufferedReader bufr = new BufferedReader(fr);
			String s = null; // 创建字符串对象
			int i = 0; // 声明int型变量
			// 如果文件的文本行数不为null,则进入循环
			while ((s = bufr.readLine()) != null) { 
				i++; // 将变量做自增运算
				System.out.println("第" + i + "行:" + s); // 输出文件数据
			}
			bufr.close(); // 将FileReader流关闭
			fr.close(); // 将FileReader流关闭
		} catch (Exception e) { // 处理异常
			e.printStackTrace();
		}
	}
}
这两个用的少,等用到了再总结:
6.数据输入/输出流

7.ZIP压缩输入/输出流


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值