Java中IO流详解

问题:

1、IO解决的问题

2、输入字节流和输出字节流

3、输入字符流和输出字符流

4、转换流的作用

5、案例代码

1、IO解决问题

解决设备与设备之间的数据传输问题,比如 硬盘—->内存 内存—–>硬盘

2、字节流

输入字节流

——–|InputStream 所有输入字节流的基类,抽象类

———–|FileInputStream 读取文件的输入字节流

———–|BufferedInputStream 缓冲输入字节流,该类内部其实就是维护一个8KB字节数组而已。该类出现的目的是为了提高读取文件数据的效率

输出字节流

——–|OutputStream 所有输出字节流的基类,抽象类

———–| FileOutputStream 向文件输出数据的输出字节流

———–| BufferedOutputStream 缓冲输出字节流,该类出现的目的是为了提高向文件写数据的效率,该类内部其实也是维护了一个8KB的字节数据而已

什么情况使用字节流:读取到数据不需要经过编码或者解码的情况下这时候使用字节流,比如:图片数据

3、字符流

字符流=字节流+编码(解码)

输入字符流

——-|Reader 所有输入字符流的基类,抽象类

———|FileReader 读取文件字符的输入字符流

———|BufferedReader 缓冲输入字符流,该类出现的目的是为了提高读取文件字符的效率并且拓展了功能(readLine()),它内部其实就是维护了一个8192个长度的数组

输出字符流

——-|Writer 所有输出字符流的基类,抽象类

———|FileWriter 向文件输出字符数据的输出字符流

———|BufferedWriter 缓冲输出字符流,该类出现的目的是为了提高写文件字符的效率并且拓展了功能(newLine()),它内部其实就是维护了一个8192个长度的数组

什么情况下使用字符流:如果读写的都是字符数据,这时候我们就使用字符流

4、转换流

输入字节流的转换流 :输入字节流 转换成输入字符流

InputStreamReader

输出字节流的转换流

OutputStreamWriter

转换流的作用

1、可以把对应的字节流转换成字符流使用

2、可以指定码表进行读写文件的数据

FileReader FileWriter这2个类默认是使用的是gbk编码表,不能由你指定码表

5、案例代码

package cn.xlucas.io;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.InetAddress;
import java.net.Socket;
public class IoDemo1 {
 public static void main(String[] args) throws IOException {
  //testInput();
  writeFile();
  readFile();
 }
 //将文件的内容读取出来
 public static void readFile() throws IOException{
  //建立文件与程序的输入数据通道
  FileInputStream filein=new FileInputStream("F:\\a.txt");
  //创建输入字节流的转换流并且指定码表进行读取
  InputStreamReader inputin=new InputStreamReader(filein,"utf-8");
  //FileReader filein =new FileReader("F:\\a.txt");//这种会出现乱码的情况
  int context=0;
  while((context=inputin.read())!=-1){
   System.out.print((char)context);
  }
  //关闭资源
  inputin.close();
  filein.close();
 }
 //将内容用utf-8的格式写入文件中
 public static void writeFile() throws IOException{
  //建立了文件与程序的数据 通道
  FileOutputStream fileout=new FileOutputStream("F:\\a.txt");
  //创建一个输出字节流的转换流并且指定码表进行写数据
  OutputStreamWriter output=new OutputStreamWriter(fileout,"utf-8");
  output.write("中国");
  output.close();
  fileout.close();
 }
 public static void testOutput() throws Exception{
  Socket socket = new Socket(InetAddress.getLocalHost(),9090);
  //获取到socket的输出流对象。
  OutputStream outputStream = socket.getOutputStream();
  //把输出字节流转换成输出字符流
  OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream);
  outputStreamWriter.write("不饿!");
 }
 public static void testInput() throws IOException{
  InputStream in=System.in;
  //输入转换流
  InputStreamReader input=new InputStreamReader(in);
  BufferedReader buffer=new BufferedReader(input);//用来做缓冲
  //int context =in.read();// 每次只会读取到一个字节的数据
  System.out.print(buffer.readLine());//读取一行数据
  //关闭字眼
  buffer.close();
  input.close();
 }
}

以上就是本篇文章内容,需要的朋友可以参考下

(0)

