java io 字节流替换_Java IO操作 字节流&字符流

1.基本概念

流:程序通过流来传输和保存数据 程序的输入输出都是以流的方式,流里保存的是字节。

Java IO通过Stream(流)来实现。Java中定义了两种类型的流:字节型,和字符型。 关于流,可以理解为是一种“数据的管道”。管道中流动的东西可以是基于字节,也可以是基于字符的等。就好像管道里面可以流动水,也可以流动石油一样。

输入流 和 输出流:程序 需要数据的时候,通过输入流来获取数据。程序 需要保存数据的时候,通过输出流保存数据。输入流和输出流是相对程序而言,程序需要数据就需要输入流,程序保存数据 相对程序来说是是输出数据 就需要输出流。

字节流和字符流: 在java.io包中 操作文件内容主要有两大类:字节流和字符流。 字节流常用来操作 图片,音频,视频等。字符流长用来操作含有中文的文件。

在字节流中,输入和输出是使用InputStream和OutStream完成的。

在字符流中,输入和输出是Reader类和Writer类完成的。

2.java IO 操作的步骤:

1.创建文件: 根据文件路径 创建文件和文件夹

2.打开输入输出流: 如果是保存文件,根据文件打开输出流;如果是读取文件,根据文件打开输入流

3.读取操作: 这一步需要用到byte[] 数组。如果是保存文件,就把要保存的内容转换成byte[] 数组,然后把byte[] 数组写入输出流。 如果是读取文件,就new 一个byte[] 数组,然后通过输入流 把要读取的文件内容读取到byte[] 数组。

4.关闭输入输出流。

3.字节流 byte  IO操作

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import org.junit.Test;

public class IOTest {

// 字节数组 写的时候,把待保存的文件转化为字节数组,然后把字节数组写入输出流。

// 字节数组 读的时候 创建一个空的字节数组,把要读取的文件,读入字节数组

@Test

public void readFileByStream() throws IOException {

// 1.创建文件

File file = new File("D:/xml/file/test.txt");

if (file.exists()) {

// 2.打开输入输出流---根据文件打开输入流

InputStream inputStream = new FileInputStream(file);

// 3.读写操作---把要读的文件 读取到字节数组里

byte[] b = new byte[(int) file.length()];

int len = inputStream.read(b);

// 4.关闭输入出处流

inputStream.close();

System.out.println(new String(b));

}

}

@Test

public void saveFileByStream() throws IOException {

//1.创建文件

String folderPath = "D:/xml/file";

File folder = new File(folderPath);

if(!folder.exists()){

folder.mkdirs();

}

File file = new File("D:/xml/file/test.txt");

//2.打开输入输出流--- 根据要保存的文件 创建文件输出流

OutputStream outputStream = new FileOutputStream(file);

//3.读写操作: 把要保存的内存转化到byte数组,然后以字节的方法 把字节数组输出到输出流

String str = "haaaaaaaa";

outputStream.write(str.getBytes());

//4.关闭输入输出流

outputStream.close();

}

}

4.字符流 IO操作

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.Reader;

import java.io.Writer;

import org.junit.Test;

public class IOTest {

@Test

public void saveFileByChar() throws IOException {

// 1.创建文件

String folderPath = "D:/xml/file";

File folder = new File(folderPath);

if (!folder.exists()) {

folder.mkdirs();

}

File file = new File("D:/xml/file/testChar.txt");

// 2.打开输入输出流: 根据文件打出输出流

Writer writer = new FileWriter(file);

// 3.读写操作:把要保存的内容 写入到输出流

String str = "我这次真的有点纠结了!";

writer.write(str);

// 4.关闭输入输出流

writer.close();

}

@Test

public void readFileByChar() throws IOException {

// 1.创建文件

File file = new File("D:/xml/file/testChar.txt");

if (file.exists()) {

// 2.打开输入输出流: 根据文件打开输入流

Reader reader = new FileReader(file);

// 3.读写操作:把要读取的内容 读取到输入流

char[] c = new char[(int) file.length()];

reader.read(c);

System.out.println(new String(c));

// 4.关闭输入输出流

reader.close();

}

}

}

5.字节流和字符路的区别:

1.字节流 是byte 字节来传输的,字符流是by 字符的。如果对是中文字符操作,最好用字符流

2.字节流是没有用到缓存区的,直接对文件操作,所以即使没有即使关闭资源 outputstream.close() ,也可以输出内容。

字符流是用了缓存区的,如果没有及时关闭资源,不会有内存输出。但是如果没有关闭资源,通过flush() 强制刷新缓存,也可以输出内容。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.Writer;

import org.junit.Test;

public class IOTest {

@Test

public void saveFileByStream() throws IOException {

String folderPath = "D:/xml/file";

File folder = new File(folderPath);

if (!folder.exists()) {

folder.mkdirs();

}

File file = new File("D:/xml/file/test1.txt");

OutputStream outputStream = new FileOutputStream(file);

String str = "haaaaaaaa";

outputStream.write(str.getBytes());

// 4.关闭输入输出流 这样文件里也有内容

// outputStream.close();

}

@Test

public void saveFileByChar() throws IOException {

String folderPath = "D:/xml/file";

File folder = new File(folderPath);

if (!folder.exists()) {

folder.mkdirs();

}

File file = new File("D:/xml/file/testchar1.txt");

Writer writer = new FileWriter(file);

String str = "haaaaaaaa";

writer.write(str);

// 4.关闭输入输出流

//writer.close(); //这样testchar1.txt文件里 没有内容

//writer.flush(); //强制刷新缓存也 可以输出内容

}

}

你可能感兴趣的:(java,io,字节流替换)