IO—》字节流&字符流
字节流
一、字节输出流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-4 java io java流 常用流 分类 File类 文件 字节流 字符流 缓冲流 内存操作流 合并序列流
File类 •文件和目录路径名的抽象表示形式 构造方法 •public File(String pathname) •public File(String parent,Stringchild) ...
- IO流(字节流,字符流,缓冲流)
一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流 这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图: 二:字符字节 ...
- IO之字符流
什么是字符流 对于文本文件(.txt .java .c .cpp) 使用字符流处理 注意点 读入的文件一定要存在 否则就会报FileNotFoundException 异常的处理 为了保证流资源 一定 ...
- Java IO: 其他字符流(下)
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...
- IO 复习字节流字符流拷贝文件
/* 本地文件 URL 文件拷贝 *//*文本文件拷贝 可以通过 字符流,也可以通过字节流*/ /*二进制文件拷贝 只可以通过字节流*//* 希望这个例子能帮助搞懂 字符流与字节流的区别 */ imp ...
- Java之IO流(字节流,字符流)
IO流和Properties IO流 IO流是指计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键, 因而所有 I/O 的主体实际上是内置在操作系统中的.单独的 ...
- Java IO编程——字符流与字节流
在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...
- 【C#IO 操作】stream 字节流|字符流 |比特流
stream的简介 Stream 所有流的抽象基类. 流是字节序列的抽象,例如文件.输入/输出设备.进程中通信管道或 TCP/IP 套接字. Stream类及其派生类提供这些不同类型的输入和输出的一般 ...
- java IO之 字符流 (字符流 = 字节流 + 编码表) 装饰器模式
字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在 ...
随机推荐
- 痞子衡嵌入式:kFlashFile v1.0 - 一个基于Flash的掉电数据存取方案
大家好,我是痞子衡,是正经搞技术的痞子.今天给大家带来的是痞子衡的个人小项目 - kFlashFile. 痞子衡最近在参与一个基于 i.MXRT1170 的项目,项目有个需求,需要在 Flash 里实 ...
- 一.5.序列化应用之服务器制造厂与型号app功能
1.环境准备: (python36env) [vagrant@CentOS7 apps]$ django-admin startapp manufacturer (1)激活:'manufacturer ...
- iview表单验证--数字必填+校验
直接使用: { required: true, type:"integer", message:"请填写整数", trigger: "blur&quo ...
- 初步了解JVM
先看一眼JVM虚拟机运行时的内存模型: 1.方法区 Perm(永久代.非堆) 2.虚拟机栈 3.本地方法栈 (Native方法) 4.堆 5.程序计数器 1 首先的问题是:jvm如何知道那些对象需要回 ...
- 常用API - 字符串
String类 java.lang.String类代表字符串 Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现. 特点 字符串的内容不可变!! 因为 St ...
- 通过手写服务器的方式,立体学习Http
前言 Http我们都已经耳熟能详了,而关于Http学习的文章网上有很多,各个知识点的讲解也可说是深入浅出.然而,学习过后,我们对Http还是一知半解.问题出在了哪? Http是一个客户机与服务器之间的 ...
- java 面向对象(十四):面向对象的特征二:继承性 (三) 关键字:super以及子类对象实例化全过程
关键字:super 1.super 关键字可以理解为:父类的2.可以用来调用的结构:属性.方法.构造器3.super调用属性.方法:3.1 我们可以在子类的方法或构造器中.通过使用"supe ...
- 机器学习实战基础(十三):sklearn中的数据预处理和特征工程(六)特征选择 feature_selection 简介
当数据预处理完成后,我们就要开始进行特征工程了. 在做特征选择之前,有三件非常重要的事:跟数据提供者开会!跟数据提供者开会!跟数据提供者开会!一定要抓住给你提供数据的人,尤其是理解业务和数据含义的人, ...
- Python数据可视化:画饼状图、折线图、圈图
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. from math import pi import matplotlib ...
- md5加密密码
using System.Security.Cryptography; public string GetStrMd5(string ConvertString) { MD5CryptoService ...