相关推荐

  • java中的connection reset 异常处理分析

    在Java中常看见的几个connection rest exception, Broken pipe, Connection reset,Connection reset by peer Socked reset case Linux中会有2个常见的sock reset 情况下的错误代码 ECONNRESET 该错误被描述为"connection reset by peer",即"对方复位连接",这种情况一般发生在服务进程较客户进程提前终止.当服务进程终止时会向客户

  • java 使用ImageIO.writer从BufferedImage生成jpeg图像遇到问题总结及解决

    java 使用ImageIO.writer从BufferedImage生成jpeg图像遇到问题总结及解决 生成jpeg图像这是个非常非常简单的东西了,网上很多介绍是直接用com.sun.image.codec.jpeg.JPEGImageEncoder来实现,如下: /** * 将原图压缩生成jpeg格式的数据 * @param source * @return */ public static byte[] wirteJPEGBytes(BufferedImage source){ if(nu

  • Java Exception 捕获和显示实例详解

    Java Exception 捕获和显示实例详解 在进行Java B/S架构开发时,经常有这样的场景:后端处理业务逻辑,前端负责展示,当后端处理出现异常时,如何把错误信息展示给前台呢?错误信息栈通常很多,对开发人员查找问题比较方便,但对于客户来说,打一堆的错误信息,无疑是对他们感官的一种摧残,如何捕捉最重要的信息显示到客户端呢?该信息要求简明扼要,指向出错点,且应指明异常的类型. 在很多情况下Exception的 getMessage()方法返回空的值,如果使用该方式则会在前端显示空值.我们要显

  • java IO 文件操作方法总结

    java IO 文件操作方法总结 对于输入输出的理解: 输入输出,以程序为参考点,外部数据进入程序,通过输入流完成.程序将数据给外部设备,通过输出流完成. 文件Io的操作 //获取文件 File file=new File("d:/a.txt"); file.getName()--String//文件名 file.getPath()--String//路径 file.getAbsolutePath()--String//全路径 file.getParent()--String//所在文

  • java 中Collection存储器详解及简单实例

    本篇仅为了巩固一下基础,回忆一下存储的这两个常用的东东- 一.Collection 1.存储对象可以考虑:①数组②结合 2.数组存储对象的特点:Student[] stu = new Student[20]; stu[0] = new Stutdent();-- 弊端:①一旦创建,其长度不可变 ②真实的数组存放的对象的个数是不可知的 3.集合 Collection接口     丨------List接口:存储有序,可以重复的元素         丨-------ArrayList(主要的实现类,

  • Java IO中字节流复制图片实现代码

    Java IO--字节流复制图片实例 字节流用来操作图片.视屏.音频(进制文件) 实例代码: package learn; import java.io.*; public class Learn{ public static void main(String[] args) throws IOException { File file1=new File("D:/a.jpg"); File file2=new File("D:/b.jpg"); byte[] b=

  • Android Studio启动报错Java 1.8 or later is required的解决方法

    错误描述 在公司电脑上运行Android Studio 2.2已经有一段时间了,但是自己的笔记本上还是用的Android Studio 1.5,今天晚上下了一个Android Studio 2.2压缩包,解压后启动Android Studio 2.2就报错了,错误如下所示: Unsupported Java Version : Cannot start under Java 1.7.0_04-b22 : Java 1.8 or later is required. 分析错误 查看当前电脑的Jav

  • 浅谈Java中注解Annotation的定义、使用、解析

    此例子,用于说明如何在Java中对"注解 Annotation"的定义.使用和解析的操作.注解一般用于自定义开发框架中,至于为什么使用,此处不作过多说明,这里只说明如何使用,以作备记.下面例子已测试,可以正常运行通过. 1.注解自定义. 这里定义两个注解,分别用来注解类和注解属性. package cc.rulian.ann; import java.lang.annotation.ElementType; import java.lang.annotation.Retention;

  • Java中IO流详解

    问题: 1.IO解决的问题 2.输入字节流和输出字节流 3.输入字符流和输出字符流 4.转换流的作用 5.案例代码 1.IO解决问题 解决设备与设备之间的数据传输问题,比如 硬盘-->内存 内存-–>硬盘 2.字节流 输入字节流 --–|InputStream 所有输入字节流的基类,抽象类 ---–|FileInputStream 读取文件的输入字节流 ---–|BufferedInputStream 缓冲输入字节流,该类内部其实就是维护一个8KB字节数组而已.该类出现的目的是为了提高读取文件

  • Java中IO流 字节流实例详解

    Java中IO流 字节流实例详解 IO流(输入流.输出流),又分为字节流.字符流. 流是磁盘或其它外围设备中存储的数据的源点或终点. 输入流:程序从输入流读取数据源.数据源包括外界(键盘.文件.网络-),即是将数据源读入到程序的通信通道. 输出流:程序向输出流写入数据.将程序中的数据输出到外界(显示器.打印机.文件.网络-)的通信通道. 字节流 1.InputStream.OutputStream InputStream抽象了应用程序读取数据的方式 OutputStream抽象了应用程序写出数据

  • Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 RandomAccessFile java提供的对文件内容的访问,既可以读文件,也可以写文件. 支持随机访问文件,可以访问文件的任意位置. java文件模型,在硬盘上的文件是byte byte byte存储的,是数据的集合 打开文件,有两种模式,"rw"读写."r"只读:RandomAccessFile raf = new RandomAccessFile(file, "rw");,文

  • Java中文件的读写方法之IO流详解

    目录 1.File类 1.1File类概述和构造方法 1.2File类创建功能 1.3File类判断和获取功能 1.4File类删除功能 2.递归 2.1递归 2.2递归求阶乘 2.3递归遍历目录 3.IO流 3.1 IO流概述和分类 3.2字节流写数据 3.3字节流写数据的三种方式 3.4字节流写数据的两个小问题 3.5字节流写数据加异常处理 3.6字节流读数据(一次读一个字节数据) 3.7字节流复制文本文件 3.8字节流读数据(一次读一个字节数组数据) 3.9字节流复制图片 总结 1.Fil

  • Java中的HashSet详解和使用示例_动力节点Java学院整理

    第1部分 HashSet介绍 HashSet 简介 HashSet 是一个没有重复元素的集合. 它是由HashMap实现的,不保证元素的顺序,而且HashSet允许使用 null 元素. HashSet是非同步的.如果多个线程同时访问一个哈希 set,而其中至少一个线程修改了该 set,那么它必须 保持外部同步.这通常是通过对自然封装该 set 的对象执行同步操作来完成的.如果不存在这样的对象,则应该使用 Collections.synchronizedSet 方法来"包装" set.

  • Java 中的HashMap详解和使用示例_动力节点Java学院整理

    第1部分 HashMap介绍 HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射. HashMap 继承于AbstractMap,实现了Map.Cloneable.java.io.Serializable接口. HashMap 的实现不是同步的,这意味着它不是线程安全的.它的key.value都可以为null.此外,HashMap中的映射不是有序的. HashMap 的实例有两个参数影响其性能:"初始容量" 和 "加载因子&quo

  • Java中File类方法详解以及实践

    目录 File类概述 File类常用构造器 File类常用方法 常用方法示例 createTempFile临时文件创建示例 FilenameFilter文件过滤器示例 总结 File类概述 File类是java.io包下代表与平台无关的文件和目录.File可以新建.删除.重命名文件和目录,但是不能访问文件内容本身,如果需要访问内容的话,需要通过输入/输出流进行访问. File类可以使用文件路径字符串创建File实例,路径既可以是绝对路径,也可以是相对路径.一般相对路径的话是由系统属性user.d

  • Java中的静态内部类详解及代码示例

    1. 什么是静态内部类 在Java中有静态代码块.静态变量.静态方法,当然也有静态类,但Java中的静态类只能是Java的内部类,也称为静态嵌套类.静态内部类的定义如下: public class OuterClass { static class StaticInnerClass { ... } } 在介绍静态内部类之前,首先要弄清楚静态内部类与Java其它内部类的区别. 2. 内部类 什么是内部类?将一个类的定义放在另一个类的内部,就是内部类.Java的内部类主要分为成员内部类.局部内部类.

  • java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * @author fhd001 */ public class RegexTest { public static void main(String[] args) { /* * 普通字符 */ String str1 = "abc45abc345"; String[]arr1 = str1

  • Java中IO流文件读取、写入和复制的实例

    //构造文件File类 File f=new File(fileName); //判断是否为目录 f.isDirectory(); //获取目录下的文件名 String[] fileName=f.list(); //获取目录下的文件 File[] files=f.listFiles(); 1.Java怎么读取文件 package com.yyb.file; import java.io.File; import java.io.FileInputStream; import java.io.In

随机推荐