Java中的IO流操作类

IO流:是用来操作文件内容的的技术,输入输出都是针对程序而言的

I(in)输入:向程序中输入数据,一般是从文件中读取数据到程序中
在这里插入图片描述
O(out)输出:程序向外部输送数据,一般是将数据输出到文件中
在这里插入图片描述
下图为IO继承体系图
在这里插入图片描述
IO流可以分为两类,分别是字节流字符流
字节流可以分为字节输出流,字节输入流和字节缓冲流
字符流可以分为字符输出流,字符输入流和字符缓冲流
主要使用到的类为表所示:

分类输出流输入流缓冲输入流缓冲输出流
字节流FileInputStreamFileOutputStreamBufferedInputStreamBufferedOutputStream
字符流InputStreamReaderOutputStreamWriterBufferedReaderBufferedWriter

1.字节输入流FileInputStream和输出流FileOutputStream

使用FileOutputStream需要指定文件路径名的,也可以使用File类进行传递
FileOutputStream(File file)
FileOutputStream(String name)

	//字节输出流
	FileOutputStream fos = new FileOutputStream("E:\\test.txt");

如果我们想往文件中写入数据,可以使用以下几种方式:

方法名作用
void write(int b)将指定的字节写入文件,一次一个字节
void write(byte[] b)将b.length字节写入指定文件,一次写一个字节数组的数据
void write(byte[] b,int off,int len)将指定的字节数据,以一定的偏移量写入文件

下面用上述的方法吧数据写入到文件中:

		//字节输出流
		FileOutputStream fos = new FileOutputStream("E:\\test.txt");
		//吧数据写入到文件中
		byte[] b = {97,98,99};
		fos.write(b);
		//关闭输出流
		fos.close();

下图为执行结果:
在这里插入图片描述
如果想吧自定义的字符串写进去,可以通过String中的getBytes()方法吧字符串转为字节数组

		//字节输出流
		FileOutputStream fos = new FileOutputStream("E:\\test.txt");
		//吧数据写入到文件中
		String s = "你好,世界!";
		fos.write(s.getBytes());
		//关闭字节输出流
		fos.close();

下图为运行结果:
在这里插入图片描述
注意:IO流使用完了以后一定要释放资源

输出流每次写数据的时候都会先吧文件清空再写进数据,如果向往文件中追加数据,可以使用下面的构造方法:
FileOutputStream(String name, boolean append)
FileOutputStream(File file, boolean append)
第二个表示的是是否需要追加内容,true表示追加,false表示不追加

		//字节输出流
		FileOutputStream fos = new FileOutputStream("E:\\test.txt",true);
		//吧数据写入到文件中
		String s = "你好,世界!";
		fos.write(s.getBytes());
		//关闭字节输出流
		fos.close();

运行结果如下:
在这里插入图片描述
如果想实现换行,可以在写完数据后写入换行符
对于不同的系统换行符不同
Windows:\r\n
Linux:\n

使用FileInputStream的时候依然是需要传递文件路径
FileInputStream(File file)
FileInputStream(String name)

		//字节输入流
		FileInputStream fis = new FileInputStream("E:\\test.txt");

读取文件中的数据可以使用下面的方法:

方法名作用
int read()一次读取一个字节的数据,返回字节码
int read(byte[] b)一次读取一个字节数据的数据,返回读取数据的长度

主要是使用第二种方式居多:

		//字节输入流
		FileInputStream fis = new FileInputStream("E:\\test.txt");
		//通过字节数据进行读取
		byte[] b = new byte[1024];
		int len = 0;
		//读取数据
		while((len = fis.read(b)) != -1) {
			String s = new String(b,0,len);
			System.out.println(s);//打印结果:你好,世界!你好,世界!
		}
		//关闭流
		fis.close();

使用字节数组读取数据时,建议大小使用1024及其倍数
因为不知道数据有多少,所以可以使用循环进行读取,如果读取到文件的末尾,就会返回-1,所以可以作为循环结束的条件
读取的数据会放入到字节数组中,并返回读取到的长度,所以可以使用字符串的构造方法将数据读取出来,这里建议使用偏移量进行字节数组转字符串

2.字符缓冲输入流BufferedInputStream和字符缓冲输出流BufferedOutputStream

使用缓冲流,可以提高我们读取和写入数据的效率,所以缓冲流推荐使用

