Java流系列(二):字节流、字符流
一、字节流
(一)、从指定路径的文件中读取数据
- 声明输入流对象
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;