Java I/O简述

字数 219阅读 56

Java数据流,有写入写出之分;还有byte数据,和char(文字)数据之分。

基本涵盖所有情况,其他只是使用更简洁的类来操作。

先看看Java基本数据有(总体如下图):

一,引用型(reference):

二,基本型(primitive):

2.1数字型(整型):

byte short int long char,分别用8、16、32、64、16bits表示。

2.2浮点型:

float(32bit),double(64bit)

2.3整型字面值

2、8、16进制的表示分别在最前面加上0B(0b)、0、0X(0x)即可

2.4字符及字符串字面值

\ddd(八进制)、\uxxxx(十六进制Unicode字符)、'(单引号)、"(双引号)、\(反斜杠)\r(回车符)\n(换行符)\f(换页符)\t(制表符)\b(回格符)

屏幕快照 2016-08-25 上午10.43.22.png

/**
* 字符文件,读入内存(读文件)
* 字符文件,读出内存(写到文件中去)
*
* byte[]文件,读入内存(读文件)
* byte[]文件,读出内存(写到文件中去)
*如:png,jpg等文件,的读写

*转化流:InputStreamReader/OutputStreamWriter,把字节转化成字符。
*数据流:DataInputStream,DataOutputStream。
*/

private static voidbyteFile2PureDataFile()throwsIOException {

//步骤一:准备好要读入内存的文件

//情况1:复制纯数据

//File file = new File("/Users/users/Desktop/BugHunt.mp3");

//File file = new File("/Users/users/Desktop/old.png");

//情况2:复制字符等数据

File file =newFile("/Users/users/Desktop/old.txt");



//文件转化为文件流

FileInputStream fileInputStream =newFileInputStream(file);

//情况1:以数据流的形式将数据读入到内存(使用DataInputStream,BUfferedInputStream都可以)

//BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

//情况2:以字符形式将数据读入到内存(字符,图片在内存中的存储格式的区别)

InputStreamReader inputStreamReader =newInputStreamReader(fileInputStream);



//步骤二:准备好要写出内存的文件

//情况1:复制纯数据

//File fileNew = new File("/Users/users/Desktop/new.mp3");

//File fileNew = new File("/Users/users/Desktop/new.png");

//情况2:复制文字,字符等

File fileNew =newFile("/Users/users/Desktop/new.txt");



//文件转化为文件流

FileOutputStream fileOutputStream =newFileOutputStream(fileNew);

//情况1:以数据形式将数据导出内存(使用DataOutputStream,BUfferedOutputStream都可以)

//BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);

//情况2:以字符形式将数据导出内存,

OutputStreamWriter outputStreamWriter =newOutputStreamWriter(fileOutputStream);



//小勺子

//情况1:以数据形式将数据导出内存

//byte[] cache = new byte[1024];//情况一:拷贝数据:图片,音频等数据的小勺子,就必须使用字节数组

//情况2:复制字符等数据

//char[] cache = new char[1024];//情况二:拷贝字符串的小勺子,就必须使用字符数组



//读到的长度(read()返回的值,可以作为单个字符的内容,也可以在使用cache时作为长度来指示)

//情况1:以数据形式将数据导出内存

//int len = bufferedInputStream.read(cache);

//情况2:复制字符等数据

intcontent =0;//不用cache,字符串为整形数,然后由系统软件等自己去解析,这样肯定会有乱码



//情况一:以数据形式将数据导出内存

//while (len != -1) {

//情况2:复制字符等数据

//while (((content = inputStreamReader.read(cache))!= -1)) {

while(((content = inputStreamReader.read()) != -1)) {

//情况1:以数据形式将数据导出内存

//bufferedOutputStream.write(cache, 0, len);

//情况2:复制字符等数据

//outputStreamWriter.write(cache, 0, content);//用cache

outputStreamWriter.write(content);//不用cache

//情况1:(比较特殊的地方)以数据形式将数据导出内存//byte文件,读取小勺子的长度,这里一定要每次更新长度

//len = bufferedInputStream.read(cache);

}



//最后注意关流的顺序(先关流入内存的数据,再关流出内存的数据)情况1:以数据形式将数据导出内存

//bufferedInputStream.close();

//情况2:复制字符等数据

//inputStreamReader.close();

fileInputStream.close();



//情况1:以数据形式将数据导出内存

//bufferedOutputStream.close();

//情况2:复制字符等数据

outputStreamWriter.close();

fileOutputStream.close();

}

常用I/O流
字节输入流
字节输出流
字符输入流
字符输出流

推荐阅读更多精彩内容