字符缓冲输入流和字节缓冲输出流的操作和一般的字节流操作相同,但是使用时传递的参数不同
BufferedInputStream(InputStream in)
BufferedOutputStream(OutputStream out)

		//创建缓冲输入流
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\test.txt"));
		//创建缓冲输出流
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\test.txt"));

为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?
字节缓冲流仅仅提供缓冲区,而真正的读写数据还是要依靠基本的字节流对象进行操作

这里可以做个拷贝文件的案例:

		//创建缓冲输入流,指定需要拷贝的文件
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\test.txt"));
		//创建缓冲输出流,,指定拷贝文件到哪里
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\test01.txt"));
		//创建存储的字节数组
		byte[] b = new byte[1024];
		int len = 0;
		//循环读写数据
		while((len = bis.read(b)) != -1) {
			//讲字节写入
			bos.write(b, 0, len);
		}
		//释放流
		bos.close();
		bis.close();

运行结果如下:
在这里插入图片描述

3.字符输入流InputStreamReader和字符输出流OutputStreamWriter

由于字节流操作中文不是很方便,所以Java提供了字符流
字符流 = 字节流 + 编码

使用字符流的时候是可以指定字符集的,但还是需要通过字节流来指定文件
OutputStreamWriter(OutputStream out)
OutputStreamWriter(OutputStream out,String charsetName)

		//创建字符输出流,指定字符集
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\test.txt"),"utf8");

如果要写入数据,可以使用下面的方法:

方法名作用
void write(int c)一次写一个字符
void write(char[] c)一次写一个字符数组
void write(char[] c,int off,int len)写字符数组的一部分
void write(String str)写一个字符串
void write(String str,int off,int len)写字符串的一部分

通过上述方法进行写入中文数据:

		//创建字符输出流,指定字符集
		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("E:\\test.txt"),"utf8");
		//通过字符数据写入
		char[] c = {'你','好'};
		//写入
		osw.write(c);
		//关闭流
		osw.close();

运行结果如下:
在这里插入图片描述
如果没有写进去数据,可能是没有刷新流或者关闭流
刷新流可以使用flush()方法

字符输入流依然可以指定字符集
InputStreamReader(InputStream in)
InputStreamReader(InputStream in,String charsetName)
如果想读入数据可以使用下面的方法:

方法名作用
int read()一次读一个字符数据
int read(char[] c)一次读取一个字符数组的数据

通过上面的方法读入数据:

		//创建字符输入流
		InputStreamReader isr = new InputStreamReader(new FileInputStream("E:\\test.txt"),"utf8");
		//通过字符数组放数据
		char[] c = new char[6];
		int len = 0;
		//循环读取数据
		while((len = isr.read(c)) != -1) {
			String s = new String(c,0,len);
			System.out.println(s);//打印结果:你好
		}
		//关闭流
		isr.close();

字符串的构造方法也可以吧字符数组转为字符串

4.字符缓冲输入流BufferedReader和字符缓冲输出流BufferedWriter

构造方法:
BufferedReader(Reader in)
BufferedWriter(Writer out)
构造方法要求我们给的是字符流的对象

		//创建字符缓冲输入流
		BufferedReader br = new BufferedReader(
				new InputStreamReader(
						new FileInputStream("E:\\test.txt")));
		//创建字符缓冲输出流
		BufferedWriter bw = new BufferedWriter(
				new OutputStreamWriter(
						new FileOutputStream("E:\\test.txt")));

字符缓冲流中特有的功能:
BufferedReader:String readLine():读取一行,并把结果以字符串的形式返回
BufferedWriter:void newLine():进行换行操作

		//创建字符缓冲输入流
		BufferedReader br = new BufferedReader(
				new InputStreamReader(
						new FileInputStream("E:\\test.txt")));
		//创建字符缓冲输出流
		BufferedWriter bw = new BufferedWriter(
				new OutputStreamWriter(
						new FileOutputStream("E:\\test.txt")));
		//写入数据并换行
		bw.write("你好呀!");
		//换行
		bw.newLine();
		bw.write("世界!");
		//刷新流
		bw.flush();
		//读取数据
		String s = br.readLine();
		System.out.println(s);//打印结果:你好呀!
		//释放资源
		bw.close();
		br.close();

文件运行结果如下:
在这里插入图片描述

5.字符缓冲输出流PrintWriter

具有自动刷新的缓冲字符输出流,特点是可以按行写出字符串,并且可以自动换行刷新。
java.io.BufferedWriter是缓冲字符输出流,内部有缓冲区可以进行块写操作提高效率,
而PrintWriter就是通过连接它实现的缓冲功能

