欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java IO流【概述】

程序员文章站 2024-03-04 15:23:41
...

一、Java IO(input、output)

输入与输出,IO是我们的程序与外界交换数据的方式。

Java提供了一种统一的标准的方式与外界交换数据。

Java将流按照功能划分为读和写,并用不同的方向来表示,输入和输出都是针对程序来说的,其中输入流(外界到程序的方向)用于读取数据,输出流(程序到外界的方向)用于写出数据。

Java将流划分为两大类:节点流、处理流

  • 节点流:也称为低级流,是实际链接程序与数据源的"管道",负责实际搬运数据。读写一定是建立在节点流的基础上进行的。
  • 处理流:也称为高级流,不能独立存在,必须链接在其他流上,目的是当数据流经当前流时对这些数据做某些处理,这样可以简化我们对数据的操作。

在实际应用中,我们是链接若干高级流,并最终链接低级流,通过低级流读写数据,通过高级流对读写的数据进行加工处理,完成一个复杂的读写操作。这个过程称为"流链接"。这也是学习IO的精髓所在。

Java IO流【概述】
二、文件流:

文件流是一对低级流,用于读写文件,就功能而言,它们与RandomAccessFile一致,但是底层的读写方式有本质区别。

RAF是基于指针进行随机读写的,可任意读写文件指定位置的数据,可以做到对文件部分数据的编辑操作。

流是顺序读写方式,所以不能做到任意读写指定位置的数据,对此也无法做到对文件数据进行编辑的操作,但是配合高级流可以更轻松的读写数据。

使用文件流向文件中写出字节:

1)FileOutputStream常用构造方法:FileOutputStream(String path)FileOutputStream(File file)

以上两种方式创建时,默认为覆盖写操作,即:若创建时发现该文件已存在,会先将该文件所有数据清除。然后将通过当前流写出的内容作为该文件的数据。

2)其他的构造方法:FileOutputStream(String path,boolean append)FileOutputStream(File file,boolean append)

追加写模式,即:若指定的文件存在,那么数据全保留,通过该流写出的数据会被追加到文件最后。

3)使用输出流写出数据:

注意:如果使用File的形式写出,默认是写在当前项目目录下的。

public static void main(String[] args) {
	try {
		FileOutputStream fos = new FileOutputStream("fos.txt",true);
		String line ="啦啦啦啦";
		byte[] data = line.getBytes("UTF-8");
		fos.write(data);
		System.out.println("写出完毕");
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	} catch (UnsupportedEncodingException e) {
		e.printStackTrace();
	} catch (IOException e) {
		e.printStackTrace();
	}finally{
		fos.close();
	}
}

4)使用输入流写入数据:

try {
	FileInputStream fis = new FileInputStream("fos.txt");
	byte[] data = new byte[200];
	int len = fis.read(data);
	System.out.println("实际读取了:"+len+"字节");
	String str = new String(data,0,len,"UTF-8");
	System.out.println(str);
	fis.close();
} catch (FileNotFoundException e) {
	e.printStackTrace();
} catch (UnsupportedEncodingException e) {
	e.printStackTrace();
} catch (IOException e) {
	e.printStackTrace();
}

5)使用文件流完成复制文件操作:

package io;

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

public class FisCopy {
	public static void main(String[] args) throws IOException {
		File file = new File("fis.txt");
		if(!file.exists()) {
			file.createNewFile();
		}
		/*
		 * 使用文件输入流读取原文件
		 * 使用文件输出流复制文件写数据
		 * 
		 * 利用块读写操作顺序从原文件将数据
		 * 读取出来写入复制文件完成复制操作
		 * 
		 */
		FileOutputStream src = new FileOutputStream("fis.txt");
		src.write("你好".getBytes("utf-8"));
		
		FileInputStream fis = new FileInputStream("fis.txt");
		FileOutputStream fos = new FileOutputStream("fis_cp.txt",true);
		
		int len = -1;
		byte[] data = new byte[1024*10];
		while((len = fis.read(data)) != -1) {
			System.out.println("len:"+len);
			fos.write(data,0,len);
		}
		System.out.println("复制完毕");
		src.close();
		fis.close();
		fos.close();
	}
}
相关标签: JavaSE