输入和输出(IO流)

输入和输出(I/O流)

变量

数组

对象

对象数组

集合

文件的操作

1. 了解输入和输出的概念

当你在利用程序将文件/RAM内存/键盘输入的东西 获取到的这个过程中,它会使用到你系统的InputStream(输入流)。

当你在利用程序将一些内容输出到文件/RAM内存/控制台等的时候,这个过程里面 使用到了系统的OutputStream(输出流)。

BIOS

2. 使用File类操作文件或目录

java.io.File类。

需求:获取某个文件的大小。

常用的API

  1. long length(); 获取文件的大小 单位:字节
  2. boolean exists(); 判断文件/目录是否存在
  3. boolean isFile(); 判断是否是文件
  4. boolean isDirectory(); 判断是否是目录
  5. String getPath(); 获取相对路径
  6. String getAbsolutePath(); 获取绝对路径
  7. boolean delete(); 删除空目录 、 文件
  8. boolean createNewFile(); 创建【文件】
  9. boolean mkdir(); 创建文件夹
  10. String getName(); 获取文件名,带有扩展名
  11. list等…

3. 理解流的概念和分类

流:(电流、水流、车流)乃至于我们计算机世界中的数据流。

它所代表的是一组有序的数据序列。 以先进先出的形式进行传递(流动)。

按照流的走向:(参照的是程序是在进行读取还是写入)

1. 输入流(读)
2. 输出流(写)

按照处理的数据单元:

  1. 字节流

    它可以用来以字节为单位操作数据。一般用来作为数据传递使用。

    可以操作的有 普通文本文件、图片、视频、音频等所有的。

  2. 字符流

    文本 一般用来阅读一些内容。

    可以操作能被Notepad++打开不乱码的内容。

4. 会使用字节流读写文本文件

InputSteam -> FileInputStream 字节输入流

构造:

​ FileInputStream(File file);

​ FileInputStream(String path);

常用方法:

​ int read(); 从输入流中读取一个字节数据

​ int read(byte[] b); 从输入流中读取字节数组b长度的字节数据,会将读取到的字节数据存储到字节数组中。返回值是真正读取到的总字节数量。

​ int read(byte[] b,int offset,int length); 从输入流中读取指定索引开始 指定长度的字节数据。

​ void close(); 关流!!!!!

​ int avaliable(); 返回可读取到的字节数量

OutputStream -> FileOutputStream 字节输出流

构造:(默认情况下,如果文件不存在 输出流会自动创建文件,并且每一次都会覆盖文件内容)

​ FileOutputStream(File file);

​ FileOutputStream(String path);

​ FileOutputStream(String path,boolean append); 可以继续追加数据

常用方法:

​ void write(int byte); 将一个字节写入输出流

​ void write(byte[] b); 将一个字节数组写入输出流

​ void write(byte[] b,int offset, int length); 将一个字节数组内指定索引开始 指定长度的字节数据写入输出流

​ void close(); 关流!!!

需求:利用字节流 将d盘下的a.txt 复制到 e盘下的c.txt

public class Test1 {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
		FileInputStream fis = null;
		FileOutputStream fos = null;
		try {
			// 1.指定数据源
			fis = new FileInputStream("d:/a.txt");
			// 2.指定输出目的地
			fos = new FileOutputStream("e:/c.txt");
			
			// byte[] b = new byte[fis.available()];
			byte[] b = new byte[1024];
			int len = 0;
			// 边读边写
			// 循环读取输入流  每次读取1024个字节数据
			while((len = fis.read(b)) != -1) {
				fos.write(b,0,len);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			// 3.关流
			try {
				// 先开的后关
				if(fos != null) {
					fos.close();
				}
				if(fis != null) {
					fis.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

第三方库。

commons-io

猜你喜欢

转载自blog.csdn.net/weixin_44637905/article/details/89739725