不积跬步,无以至千里;不积小流,无以成江海。

 

Java语言基础

 

输入输出流

按照流的方向分为输入流(InputStream)与输出流(OuputStream):

  • 输入流:只能读取数据,不能写入数据。
  • 输出流:只能写入数据,不能读取数据。

核心体系就是由File、 InputStream 、OutputStream、Reader、Writer和Serializable(接口)组成的。

因为程序是运行在内存中,以内存角度来理解输入输出概念,如下:

 

 

输入与输出是一个相对概念,数据写入文件,对于程序来说是输出流,对文件来说是输入流。

但一般是以程序作为中心,所以从程序写入数据到其他位置,则是输出流,将数据读入程序中则是输入流。

 

简单的说就是:读取数据就是输入流,写入数据就是输出流。

 

按照处理的数据单位分为字节流和字符流

  •  字节流:操作的数据单元是8位的字节。InputStream、OutputStream作为抽象基类。
  •  字符流:操作的数据单元是字符。以Writer、Reader作为抽象基类。
  •  字节流可以处理所有数据文件,若处理的是纯文本数据,建议使用字符流。

IO流中的三类数据源

  • 基于磁盘文件:FileInputStream、FileOutputSteam、FileReader、FileWriter
  • 基于内存:ByteArrayInputStream ByteArrayOutputStream(ps:字节数组都是在内存中产生)
  • 基于网络:SocketInputStream、SocketOutputStream(ps:网络通信时传输数据)

 

缓冲流:提供一个缓冲区,能够提高输入/输出的执行效率,减少同节点的频繁操作。

例如:BufferedInputStream/BufferedOutputStream、BufferedReader/BufferWriter

 

转换流:将字节流转成字符流。字节流使用范围广,但字符流更方便。

例如:一个字节流的数据源是纯文本,转成字符流来处理会更好。InputStreamReader/OutputStreamWriter

 

字节流读写文件:

 

package file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class TestDemo {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		//创建文件(绝对路径)
		File file = new File("D:\\Java_workspace\\Day_4\\src\\file\\a.txt");
		if(!file.exists()) {
			file.createNewFile();
		}
		//创建文件(相对路径)
		File file1 = new File("c.txt");
		if(!file1.exists()) {
			file1.createNewFile();
		}
		//创建文件字节输入流
		FileInputStream fileInputStream = new FileInputStream(file);
		//创建文件字节输出流
		FileOutputStream fileOutputStream = new FileOutputStream("D:\\Java_workspace\\Day_4\\src\\file\\b.txt");
		//定义一个数组接受读取到的内容 长度最好是1024的倍数
		byte[] bytes = new byte[1024];
		//定义一个长度用来判断是否读取到最后一位,到最后一位返回-1
		int len = 0;
		//判断是否读取到最后一位
		while((len = fileInputStream.read(bytes)) != -1) {
			//将指定字节数组中从偏移量0开始的len个字节写入此文件输出流
			fileOutputStream.write(bytes, 0, len);
		}
		System.out.println(file.getPath());
		fileInputStream.close();
		fileOutputStream.close();

	}

}

 

 字符流读写文件:

package file;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;

public class TestDemo1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		File file2 = new File("D:\\Java_workspace\\Day_4\\src\\file\\aa.txt");
		//该缓冲流有一个readLine()独有方法
		BufferedReader fileReader = null;
		BufferedWriter fileWriter = null;
		try {
			fileReader = new BufferedReader(new InputStreamReader(new FileInputStream(file2), "UTF-8"));
			fileWriter = new BufferedWriter(new FileWriter("D:\\Java_workspace\\Day_4\\src\\file\\bb.txt"));
			String temp = "";
			//readLine()每次读取一行
			while((temp = fileReader.readLine()) != null) {
				fileWriter.write(temp);
				fileWriter.newLine();
				System.out.println(temp);
			}
			fileReader.close();
			fileWriter.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

posted on 2020-08-23 22:41  smile学子  阅读(223)  评论(0编辑  收藏  举报