字节流

一、字节输出流OutputStream

OutputStream此抽象类,是表示输出字节流的所有类的超类。操作的数据都是字节,定义了输出字节流的基本共性功能方法。

FileOutputStream类

OutputStream有很多子类,其中子类FileOutputStream可用来写入数据到文件。

FileOutputStream类,即文件输出流,是用于将数据写入 File的输出流。

构造方法:

给文件中续写和换行

构造方法:

实例:

public class OutPutStreamDemo {
public static void main(String[] args) throws IOException {
//FileOutputStream的构造方法,如果文件存在,则覆盖
//如果文件不存在,则给你创建
FileOutputStream fos=new FileOutputStream("e:\\test\\bian.text",true);
/*fos.write(49);
fos.write(48);
fos.write(48);*/
byte[] bytes={-65,-66,-67,-68};//负数汉字,正数阿斯克吗表
fos.write(bytes,1,2);
fos.write("bianxiutong\r\n".getBytes());//转成字节数组
new String(bytes);//再转回字符串
fos.close();
}
}

 IO异常的处理

public static void main(String[] args) {
//释放资源全部放到finally里
//有异常一般是硬件上出现了问题
FileOutputStream fos=null;
try{
fos=new FileOutputStream("e:\\test\\demo.text");
fos.write(100);
}catch(IOException ex){
throw new RuntimeException("文件写入失败");
}finally {
try {
if(fos!=null)
fos.close();
} catch (IOException ex) {
throw new RuntimeException("文件关闭失败");
}
}
}

二、字节输入流InputStream

如何想把内存中的数据读到内存中,我们通过InputStream可以实现。InputStream此抽象类,是表示字节输入流的所有类的超类。定义了字节输入流的基本共性

功能方法。

int read():读取一个字节并返回,没有字节返回-1.

int read(byte[]): 读取一定量的字节数,并存储到字节数组中,返回读取到的字节数。

FileInputStream类

InputStream有很多子类,其中子类FileInputStream可用来读取文件内容。

FileInputStream 从文件系统中的某个文件中获得输入字节。

构造方法:

FileInputStream类读取数据read方法

在读取文件中的数据时,调用read方法,实现从文件中读取数据

public static void main(String[] args) throws IOException{
FileInputStream fis=new FileInputStream("e:\\test\\haha.txt");
int len=0;
while((len=fis.read())!=-1){
System.out.print((char)len);//避免指针下移,所以要定义一个成员变量来保留获取到的当前字节
}
/*int a=fis.read();
System.out.println((char)a);//将字节转换成字符
int b=fis.read();
System.out.println((char)b);
int c=fis.read();
System.out.println((char)c);
int d=fis.read();
System.out.println((char)d);
int e=fis.read();
System.out.println((char)e);*/
fis.close();
}

字符流

明确什么时候用字符流:当处理打开后的txt能看懂的文本文档时才用字符流

实例:

public class CharStreamDemo {
public static void main(String[] args) throws IOException {
//给文件中写中文
writeCNText();
//读取文件中的中文
readCNText();
}
//读取中文
public static void readCNText() throws IOException {
FileInputStream fis = new FileInputStream("c:\\cn.txt");
int ch = 0;
while((ch = fis.read())!=-1){
System.out.println(ch);
}
}
//写中文
public static void writeCNText() throws IOException {
FileOutputStream fos = new FileOutputStream("c:\\cn.txt");
fos.write("欢迎你".getBytes());
fos.close();
}
}

字符输入流reader

read():读取单个字符并返回

read(char[]):将数据读取到数组中,并返回读取的个数。

FileReader类

构造方法:

public static void method1() throws IOException{
FileReader fr=new FileReader("e:\\test\\haha.txt");
int len=0;
while((len=fr.read())!=-1){
System.out.print((char)len);
}
fr.close();
}
public static void method2() throws IOException{
FileReader fr=new FileReader("e:\\test\\haha.txt");
int len=0;
char[] ch=new char[1024];
while((len=fr.read(ch))!=-1){
System.out.println(new String(ch,0,len));
}
fr.close();
}

字符输入流writer

FileWriter类

构造方法:

FileWriter写入中文到文件中

public static void main(String[] args) throws IOException {
//写入中文字符
FileWriter fw=new FileWriter("e:\\test\\haha.txt");
fw.write("萨曼莎");
//fw.close();
fw.flush();
//flush():将流中的缓冲区缓冲的数据刷新到目的地中,刷新后,流还可以继续使用。
//close():关闭资源,但在关闭前会将缓冲区中的数据先刷新到目的地,否则丢失数据,然后在关闭流。流不可以使用。
//如果写入数据多,一定要一边写一边刷新,最后一次可以不刷新,由close完成刷新并关闭。
}

练习:

分别利用字节流和字符流复制同一张图片

