Java流系列(二):字节流、字符流

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/androidzf/article/details/87878895

一、字节流

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

  1. 声明输入流对象
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;

猜你喜欢

转载自blog.csdn.net/androidzf/article/details/87878895
今日推荐