1.如果一个文件使用Windows自带的记事本打开能够读懂就使用字符流,否则使用字节流
2.字节流抽象基类
1)InputStream:这个抽象类是表示字节输入流的所有类的超类
2)OutputStream:这个抽象类是表示字节输出流的所有类的超类
3)子类名特点:子类名称都是以父类作为子类名的后缀
3.字节流写数据:
1)FileOutputStream:文件输出流用于将数据写入File
FileOutputStream fos = new FileOutputStream(myclass\\fos.txt)
该语句包含三个操作:调用系统功能创建文件,创建字节流输出流对象,让字节输出流指向对象文件
2)写完数据要记得调用close()方法关闭文件的占用
3)字节流写数据的三种方式:
①void write(int b):将指定字节写书此文件输出流
②void write(byte [] b):将b.length字节从指定的字节数组写入此文件输出流,一个一个写
可通过下面的方式来使用方法2:
byte b = "字符串".getBytes();
文件输出流对象.write(b);
③void write(byte [] b, int off, int len):将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流
4)字节流写数据的两个小问题:
①字节流写数据如何换行
使用换行符:
Windows:\r\n
Linux:\n
Mac:\r
②字节流如何追写数据:
Public FileOutputStream(String name, boolean append)
第一个参数选择文件,第二个参数如果为true则进行追写文件,另外是写在文件的末尾而不是开头
4.字节流读数据:
1)一个一个读取数据:
FileInputStream(String name):从系统文件获取字节
Int by
while(by =fis.read() != -1){
System.out.print((char)by)
}
注意:这样会自动读取“\n”文件的最后一位是 -1
2)读取一个字节数组长度的数据:
byte [] b = new byte[length]
int len = fis.read(byte) //len = length
System.out.print(new String(b)) //输出结果为字符串
/*
read(ByteBuffer[] dsts, int offset, int length) 从该通道读取字节序列到给定缓冲区的子序列中。
offset:起始点 length:复制长度
*/
·字节缓冲流:
1)BufferOutStream:该类实现缓冲输出流。该类内置一个8192长度的byte数组。
BufferOutputStream:该类实现缓冲输入流。同样的内置一个8192长度的字节数组。当从流中读取或跳过字节时,内部缓冲区根据需要从所包含的输入流中重新填充,一次很多字节。
2)as:BufferOutputStream bos = new BufferOutputStream(new FileOutputStream fos("地址字符串"))