public static void main(String[] args) throws IOException {
//method1();
method2();
}
//字节
public static void method1() throws IOException{
FileInputStream fis=new FileInputStream("e:\\test\\WallpaperStudio10-43897.jpg");
FileOutputStream fos=new FileOutputStream("e:\\test\\text\\haha.jpg");
int len=0;
byte[] bytes=new byte[1024];
while((len=fis.read(bytes))!=-1){
fos.write(bytes,0,len);
}
fis.close();
fos.close();
}
//字符
public static void method2() throws IOException{
FileReader fr=new FileReader("e:\\test\\WallpaperStudio10-43897.jpg");
FileWriter fw=new FileWriter("e:\\test\\text\\hahaha.jpg");
int len=0;
char[] ch=new char[1024];
while((len=fr.read(ch))!=-1){
fw.write(ch,0,len);
}
fr.close();
fw.close();
}
//结论:字节可以打开,字符打不开

要注意:

只有txt文档才需要用字符流来进行读写操作,其他都用字节流

IO—》字节流&字符流的更多相关文章

  1. -1-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流

      File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...

  2. IO流(字节流,字符流,缓冲流)

    一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流   这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图:   二:字符字节 ...

  3. IO之字符流

    什么是字符流 对于文本文件(.txt .java .c .cpp) 使用字符流处理 注意点 读入的文件一定要存在 否则就会报FileNotFoundException 异常的处理 为了保证流资源 一定 ...

  4. Java IO: 其他字符流(下)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...

  5. IO 复习字节流字符流拷贝文件

    /* 本地文件 URL 文件拷贝 *//*文本文件拷贝 可以通过 字符流,也可以通过字节流*/ /*二进制文件拷贝 只可以通过字节流*//* 希望这个例子能帮助搞懂 字符流与字节流的区别 */ imp ...

  6. Java之IO流(字节流,字符流)

    IO流和Properties IO流 IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键, 因而所有 I/O 的主体实际上是内置在操作系统中的.单独的 ...

  7. Java IO编程——字符流与字节流

    在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...

  8. 【C#IO 操作】stream 字节流|字符流 |比特流

    stream的简介 Stream 所有流的抽象基类. 流是字节序列的抽象,例如文件.输入/输出设备.进程中通信管道或 TCP/IP 套接字. Stream类及其派生类提供这些不同类型的输入和输出的一般 ...

  9. java IO之 字符流 (字符流 = 字节流 + 编码表) 装饰器模式

    字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在 ...

随机推荐

  1. MongoDB快速入门教程 (3.3)

    3.4.聚合 3.4.1.什么是聚合? MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*) 例如上图 ...

  2. dubbo源码解析之负载均衡

    在分布式系统中,负载均衡是必不可少的一个模块,dubbo 中提供了五种负载均衡的实现,在阅读这块源码之前,建议先学习负载均衡的基础知识.把看源码当做一个印证自己心中所想的过程,这样会得到事半功倍的效果 ...

  3. 浅谈bfs

    广搜(bfs) 定义 广度优先算法,简称BFS.是一种图形搜索演算法,简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点,如果发现目标,终止. 与dfs的相似之处与不同 结合深搜理解 相同点:都 ...

  4. Centos7解压Zip文件

    一.安装支持ZIP的工具 yum install -y unzip zip 二.解压zip文件 unzip 文件名.zip 三.压缩一个zip文件 zip 文件名.zip 文件夹名称或文件名称

  5. SQL语法LPAD和RPAD

    一.[LPAD左侧补齐] LPAD(str,len,padstr) LPAD(str,len,padstr) 返回字符串 str, 其左边由字符串padstr 填补到len 字符长度.假如str 的长 ...

  6. python 批量重命名文件

    # -*- coding: utf-8 -*- import os import sys def rename(): path = input("路径(例如D:\\\\picture):&q ...

  7. 阿里云Linux CentOS8.1 64位服务器安装LNMP(Linux+Nginx+MySQL+PHP) 并发调试之php-fpm配置及其与Nginx的通信

    一.php-fpm的配置 1. php-fpm的配置,首先要关注进程数量. php-fpm的进程管理方式有三种:static.dynamic.ondemand. static方式,开启固定数量(pm. ...

  8. 转载------一小时包教会 —— webpack 入门指南

    本文写的蛮好,转载地址:http://www.w2bc.com/Article/50764 其他的地址: http://webpack.github.io/docs/usage-with-gulp.h ...

  9. td文字溢出显示省略号

    昨天遇到移动端表格td中文字溢出问题,写了溢出隐藏样式,居然没起作用! { overflow:hidden;//溢出隐藏 white-space:nowrap;//文字不换行 text-overflo ...

  10. Java基础笔记05-06-07-08

    五.今日内容介绍 1.方法基础知识 2.方法高级内容 3.方法案例 01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 ...