java标准_Java 标准 I/O 介绍

一、Java标准I/O知识体系图:

94045e83f547ca6960878c791bdb01a7.png

二、I/O是什么

I/O 是Input/Output(输入、输出)的简称,输入流可以理解为向内存输入,输出流是从内存输出。

三、Java I/O 用途与对应的流一览

97a95dac439c121c9632581f4d990058.png

注:粗体为节点流。蓝色为转换流(字节流转为字符流)。

四、流结构介:

Java所有的流类位于java.io包中,都分别继承字以下四种抽象流类型。

89782921b5f2e8867474ebb890dff38a.png

1.继承自InputStream/OutputStream的流都是用于向程序中输入/输出数据,且数据的单位都是字节(byte=8bit)。

cf286ac30660b1307be648986dec84bf.png

4d75da7c0a90f6ebe03d82a37980798a.png

2.继承自Reader/Writer的流都是用于向程序中输入/输出数据,且数据的单位都是字符(2byte=16bit),如图。

99829f762ee528ef3f5fd916a20596b1.png

c0da311048a31294f7c835c0c61bbc72.png

四、流的处理

流分为节点流和处理流两种:

节点流: 从一个特定的数据源读写数据。即节点流是直接操作文件,网络等的流,例如FileInputStream和FileOutputStream,他们直接从文件中读取或往文件中写入字节流。

7f79989f6f4f233883463fa09f292ea7.png

处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接

d6eba0ccb150aaf07925a244fd841025.png

五、文件的访问

(1)读取文件

如果你需要在不同端使用读取文件,你可以根据你要读的文件是二进制文件还是文本文件,或者根据你要处理的数据是准备采取字节方式还是字符方式,决定使用 FileInputStream 或者 FileReader。两者支持你从文件开头开始到文件结尾读取一个字节或者字符,也可以将读取的多个字节或字符,写入到内存的字节数组或字符数组。

单字节读取文件示例:

public classtest5 {public static void main(String[] args) throwsException {

String filepath= "test.bin";

java.io.InputStream is= null;try{

is= newFileInputStream(filepath);int data = -1;while ((data = is.read()) != -1) {//-1 表示读取到达文件结尾//操作数据

System.out.print((byte)data + " ");

}

}finally{if (is != null) {

is.close();//关闭流

}

}

}

}

字节数组读取文件示例:

public classtest5 {public static void main(String[] args) throwsException {

String filepath= "test.bin";

java.io.InputStream is= null;try{

is= new BufferedInputStream(new FileInputStream(filepath));//组装BufferedInputStream流,加入缓冲能力

byte[] data = new byte[256];int len = -1;while ((len = is.read(data)) != -1) {//-1 表示读取到达文件结尾//操作数据

for (int i = 0; i < len; i++) {

System.out.print(data[i]+ " ");

}

}

}finally{if (is != null) {

is.close();//关闭流

}

}

}

}

单字符读取文件示例:

public classtest5 {public static void main(String[] args) throwsException {

String filepath= "test.txt";

java.io.Reader r= null;try{

r= newFileReader(filepath);int data = -1;while ((data = r.read()) != -1) {//-1 表示读取到达文件结尾//操作数据

System.out.print((char) data);

}

}finally{if (r != null) {

r.close();//关闭流

}

}

}

}

字符数组读取文件示例:

public classtest5 {public static void main(String[] args) throwsException {

String filepath= "file.txt";

java.io.Reader r= null;try{

r= new BufferedReader(new FileReader(filepath));//组装BufferedReader流,加入缓冲能力

char[] data = new char[256];int len = -1;while ((len = r.read(data)) != -1) {//-1 表示读取到达文件结尾//操作数据

for (int i = 0; i < len; i++) {

System.out.print(data[i]);

}

}

}finally{if (r != null) {

r.close();//关闭流

}

}

}

}

public classtest5 {public static void main(String[] args) throwsException {

String filepath= "file.txt";

java.io.Reader r= null;try{

r= new BufferedReader(new FileReader(filepath));//组装BufferedReader流,加入缓冲能力

char[] data = new char[256];int len = -1;while ((len = r.read(data)) != -1) {//-1 表示读取到达文件结尾//操作数据

for (int i = 0; i < len; i++) {

System.out.print(data[i]);

}

}

}finally{if (r != null) {

r.close();//关闭流

}

}

}

}

(2)写入文件与读取文件类似

单字节写入文件示例:

public classtest5 {public static void main(String[] args) throwsException {

String filepath= "test.bin";

java.io.OutputStream os= null;try{

os= newFileOutputStream(filepath);

os.write('1');

os.write('2');

os.write('3');

os.write('4');

os.flush();//把缓冲区内的数据刷新到磁盘

}finally{if (os != null) {

os.close();//关闭流

}

}

}

}

字符数组写入文件示例:

public classtest5 {public static void main(String[] args) throwsException {

String filepath= "file.txt";

java.io.Writer w= null;try{

w= new BufferedWriter(new FileWriter(filepath));//组装BufferedWriter流,加入缓冲能力//模拟

char[] data = new char[256];

String f= "0123456789abcdefghijklmnopqrstuvwxyz";

Random rd= newRandom();for (int i = 0; i < data.length; i++) {

data[i]=f.charAt(rd.nextInt(f.length()));

}

w.write(data);

w.flush();//把缓冲区内的数据刷新到磁盘

} finally{if (w != null) {

w.close();//关闭流

}

}

}

}

(3)随机访问文件

如果你需要不按特定的存取顺序,随意读取或者写入文件,可以考虑RandomAccessFile。

void seek(long pos) 设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。

public classtest5 {public static void main(String[] args) throwsException {

RandomAccessFile file= null;try{

file= new RandomAccessFile("test.bin", "rw");

file.seek(0);

file.writeChar('1');

file.seek(0);

System.out.println(file.readChar());/*** 读取*/

int data = -1;while ((data = file.read()) != -1) {//-1 表示读取到达文件结尾//操作数据

System.out.print((byte)data + " ");

}

}finally{if (file != null) {

file.close();//关闭流

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于Java I/O操作读写本地图片,可以使用以下步骤: 1. 使用FileInputStream或FileOutputStream类来读写文件。 2. 创建一个File对象,指定要读写的文件路径。 3. 创建一个InputStream或OutputStream对象,将File对象传递给它们。 4. 使用read()或write()方法来读写文件内容。 5. 关闭输入输出流和文件对象。 以下是一个简单的示例代码,可以读取本地图片并将其写入到另一个文件中: ```java import java.io.*; public class ImageIOExample { public static void main(String[] args) { try { // 创建一个File对象,指定要读取的图片路径 File inputFile = new File("input.jpg"); // 创建一个File对象,指定要写入的图片路径 File outputFile = new File("output.jpg"); // 创建一个输入流对象,读取inputFile中的内容 FileInputStream inputStream = new FileInputStream(inputFile); // 创建一个输出流对象,将内容写入outputFile中 FileOutputStream outputStream = new FileOutputStream(outputFile); // 定义一个字节数组,用于存储文件内容 byte[] buffer = new byte[1024]; // 定义一个变量,记录读取到的字节数 int bytesRead = 0; // 读取文件内容到字节数组中,直到读取完毕 while ((bytesRead = inputStream.read(buffer)) != -1) { // 将字节数组中的内容写入到输出流中 outputStream.write(buffer, 0, bytesRead); } // 关闭输入输出流 inputStream.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } ``` 以上代码将会读取名为`input.jpg`的图片,并将其写入到名为`output.jpg`的文件中。需要注意的是,如果要读写其他类型的文件,只需要将文件名和文件类型(例如jpg)替换即可。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值