一、字节流FileInputStream OutputStream

方式1:一个字节一个字节的读

       1. 创建一个输入流InputStream fin = new FileInputStream("e:\\igeek\\abc.txt");1.2 从流中读取数据int data = 0;while(data!=-1){data = fin.read();System.out.println(data+" ");}System.out.println();

方式2:将内容读入到字节数组

        byte[] by = new byte[1024];// 定义一个字节数组(缓冲区)int len = fin.read(by);// 从流中读取数据存放到by中,返回具体读了多长数据System.out.println("读了"+len+"字节,内容:"+Arrays.toString(by));byte[] by = new byte[5];int len = 0;while(len!=-1){len = fin.read(by);System.out.println("读了"+len+"字节,内容:"+Arrays.toString(by));}关闭文件fin.close();

2. 创建一个输出流

      OutputStream fos = new FileOutputStream("e:\\igeek\\abc.txt");21 往流中写入数据方式1:fos.write('a');方式2:byte[] by1 = {97,98,99,100,101};// a b c d efos.write(by1);方式3:fos.write(by1, 2, 3);2.3.关闭流fos.close();

二、字符流 Writer Reader

字符流 Writer Reader

 1. 打开文件(读取文件)Reader r = new FileReader("e:\\igeek\\a1.txt");2. 读取内容读取单个字符将字符读入数组。 方式1:一个一个读int d=0;while(d!=-1) {d = r.read();if(d>0){char c = (char)d;System.out.print(c);}}方式2:读到字符数组中char[] buf = new char[1024];// 缓冲区int len = 0;while(len>-1){len = r.read(buf);System.out.println("读到长度="+len);if(len>0){String str = new String(buf);System.out.println(str);}}        3. 关闭文件r.close();// 1. 打开文件(写入文件)Writer w = new FileWriter("e:\\igeek\\a1.txt");// 2. 写入信息w.write("Hello,你好!小胖!");// 3. 关闭文件w.close();

三、缓冲流 BufferedInputStream BufferedOutputStream BufferedReader BufferedWriter

缓冲字节输入流 缓冲字节输出流 BufferedInputStream BufferedOutputStream 处理流    (只是一个辅助的处理流,不能单独存在);

缓冲字符输入流 缓冲字符输出流 BufferedReader BufferedWriter;

