您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

IO流的实例详解

2024/4/16 19:36:18发布6次查看
io流:
  i:input,输入,读取到内存
  o:output,输出,写入文件
  流:数据流(字符,字节)
分类:
流向:
  输入:字节输入流(fileinputstream),字符输入流(filereader)
  输出:字节输出流(fileoutputstream),字符输入流(filewriter)
种类:
  字符,字节
java.io.outputstream:字节输出流,是所有字节输出流的父类
公共的成员方法:
  abstract  void write(int b) 写入一个字节
  void write(byte[] b) 写入字节数组
  void write(byte[] b, int off, int len) 写入字节数组,off是开始的索引,len写几个
  void close() 关闭此输出流并释放与此流有关的所有系统资源。
java.io.fileoutputstream:文件字节输出流
  作用:把内存中的数据,以字节的方式,写入到文件中
构造方法:
  fileoutputstream(file file) 创建一个向指定 file 对象表示的文件中写入数据的文件输出流。
  fileoutputstream(string name) 创建一个向具有指定名称的文件中写入数据的输出文件流。
  构造方法的参数:
  file:文件
  name:文件的路径
  都是写入数据的目的地
特点:
如果构造方法中指定的文件或者文件的路径所指向的文件不存在,构造方法就会创建一个文件
  如果,没有打开追加写的开关,文件已经存在,则会覆盖
使用步骤:
  1.创建一个字节输出流对象fileoutputstream,绑定数据的目的地
  2.使用fileoutputstream中的write方法,把数据写入到文件中
  3.释放资源