构造方法我们可以传递一个字节流
PrintWriter(OutputStream out)

		//创建缓冲输出流
		PrintWriter pw = new PrintWriter(new FileOutputStream("E:\\test.txt"));

如果要写入数据就可以使用熟悉的打印了

		//创建缓冲输出流
		PrintWriter pw = new PrintWriter(new FileOutputStream("E:\\test.txt"));
		//写入数据(换行)
		pw.println("你好呀");
		//写入数据(不换行)
		pw.print("java");
		//吸入数据(不换行)
		pw.print("世界");
		//关闭流
		pw.close();

文件运行结果如下:
在这里插入图片描述

今天的分享就到这里了,如果有错误的地方,欢迎大家来指点!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaIO操作基本程如下: 1. 创建对象:通过File类或其他相关类创建输入或输出对象。 2. 打开:使用输入或输出对象的open()方法打开,这样就可以读取或写入数据。 3. 读取或写入数据:使用输入或输出对象的read()或write()方法读取或写入数据。 4. 关闭:使用输入或输出对象的close()方法关闭,释放资源。 需要注意的是,在使用IO操作时,要遵循“先打开、后关闭”的原则,以确保数据的完整性和的正确性。同时,在操作过程也需要进行异常处理,以避免出现不必要的错误。 ### 回答2: JavaIO基本操作程如下: 1. 打开文件或者建立网络连接:使用File类或者URL类打开文件或者建立网络连接。 2. 创建对象:根据需要选择输入(读取数据)或输出(写入数据),并创建相应的对象。常见的输入有FileInputStream、BufferedReader等,常见的输出有FileOutputStream、BufferedWriter等。 3. 读取或写入数据:使用对象读取或写入数据。对于输入,可以通过调用相关方法(如read()、readline()等)逐个字符或逐行读取数据;对于输出,可以通过调用相应方法(如write()、print()等)逐个字符或逐行写入数据。 4. 关闭:读取或写入完成后,需要关闭文件或网络连接,以释放资源。可以调用对象的close()方法来关闭。 需要注意的是,在处理IO时,应该始终使用try-catch-finally块,以确保在发生异常时能够正确关闭。可以把IO操作放在try块,catch块用于捕获异常,并在finally块关闭。 另外,为了提高IO效率,可以考虑使用缓冲来进行读写操作。缓冲(BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter)可以通过缓冲区将数据从源读入到缓冲区,再从缓冲区写入到目标,提高读写的速度。 以上就是JavaIO基本操作程。根据实际需要选择合适的对象,并遵循打开、读取/写入、关闭的程,可以实现灵活、高效的IO操作。 ### 回答3: 在JavaIO是用于处理输入输出操作的工具。下面是JavaIO的基本操作程: 1. 创建对象:通过使用Java的InputStream和OutputStream类来创建对象。InputStream类用于读取输入,而OutputStream类用于写入输出。 2. 打开:通过使用对象对应的构造函数和方法来打开输入和输出。根据具体情况,可以选择文件、网络或内存来打开。 3. 读取/写入数据:使用对象提供的读取和写入方法来读取和写入数据。例如,使用InputStream的`int read()`方法来读取一个字节的数据,使用OutputStream的`void write(int b)`方法来写入一个字节的数据。 4. 关闭:在读取或写入结束后,必须关闭以释放相关资源。通过调用对象的`close()`方法来关闭。 需要注意的是,在处理异常的时候,我们需要对可能出现的`IOException`进行处理。可以使用try-catch语句块来捕获和处理异常。 程示例: ```java import java.io.*; public class IOExample { public static void main(String[] args) { try { // 1. 创建对象 FileInputStream fis = new FileInputStream("input.txt"); FileOutputStream fos = new FileOutputStream("output.txt"); // 2. 打开 // 3. 读取/写入数据 int data; while ((data = fis.read()) != -1) { fos.write(data); } // 4. 关闭 fis.close(); fos.close(); } catch(IOException e) { e.printStackTrace(); } } } ``` 上述示例,我们创建了一个用于将一个文件的内容拷贝到另一个文件的程序。首先,我们创建了一个FileInputStream对象来读取输入文件的内容,然后创建了一个FileOutputStream对象来写入输出文件。接下来,我们通过循环从输入读取一个字节的数据,并将其写入到输出,直到读取完所有的数据。最后,我们关闭了对象来释放资源。 这就是JavaIO的基本操作程。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值