1.输入输出流
在Java中,把不同类型的输入输出源抽象为流,其中输入和输出的数据称为数据流(Data Stream)。数据流是Java程序发送和接收数据的一个通道,数据流中包括输入流(Input Stream)和输出流(Output Stream)。
通常应用程序中使用 输入流读出数据,输出流写入数据 。 流式输入、输出的特点是数据的获取和发送均沿数据序列顺序进行。相对于程序来说,输出流是往存储介质或数据通道写入数据,而输入流是从存储介质或数据通道中读取数据。
- 面向字节的流,数据的处理以字节为基本单位;字节流(Byte Stream)每次读写8位二进制数,也称为二进制字节流或位流。
- 面向字符的流,用于字符数据的处理。字符流一次读写16位二进制数,并将其做一个字符而不是二进制位来处理。
- 需要注意的是,为满足字符的国际化表示,Java语言的字符编码采用的是16位的Unicode码,而普通文本文件中采用的是8位ASCⅡ码。
2.字节流
字节流有两个抽象的父类,InputStram和outputStream,本文主要记录文件的操作,其他的具体实现类暂不讨论,主要看一下经常使用的几个字节流实现类的使用。
针对文件操作的字节流主要包括FileInputStream与FileOutputStream
写入文件
File inputFile = new File(fileLocalPath);
FileOutputStream fileOutputStream = new FileOutputStream(inputFile);
fileOutputStream.write(str.getBytes());
fileOutputStream.close();
写入文件比较简单,传入一个File类型的对象来构造FileOutputStream的对象,然后调用write方法即可,最后需要要调用close,释放资源
读取文件
FileInputStream fileInputStream = new FileInputStream(file);
byte[] bytes = new byte[1024];
int i;
while((i=fileInputStream.read(bytes))!=-1){
stringBuilder.append(new String(bytes,0,i));
}
Log.i(TAG, stringBuilder.toString());
fileInputStream.close();
需要声明一个byte类型的数组,用于每次读取时将数据存入该数组,声明一个整型i用于保存一次读取到的字节数。最后再根据将字节数组转换成需要的类型,最后也需要调用close释放资源
3.字符流
字符流主要包括FileWriter和FileReader,字符缓冲流BufferedWriter,BufferedReader,用法与上述的字节流基本一致,调用read之后获取到的是字符类型,需要用char类型的数组去接收。
FileReader fileReader = new FileReader(file);
BufferedReader bufferedReader = new BufferedReader(fileReader);
char[] chars = new char[1024];
int charInt;
while ((charInt = bufferedReader.read(chars))!=-1){
Log.i(TAG,"char:"+new String(chars,0,charInt));
stringBuilder.append(new String(chars,0,charInt));
}
Log.i(TAG,"stringResult : "+stringBuilder.toString());
fileReader.close();
bufferedReader.close();