Java字节流、字符流的使用

mac2024-03-18  25

一、字节流

(一)、从指定路径的文件中读取数据

声明输入流对象

InputStream inputStream=null;

2.实例化文件输入流对象并指定要读取的文件路径

inputStream=new FileInputStream(path);

3.读取数据,一个字符一个字符的读(利用了循环)

int ch=0; while((ch=inputStream.read())!=-1){ System.out.println("ch="+(char)ch); }

或者:

3.读取数据,一次将文件中的数据全部读取到字节数组中. 适用于读取的文件比较小时.

int size=inputStream.available();//返回文件中字节数 byte[] buffer=new byte[size]; int len=inputStream.read(buffer); System.out.println(new String(buffer)+"===>len="+len); int len=0; //从输入流中跳过两个字节,即从第三个字节开始读取 inputStream.skip(3); inputStream.skip(-2); while((len=inputStream.read(buffer))!=-1){     System.out.println(new String(buffer,0,len)); }

4.关闭输入流对象

inputStream.close(); //将输入流对象垃圾化 inputStream=null;

(二)、向指定文件中写入数据

(String path=“src”+File.separator+“config.txt”;)

1.声明输出流对象

OutputStream outputStream=null;

2.实例化文件输出流对象并关联上要操作的文件

outputStream=new FileOutputStream(path);

3.向输出流中写出字节数据

outputStream.write(97);//将给定的整数通过查ASCII表后得到字符a存储到指定的文件中 byte[] data="欢迎你来学校吃饭!".getBytes();//使用本地编码表将字符串编码成字节数组并存入指定文件中 outputStream.write(data);//将字节数组中的数据写入到指定文件中 byte[] data="abcdefg".getBytes(); outputStream.write(data, 2, data.length-2);//将指定数组中的一部分数据写入到目标文件中

4.关闭输出流对象,释放底层资源

outputStream.close(); //将输出流垃圾化 outputStream=null;

二、字符流

(一)、从文件中读取数据

1.声明读者对象

Reader reader=null;

2.实例化读者对象并关联上要操作的文件

reader=new FileReader(path);

3.读取数据

a、一次读取一个字符,读取到最后后返回-1

int len=0; while((len=reader.read())!=-1){     System.out.println((char)len); }

b、将字符读入data数组中,返回读取的字符数

char[] data=new char[10]; while((len=reader.read(data))!=-1){     System.out.println(new String(data,0,len)); }

c、将从文件中读取的数据写入到data数组的索引为2开始写入4个字符。那么data[0]和data[1]中的数据是之前的默认值:\u0000

len=reader.read(data, 2, 4); System.out.println(new String(data,2,len));

3.关闭字符输入流对象

reader.close(); //将字符输入流对象垃圾化 reader=null;

(二)、向指定的文件中写入数据

(字符数据并没有直接写入到目标设备中,而是写入到了缓冲区中。)

1.声明作家对象

Writer writer=null;

2.实例化作家对象并关联上要操作的文件

writer=new FileWriter(path);

3.执行写入操作,此时数据只是写入到了缓冲区中,并没有直接写入到目标设备中。

a、写入字符数组

writer.write(new char[]{'a','b','c'}); writer.flush();//刷新缓冲区(马上将缓冲区中的数据写入到目标设备中).

b、写入单个字符

writer.write(97); writer.flush();

c、写入字符数组的一部分

writer.write(new char[]{'w','e','l','c','o','m','e'}, 2, 5); writer.flush();

d、写入字符串的一部分

writer.write("生当作人杰", 2, 3); writer.flush();

4.关闭作家对象,关闭之前会首先刷新缓冲区,之后才关闭字符输出流对象.

writer.close(); 将字符输出流对象垃圾化 writer=null;

 

最新回复(0)