之前的接触过IO的字符流内容,在字符流中,通过缓冲流的方法可以便捷的将要复制的文本文件复制到新的文件中去,可是如果我们想复制一个.png的图片或者一些不是单纯文本文件的内容的时候能在字符流中做到吗?经过测试,字符流是无法将图片等非字符形式的文件复制的,那么就要用到另一个流-à字节流,
字节流:
在数据传输过程中,一切数据(文本、图像、声音等)最终存储的均为一个个字节,即二进制数字。所以数据传输过程中使用二进制数据可以完成任意数据的传递。
我们向一个文件中存储一定的数据(一些数字),如果使用文本方式打开,则会以文本的方式解释数据。如果以视频的方式打开,则会以视频的方式解释数据。音频、可行执行文件等是如此。所以,在文件传输过程中,传输的始终为二进制数据。
字节流里主要包括InputStream和OutputStream
InputStream此抽象类,是表示字节输入流的所有类的超类。,定义了字节输入流的基本共性功能方法。InputStream有很多子类,其中子类FileInputStream可用来读取文件内容。FileInputStream 从文件系统中的某个文件中获得输入字节。
OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法。OutputStream有很多子类,其中子类FileOutputStream可用来写入数据到文件。FileOutputStream类,即文件输出流,是用于将数据写入File
的输出流。
举例说明:
java.io.InputStream 字节输入流的抽象基类
常用方法
intread() 一次读一个字节
intread(bytes[] byte) 一次读一个数组
FileInputStream extends InputStream
构造方法 绑定数据源
publicFileInputStream(File file)
publicFileInputStream(String path)
参数
File对象
String路径
public class Demo01_InputStream {
publicstatic void main(String[] args) throws IOException {
//创建字节输入流对象 绑定数据源
InputStream is = newFileInputStream("d:\\work\\abc\\1.txt");
intlen = 0;//每次读取到的数据
while((len= is.read())!=-1){
System.out.println(len);
}
// intlen = is.read();
// System.out.println(len);
// len= is.read();
// System.out.println(len);
// len= is.read();
// System.out.println(len);
// len= is.read();
// System.out.println(len);
//
is.close();
}
}
java.io.OutputStream 所有字节输出流的超类
常用方法
write(intb )
write(byte[]bytes) 写一个字节数组
write(byte[]bytes,int start ,int length) 写字节数组的一部分
FileOutputStream extends OutputStream
构造方法 绑定数据目的
publicFileOutputStream(File file)
publicFileOutputStream(String path)
参数
File对象
String路径
如果没有文件则创建文件 如果有文件则覆盖文件
public class Demo01_OutputStream {
publicstatic void main(String[] args) throws IOException {
//创建字节输出流对象
OutputStreamos = new FileOutputStream("d:\\work\\abc\\1.txt")
os.write(100);
os.write(49);
os.write(48);
os.write(48);
os.write('1');
byte[]bytes = {97,98,99,100};
os.write(bytes);
os.write(bytes,2, 2);
最后介绍一下如何将复制过来的文件换行打印和,在新文件以有的文件内续写文件.
续写
FileOutputStream的构造方法
FileOutputStream(Filefile, boolean append)
FileOutputStream(Stringname, boolean append)
参数
booleanappend:值为true则续写文件 值为false则覆盖文件
换行:\r\n
public class Demo_OutputStream {
publicstatic void main(String[] args) throws IOException {
OutputStreamos = new FileOutputStream("d:\\work\\abc\\1.txt",true);
os.write("nihao\r\n".getBytes());
os.write("wohao\r\n".getBytes());
os.write("大家好".getBytes());
os.close();
}
}