流写入数据的时候,会找到jvm,jvm会调用系统本地的方法完成写,使用完 流要使用和系统有关的资源(释放内存)
void write(byte[] b) 写入字节数组
void write(byte[] b, int off, int len) 写入字节数组,off是开始的索引,len写几个
 1 public static void main(string[] args) throws ioexception { 2         file file = new file(b.txt); 3         fileoutputstream fos = new fileoutputstream(file); 4         //写入100到文件中,100是3个字节 5         fos.write(49); 6         fos.write(48); 7         fos.write(48); 8          9         /*10          * void write(byte[] b) 写入字节数组11          * 写入数据的时候,如果一次写多个字节12          * 写入的字节是正数:会查询asc||表13          * 写入的字节是,第一个字节是负数,第二个字节可以是正数,也可以是负数,查询的时候就会把两个字节组成一个中文,查询gbk编码表14          */15         byte[] bytes = {65,66,67,68,69};//abcde16         //byte[] bytes = {-65,-66,-67,68,88};//烤紻17         18         fos.write(bytes);19         20         //void write(byte[] b, int off, int len) 写入字节数组,off是开始的索引,len写几个21         fos.write(bytes, 1, 2);22         23         /*24          * 快速写入字节数组的方法25          * string类中有一个方法26          * byte[] getbytes(string charsetname) :把字符串转换为字节数组  27          */28         byte[] bytes2 = 你好.getbytes();29         system.out.println(arrays.tostring(bytes2));//[-60, -29, -70, -61]30         fos.write(bytes2);31         32         fos.close();33     }
void write(byte[] b) 写入字节数组
写入数据的时候,如果一次写多个字节
写入的字节是正数:会查询asc||表
写入的字节是,第一个字节是负数,第二个字节可以是正数,也可以是负数,查询的时候就会把两个字节组成一个中文,查询gbk编码表
快速写入字节数组的方法
string类中有一个方法
byte[] getbytes(string charsetname) :把字符串转换为字节数组
文件的续写和换行:
换行:
windows:\r\n
linux:\n
mac:\r
追加写:使用两个参数的构造方法
fileoutputstream(file file, boolean append)
fileoutputstream(string name, boolean append)
参数:
file file,string name:写入数据的目的地
boolean append:追加写的开关,true:可以追加写(往之前的文件,继续写内容),fasle:不能追加写(覆盖之前的文件)
java.io.inputstream:字节输入流,是所有字节输入流的父类
公共的成员方法:
int read():读取一个字节并返回,没有字节返回-1.
int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。
void close() 关闭此文件输入流并释放与此流有关的所有系统资源。
java.io.fileinputstream:文件字节输入流
作用:把文件中的数据,以字节的方式读取到内存中
构造方法:
fileinputstream(string name)
fileinputstream(file file)
参数:读取的哪个文件(数据源)
string name:字符串的文件路径
file file:读取的文件
使用步骤:
1.创建字节输入流对象fileinputstream,并且绑定数据源
2.使用fileinputstream对象中的方法read,读取文件
3.释放资源
int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。
 明确:
  1.byte数组的作用:起到缓冲作用,一次可以往数组中缓冲多个字节,可以提高读取效率
  byte数组的长度:一般定义为1024(一kb字节)或者1024的整数倍
  2.返回值int是什么:每次读取的有效字节个数
文件的复制:读取文件采用一次读取一个字节的方式,写入文件采用一次写一个字节的方式
数据源:c:\\1.jpg
 数据目的地:d:\\1.jpg
操作步骤:
  1.创建字节输入流对象fileinputstream,并且绑定数据源
  2.创建字节输出流对象fileoutputstream,并且绑定数据目的地
  3.使用fileinputstream中的方法read,一次读取一个字节
  4.使用fileoutputstream中的方法write,一次写一个字节
  5.释放资源(先关写,后关读)
 1 public static void main(string[] args) throws ioexception { 2         long s = system.currenttimemillis(); 3         //1.创建字节输入流对象fileinputstream,并且绑定数据源 4         fileinputstream fis = new fileinputstream(c:\\1.jpg); 5         //2.创建字节输出流对象fileoutputstream,并且绑定数据目的地 6         fileoutputstream fos = new fileoutputstream(d:\\1.jpg); 7         //3.使用fileinputstream中的方法read,一次读取一个字节 8         int len = 0;//接收读取到的字节 9         while((len = fis.read())!=-1){10             //4.使用fileoutputstream中的方法write,一次写一个字节11             fos.write(len);12         }13         //5.释放资源(先关写,后关读)14         fos.close();15         fis.close();16         long e = system.currenttimemillis();17         system.out.println(e-s);18     }
文件的复制:读取文件采用字节数组缓冲读取,写入数据一次写入多个字节
*
* 数据源:c:\\1.jpg
* 数据目的地:d:\\1.jpg
*
* 操作步骤:
* 1.创建字节输入流对象fileinputstream,并且绑定数据源
* 2.创建字节输出流对象fileoutputstream,并且绑定数据目的地
* 3.使用fileinputstream中的方法read(byte[]),一次读取多个字节
* 4.使用fileoutputstream中的方法write(byte[],0,len),一次写多个字节
* 5.释放资源
 1 public static void main(string[] args) throws exception { 2         long s = system.currenttimemillis(); 3         //1.创建字节输入流对象fileinputstream,并且绑定数据源 4         fileinputstream fis =  new fileinputstream(c:\\z.zip); 5         //2.创建字节输出流对象fileoutputstream,并且绑定数据目的地 6         fileoutputstream fos = new fileoutputstream(d:\\z.zip); 7         //3.使用fileinputstream中的方法read(byte[]),一次读取多个字节 8         byte[] bytes = new byte[1024*100]; 9         int len = 0;//读取的字节有效个数10         while((len = fis.read(bytes))!=-1){11             //4.使用fileoutputstream中的方法write(byte[],0,len),一次写多个字节12             fos.write(bytes, 0, len);13         }14         //5.释放资源15         fos.close();16         fis.close();17         18         long e = new date().gettime();19         system.out.println(e-s);20     }
文件的复制:读取文件使用缓冲流+数组,写入数据使用缓冲流一次写入多个
*
* 数据源:c:\\1.jpg
* 数据目的地:d:\\1.jpg
*
* 操作步骤:
* 1.创建fileinputstream对象,绑定数据源
* 2.创建bufferedinputstream对象,构造方法中传入fileinputstream,提高fileinputstream的读取效率
* 3.创建fileoutputstream对象,绑定数据目的地
* 4.创建bufferedoutputstream对象,构造方法中传递fileoutputstream,提高fileoutputstream效率
* 5.使用bufferedinputstream中的方法read(byte[]),读取文件
* 6.使用bufferedoutputstream中的方法write(byte[],0,len),写入数据到缓冲区
* 7.使用bufferedoutputstream中的方法flush把缓冲区的数据,刷新到文件中
* 8.释放资源
 1 public static void main(string[] args) throws exception { 2         long s = system.currenttimemillis(); 3         //1.创建fileinputstream对象,绑定数据源 4         fileinputstream fis = new fileinputstream(c:\\z.zip); 5         //2.创建bufferedinputstream对象,构造方法中传入fileinputstream 6         bufferedinputstream bis = new bufferedinputstream(fis); 7         //3.创建fileoutputstream对象,绑定数据目的地 8         fileoutputstream fos = new fileoutputstream(d:\\z.zip); 9         //4.创建bufferedoutputstream对象,构造方法中传递fileoutputstream,提高fileoutputstream效率10         bufferedoutputstream bos = new bufferedoutputstream(fos);11         //5.使用bufferedinputstream中的方法read(byte[]),读取文件12         /*int len = 0;13         while((len = bis.read())!=-1){14             //6.使用bufferedoutputstream中的方法write(byte[],0,len),写入数据到缓冲区15             bos.write(len);16         }*/17         byte[] bytes = new byte[1024*100];18         int len = 0;19         while((len = bis.read(bytes))!=-1){20             fos.write(bytes, 0, len);21             fos.flush();22         }23         24         //8.释放资源25         bos.close();26         bis.close();27         28         long e = new date().gettime();29         system.out.println(e-s);30     }
java.io.bufferedoutputstream:字节缓冲输出流 extends outputstream
* 字节缓冲输出流作用:给基本流增加一个缓冲区,提高基本流的效率
*
* 继承自父类的公共的成员方法
* abstract  void write(int b) 写入一个字节
* void write(byte[] b) 写入字节数组
* void write(byte[] b, int off, int len) 写入字节数组,off是开始的索引,len写几个
* void close() 关闭此输出流并释放与此流有关的所有系统资源。
*
* 构造方法:
* bufferedoutputstream(outputstream out) 创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
* 参数:
* outputstream out:字节输出流,可以使用fileoutputstream
* 参数传递时哪个字节输出流,就会给哪个字节输出流增加一个缓冲区,提高这个流的效率
* 使用步骤:
* 1.创建fileoutputstream对象,绑定数据目的地
* 2.创建bufferedoutputstream对象,构造方法中传递fileoutputstream,提高fileoutputstream效率
* 3.使用bufferedoutputstream中的方法write,把数据写入到缓冲区中
* 4.使用bufferedoutputstream中的方法flush,把缓冲区中的数据,刷新到文件中
* 5.释放资源
 1  public static void main(string[] args) throws ioexception { 2         //1.创建fileoutputstream对象,绑定数据目的地 3         fileoutputstream fos = new fileoutputstream(buffered.txt); 4         //2.创建bufferedoutputstream对象,构造方法中传递fileoutputstream 5         bufferedoutputstream bos = new bufferedoutputstream(fos); 6         //3.使用bufferedoutputstream中的方法write,把数据写入到缓冲区中 7         bos.write(97); 8          9         bos.write(我是缓冲流.getbytes());10         //4.使用bufferedoutputstream中的方法flush,把缓冲区中的数据,刷新到文件中11         bos.flush();12         //5.释放资源13         bos.close();14     }
java.io.bufferedinputstream:字节缓冲输入流 extends inputstream
* 作用:给基本字节输入流增加一个缓冲区,提高基本字节输入流的效率
*
* 继承自父类的公共发的成员方法:
* int read():读取一个字节并返回,没有字节返回-1.
* int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。
* void close() 关闭此文件输入流并释放与此流有关的所有系统资源。
*
* 构造方法:
* bufferedinputstream(inputstream in) 创建一个 bufferedinputstream 并保存其参数,即输入流 in,以便将来使用。
* 参数:
* inputstream in:字节输入流,可以传递fileinputstream
* 参数传递的是哪个字节输入流对象,就会给哪个字节输入流对象增加一个缓冲区,提高该流的效率
*
* 使用步骤:
* 1.创建fileinputstream对象,绑定数据源
* 2.创建bufferedinputstream对象,构造方法中传入fileinputstream,提高fileinputstream的读取效率
* 3.使用bufferedinputstream中的方法read,读取文件
* 4.释放资源
*
* 总结:
* 字节流:操作的文件是非文本文件,文件的复制
* 字符流:操作的文件都是文本文件,一次读取一个字符,可以读取中文
* 文本文件:使用记事本打开,能看懂
 1 public static void main(string[] args) throws ioexception { 2         //1.创建fileinputstream对象,绑定数据源 3         fileinputstream fis = new fileinputstream(buffered.txt); 4         //2.创建bufferedinputstream对象,构造方法中传入fileinputstream 5         bufferedinputstream bis = new bufferedinputstream(fis); 6         //3.使用bufferedinputstream中的方法read,读取文件 7         //int read():读取一个字节并返回,没有字节返回-1. 8         /*int len = 0; 9         while((len = bis.read())!=-1){10             system.out.println((char)len);11         }*/12         13         //int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。14         byte[] bytes = new byte[1024];15         int len = 0;16         while((len = bis.read(bytes))!=-1){17             system.out.println(new string(bytes,0,len));             18         }19         20         //4.释放资源21         bis.close();22         system.out.println(-------------------);23         bufferedreader br = new bufferedreader(new filereader(buffered.txt));24         while((len = br.read())!=-1){25             system.out.println((char)len);26         }27     }
复制单层文件夹
*
* 数据源:c:\\demo
* 数据目的地:d:\\
*
* 操作流程:
* 1.判断d盘有没有demo文件夹,没有则创建
* 2.创建一个复制文件的方法
* 返回值类型:void
* 方法名:copyfile
* 参数列表:file src,file dest
* 3.遍历要复制的文件夹,获取文件夹中的每一个文件的路径(要复制文件的数据源)
* 4.使用file类中的方法getname拼接要复制文件的数据目的
* 5.调用copyfile复制的方法进行复制
 1 public static void main(string[] args) throws ioexception { 2         //1.判断d盘有没有demo文件夹,没有则创建 3         file file = new file(d:\\demo); 4         if(!file.exists()){ 5             file.mkdirs(); 6         } 7         //3.遍历要复制的文件夹,获取文件夹中的每一个文件的路径(要复制文件的数据源) 8         file srcdirectory = new file(c:\\demo); 9         file[] srcfiles = srcdirectory.listfiles();10         for (file srcfile : srcfiles) {11             //4.使用file类中的方法getname拼接要复制文件的数据目的12             string srcname = srcfile.getname();13             //使用file类的第三个构造方法创建目的地14             file destfile = new file(file, srcname);15             //5.调用copyfile复制的方法进行复制16             copyfile(srcfile, destfile);17         }18     }
以上就是io流的实例详解的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录