public static void main(String[] args) throws IOException {long t1 = System.currentTimeMillis();InputStream f1 = new BufferedInputStream(new FileInputStream("e:\\igeek\\test.mp4"));OutputStream f2 = new BufferedOutputStream(new FileOutputStream("e:\\igeek\\test2.mp4"));byte[] by = new byte[1024];int len = 0;while(len!=-1){// 读取数据到by中,返回的是具体读了多长的数据len = f1.read(by);if(len>0){// 将读取出来的数据写入到新文件中            f2.write(by, 0, len);}}f1.close();f2.close();long t2 = System.currentTimeMillis();System.out.println("耗费了"+(t2-t1)+"ms");// 256 耗费了1824ms// 1024 耗费了537ms// 2048 耗费了338ms// 10240 耗费了144ms// 102400 耗费了105ms// 1024000 耗费了162ms// 1024 耗费了289ms// 10240 耗费了207ms}

四、数据流 DataInputStream DataOutputStream

数据流 (处理流)DataInputStream DataOutputStream

private static void testReadData() throws IOException {// 1. 打开文件DataInputStream input = new DataInputStream(new FileInputStream("e:\\igeek\\data1.txt"));// 2. 读取数据int i = input.readInt();byte b = input.readByte();float f = input.readFloat();boolean b2 = input.readBoolean();double d = input.readDouble();String str = input.readUTF();System.out.println(i);System.out.println(b);System.out.println(f);System.out.println(b2);System.out.println(d);System.out.println(str);// 3. 关闭文件input.close();}private static void testWriteData() throws IOException {// TODO Auto-generated method stub// 1. 打开文件DataOutputStream output = new DataOutputStream(new FileOutputStream("e:\\igeek\\data1.txt"));// 2. 写入数据output.writeInt(10);output.writeByte(3);output.writeFloat(3.1415F);output.writeBoolean(true);output.writeDouble(3.1415);output.writeUTF("你好");// 3. 关闭文件output.close();}

五、对象流 ObjectInputStream ObjectOutputStream

对象流 ObjectInputStream ObjectOutputStream

类对象要能够写入到对象流需要序列化必须要实现Serializable接口!

 创建一个Dog类

public class Dog implements Serializable{String name;int age;// 这个属性不想存档,前面加transient关键字transient boolean isOut;public Dog(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog [name=" + name + ", age=" + age + "]";}}

对象写入读出:

public class ObjectStreamDemo {public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {// TODO Auto-generated method stubtestWrite();testRead();}private static void testRead() throws FileNotFoundException, IOException, ClassNotFoundException {// 1. 创建流ObjectInputStream in = new ObjectInputStream(new FileInputStream("e:\\igeek\\data2.txt"));// 2. 读取数据Dog d1 = (Dog)in.readObject();Dog d2 = (Dog)in.readObject();System.out.println(d1);System.out.println(d2);// 3. 关闭流in.close();}private static void testWrite() throws FileNotFoundException, IOException {Dog d1 = new Dog("小白",3);Dog d2 = new Dog("小黑",5);// 1. 创建流ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("e:\\igeek\\data2.txt"));  // 2. 写入数据o.writeObject(d1);o.writeObject(d2);// 3. 关闭流o.close();}}

六、内存流 ByteArrayInputStream ByteArrayOutputStream  CharArrayWriter CharArrayReader

      ByteArrayInputStream ByteArrayOutputStream

  // 用流的方式处理字节数组ByteArrayOutputStream o = new ByteArrayOutputStream();while(o.size()<10){// 从我们输入的内容中读一个字节的数据int data = System.in.read();// 将这个数据写入到o中o.write(data);}byte[] bytes = o.toByteArray();System.out.println(Arrays.toString(bytes));// 原本:// 1. 定义数组(先定了数组的大小)// 2. 将信息放入数组(自己得确定索引)// 流的方式:// 1. 创建一个字节输出流对象// 2. 往里面写入字节信息// 3. 通过toByteArray()得到一个字节数组// 输入流:byte[] arr = {100,101,102,103,104};ByteArrayInputStream in = new ByteArrayInputStream(arr); int b = 0;while(b!=-1){b = in.read();if(b!=-1){System.out.print(b+" ");}}System.out.println();

用流的方式操作字符数组 CharArrayWriter CharArrayReader:

        CharArrayWriter w = new CharArrayWriter();w.write("你好");w.write("I love you!");char[] data  = w.toCharArray();System.out.println(Arrays.toString(data));char[] charArr = {'哈','喽','I','l'};CharArrayReader r = new CharArrayReader(charArr);System.out.println((char)r.read());System.out.println((char)r.read());

    StringWriter StringReader :

       // 输出流StringWriter w = new StringWriter();w.write("你好");w.write(",祖国");System.out.println(w.toString());// 输入流StringReader r = new StringReader("你好,123abc");int d = 0;while(d>-1){d = r.read();System.out.println(d);if(d>0){char c= (char)d;System.out.println(c);}}r.close();// 可以省略

七.字符流文件拷贝demo

/** 使用字符流拷贝一个文件* 字符流:字节流+默认编码* 使用字符输入流取出文件的信息,字符输入流会自动对读到的数据进行解码(解码方式默认是UTF-8)* 之后使用字符输出流将读取到的数据写出到文件中,写出之前会自动对数据进行编码(UTF-8)* 因此,如果拷贝图片,会在编码解码过程中出现数据的丢失,导致拷贝后的图片无法打开* 使用字节流可以拷贝任意类型的文件,字节流直接拷贝底层二进制文件,不做任何处理* 总结:什么时候使用字符流* 如果可以使用系统自带的文本编辑工具打开并且不乱码的文件,都可以使用字符流* 其余的均使用字节流* */
public class Demo4 {public static void main(String[] args) throws IOException{//1、创建字符输入流对象FileReader fr = new FileReader(new File("shi.jpg"));//2、创建字符输出流对象FileWriter fw = new FileWriter(new File("/Users/igeekhome/shishi.jpg"));/*int hasRead = -1;while((hasRead = fr.read())!=-1) {//hasRead :读到的内容fw.write(hasRead);}*/char[] c = new char[1024];int length = -1;while((length = fr.read(c)) != -1) {fw.write(c, 0, length);}fw.close();fr.close();}}

IO流使用示例,字符流文件拷贝demo相关推荐

  1. java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝

    接上一篇的字节流,以下主要介绍字符流.字符流和字节流的差别以及文件复制拷贝.在程序中一个字符等于两个字节.而一个汉字占俩个字节(一般有限面试会问:一个char是否能存下一个汉字,答案当然是能了,一个c ...

  2. Java基础---认识IO流---字节流、字符流---缓冲流---转换流

    一.认识IO流 I/O就是用于设备之间进行数据交互的对象所属的类型 IO流的体系结构:根据分类,有四种流对象类型 字节流:可以直接操作字节信息的流对象 字节输入流:InputStream 字节输出流: ...

  3. java byte char io流_吃透Java IO:字节流、字符流、缓冲流

    前言有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身, ...

  4. 吃透Java IO:字节流、字符流、缓冲流

    IO流是Java中的一个重要构成部分,也是我们经常打交道的. 下面几个问题(问题还会继续补充),如果你能对答如流,那么恭喜你,IO知识掌握得很好,可以立即关闭文章.反之,你可以在后面得文章中寻找答案. ...

  5. 【Java基础】吃透Java IO:字节流、字符流、缓冲流

    文章目录 [Java基础-3]吃透Java IO:字节流.字符流.缓冲流 一.初识java IO 1.1 IO流分类 1.1.1 输入流与输出流 1.1.2 字节流与字符流 1.1.3 节点流和处理流 ...

  6. java字符流字节流场景_【120期】Java IO:字节流、字符流、缓冲流

    IO流是Java中的一个重要构成部分,也是我们经常打交道的.这篇关于Java IO的博文干货满满,堪称全网前三(请轻喷!) 下面几个问题(问题还会继续补充),如果你能对答如流,那么恭喜你,IO知识掌握 ...

  7. fileoutputstream 字节乱码_吃透Java IO:字节流、字符流、缓冲流

    前言 有人曾问fastjson的作者(阿里技术专家高铁):"你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?" 高铁答道:"因为热爱本身 ...

  8. Java IO 3-字节流与字符流的区别

    java以流的形式操纵IO,又将流分为两种:字节流与字符流,对JavaIO流操作不清楚的可以参考 Java IO 2-字节流与字符流 那字节流与字符流之间又有什么区别呢 区别 字节流用于操作文件数据, ...

  9. lo流知识(字节流 字符流)

    概述:lo流分为字节流字符流 字节流分为:输出流和输入流 输入流:从文件到控制台(把数据从其他设备输到内存中去)读操作 输出流:从控制台到文件(把数据从内存上输出到别的地方)写操作 按数据类型分: 字 ...

最新文章

  1. 通过Mellanox ConnectX NIC使用XDP加速
  2. 通过微软的cors类库,让ASP.NET Web API 支持 CORS
  3. 安卓ps2模拟器_安卓PSP模拟器评测:合金装备 和平步行者
  4. java opencv4.5 人脸对比_2020大数据Java面试总结(未完待续)
  5. 【Java基础篇】Unicode、进制转换
  6. java linkedlist源码分析_LinkedList源码分析(基于Java8)
  7. php $that,PHP中$this和$that指针使用实例
  8. 资治通鉴-5 商鞅的得与失
  9. windows server 2003 工具资源命令集
  10. 常规诊疗条件下比较依那西普生物类似药(益赛普)与阿达木、英夫利西对RA的疗效[EULAR2015_SAT0360]...
  11. 计算机基础及word实验原理,大学计算机基础实验3-Word 文档的图文混排
  12. 梯度下降和正规方程的区别
  13. 用小白鼠试验毒水问题
  14. vacuum命令详解
  15. 【STM32F407】第8章 ThreadX NetXDUO之TCP服务器
  16. 到底「美图秀秀」是艺术家,还是会 P 图的姑娘算艺术家?
  17. excel统计求和:如何在合并后的单元格中复制求和公式
  18. 中科院声学所ZJ-3型压电测试仪
  19. 天堂2单机服务端开外网整理篇
  20. Win11没有休眠模式怎么办 Win11没有休眠模式解决方法

热门文章

  1. Android Studio开发实用网站收集
  2. 静态代码块的执行顺序
  3. XML_CPP_资料_libXml2_01
  4. .net ServiceStack.Redis 性能调优
  5. JQuery学习记录——jQuery对象和DOM对象的转换
  6. [转载] 七龙珠第一部——第029话 冒险再度开始
  7. Microsoft Visual Studio 2005 怎么更改安装路径?
  8. c#编程指南(十二) 平台调用P-INVOKE完全掌握, 结构体边界对齐和内存布局
  9. DELL R430服务器做raid5以及安装操作系统过程
  10. ubuntu上 grafana + influxdb + telegraf 安装配置