IO流——常用IO流详解
1:字节流
字节流:用于处理以字节为单位的二进制文件(如音乐,图片等)
InputStream 是抽象类 它的对应子类FileInputStream可以被实例化
构造方法:
FileInputStream常用构造方法:
FileInputStream(File file) :通过File对象创建FileInputStream对象。
FileInputStream(String name) :通过文件(非“目录”)路径创建FileInputStream对象。
常用方法:
int read():从输入流中读取单个字节的数据;如果已到达文件末尾,则返回 -1。
int read(byte[] b):从输入流中将最多b.length个字节的数据读入一个byte数组中,以整数形 式返回存入数组中的实际字节个数;如果已到达文件末尾,则返回 -1。 void close():关闭此文件输入流并释放与此流有关的所有系统资源
OutputStream是抽象类,它的子类FileOutputStream可以被实例化
构造方法:
FileOutputStream(File file) :通过File对象创建FileOutputStream对象。
FileOutputStream(String name) :通过文件(非“目录”)路径创建 FileOutputStream对象。
FileOutputStream(File file, boolean append):通过File对象创建 FileOutputStream对象;第二个参数如果为true ,则字节将被写入文件的末尾而不是开头
常用方法:
FileOutputStream常用方法:
void write(int b):将指定的单个字节数据写入此文件输出流。
void write(byte[] b, int off, int len):将byte数组中从off开始的len个字节写入此文件输出流。
void flush():刷新字节输出流并强制写出缓冲内所有字节数据。
void close():关闭此文件输出流并释放与此流有关的所有系统资源。
package com.xt.io; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class FileInputStreamTest { public static void main(String[] args) {
FileInputStream fis=null;
FileOutputStream fos=null;
try {
/**
* 读和写都是站在程序的角度来看的,读文件用FileInputStream 写文件用FileOutPutStream
*/
fis=new FileInputStream("C:\\中心.jpg");
fos=new FileOutputStream("D:\\重要.jpg");
//第一种方法:一个字节一个字节的读
/*int date;
while((date=fis.read())!=-1) {
System.out.println(date);
}*/
//第二种方法:1024个字节1024个字节的读
byte[] bufferDate=new byte[1024];
int length;
while((length=fis.read(bufferDate))!=-1) {
fos.write(bufferDate, 0, length);
}
fos.flush();//强制全部读出来所有的数据
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
//释放资源
if(fos!=null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
} if(fis!=null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
1.1:缓冲字节流
缓冲输入流:BufferedInputStream BufferedInputStream(InputStream in):
缓冲输出流:BufferedOutputStream BufferedOutputStream(OutputStream out)
package com.xt.io; import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class BufferInputStreamTest { public static void main(String[] args) {
try {
BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream("C:\\中心.jpg"));
BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream("D:\\重要k.jpg")); /*int b;
while((b=bufferedInputStream.read())!=-1) {
bufferedOutputStream.write(b);
}*/ byte[] bufferByte=new byte[1024];
int length;
while((length=bufferedInputStream.read(bufferByte))!=-1) {
bufferedOutputStream.write(bufferByte, 0, length);
}
bufferedOutputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2:字符流
Reader是抽象类,它的子类FileReader 可以被实例化
构造方法:
FileReader常用构造方法: FileReader(File file) :通过File对象创建FileReader对象。
FileReader(String fileName) :通过文件(非“目录”)路径创建FileReader对象。
常用方法:
FileReader常用方法: int read():从输入流中读取单个字符的数据,如果已到达流的末尾,则返回 -1 。
int read(char[] cbuf):从输入流中将最多cbuf.length个字符的数据读入一个char数组中,以整数形式返回存入
数组中的实际字节个数,如果已到达流的末尾,则返回 -1 。
void close():关闭此文件输入流并释放与此流有关的所有系统资源。
Writer是抽象类,它的子类FileWriter可以被实例化
构造方法:
FileWriter(File file) :通过File对象创建FileWriter对象。
FileWriter(String fileName) :通过文件(非“目录”)路径创建FileWriter对象。
FileWriter(File file, boolean append):通过File对象创建FileWriter对象;第二个参数如果为true ,则字节将被写入文件的末尾而不是开头。
常用方法:
void write(int c):将指定的单个字符数据写入此文件输出流。
void write(char[] cbuf, int off, int len):将char数组中从off开始的len个字符写入此文件输出流。
void flush():刷新字符输出流缓冲。
void close():关闭此文件输出流并释放与此流有关的所有系统资源。
package com.xt.io; import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer; class FileReaderAndFileWriter { public static void main(String[] args) {
Reader reader=null;
Writer writer=null;
try {
reader=new FileReader("C:\\unintall.log");
writer=new FileWriter("D:\\unintall.log"); char[] buffer=new char[1024];
int length;
while((length=reader.read(buffer))!=-1) {
writer.write(buffer, 0, length);
}
writer.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
if(writer!=null) {
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(reader!=null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} }
}
2.1:缓冲字符流
BufferedReader:缓冲字符输入流 BufferedReader(Reader in):
BufferedWriter :缓冲字符输出流 BufferedWriter(Writer out)
package com.xt.io; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class BufferReaderTest { public static void main(String[] args) {
try {
BufferedReader bufferedReader =new BufferedReader(new FileReader("C:\\unintall.log"));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter("D:\\unintall.log")); //第一种方法
// int date;
// while((date=bufferedReader.read())!=-1) {
// bufferedWriter.write(date);
// }
// bufferedWriter.flush();
//
//
//第二种方法
char[] bufferDate=new char[1024];
int length;
while((length=bufferedReader.read(bufferDate))!=-1) {
bufferedWriter.write(bufferDate, 0, length);
}
bufferedWriter.flush(); //第三种方法
// String lineDate;
// while((lineDate=bufferedReader.readLine())!=null) {
// bufferedWriter.write(lineDate);
// bufferedWriter.newLine();
// }
// bufferedWriter.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3:转换流
转化只能是字节向字符转化
InputStreamReader(Reader in)
OutputStreamWriter(Writer out)
因为InputStreamReader是Reader的子类,所以同样可以用缓冲字符流BufferedReader(new InputStreamReader(Reader in))
t同理
package com.xt.io; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException; public class InputStreamReaderTest { public static void main(String[] args) {
try {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\aa.txt"),"UTF-8"));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D:\\bb.txt"), "UTF-8"));
String lineDate;
while((lineDate=bufferedReader.readLine())!=null) {
bufferedWriter.write(lineDate);
bufferedWriter.newLine();
}
bufferedWriter.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
数据流
package com.xt.io; import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class DataInputStreamTest { public static void main(String[] args) {
double[] scores = {20,50,42,62};
DataOutputStream dataOutputStream=null ;
try {
dataOutputStream = new DataOutputStream(new FileOutputStream("D:\\data.data")) ;
for (double score : scores) {
dataOutputStream.writeDouble(score);
}
dataOutputStream.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(dataOutputStream!=null) {
try {
dataOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} try {
DataInputStream dataInputStream=new DataInputStream(new FileInputStream("D:\\data.data"));
while(true) {
System.out.println(dataInputStream.readDouble());
} } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e) { }
}
}
IO流——常用IO流详解的更多相关文章
- 2020你还不会Java8新特性?方法引用详解及Stream 流介绍和操作方式详解(三)
方法引用详解 方法引用: method reference 方法引用实际上是Lambda表达式的一种语法糖 我们可以将方法引用看作是一个「函数指针」,function pointer 方法引用共分为4 ...
- Delphi中TStringList类常用属性方法详解
TStrings是一个抽象类,在实际开发中,是除了基本类型外,应用得最多的. 常规的用法大家都知道,现在来讨论它的一些高级的用法. 先把要讨论的几个属性列出来: 1.CommaText 2.Delim ...
- Eclipse或Myeclipse常用快捷键组合详解
Eclipse 是一个开放源代码的.基于Java的可扩展开发平台,就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境.. Eclipse(Myeclipse)中有很多便于开发的快捷键 ...
- maven常用插件配置详解
常用插件配置详解Java代码 <!-- 全局属性配置 --> <properties> <project.build.name>tools</proje ...
- e lisp 常用缓冲区函数详解
e lisp 常用缓冲区函数详解 函数名 函数概要 buffer-name 返回当前缓冲区的名字 buffer-file-name 返回当前缓冲区所指文件的名字,包括路径 current-buffer ...
- 转:springmvc常用注解标签详解
Spring5:@Autowired注解.@Resource注解和@Service注解 - IT·达人 - 博客园--这篇顺序渐进,讲得超级好--此人博客很不错http://www.cnblogs.c ...
- Maya 常用环境变量详解
Maya 常用环境变量详解 前言: Maya 的环境变量让用户可以很方便的自定义 Maya 的功能. 在 Maya 的 Help 帮助文档中有专门的一个章节< Environment Varia ...
- ExtJs常用布局--layout详解(含实例)
序言: 笔者用的ExtJs版本:ext-3.2.0 ExtJs常见的布局方式有:border.form.absolute.column.accordion.table.fit.card.anchor ...
- 【第六课】Nginx常用配置下详解
目录 Nginx常用配置下详解 1.Nginx虚拟主机 2.部署wordpress开源博客 3.部署discuz开源论坛 4.域名重定向 5.Nginx用户认证 6.Nginx访问日志配置 7.Ngi ...
- Modbus常用功能码协议详解
Modbus常用功能码协议详解 01H-读线圈状态 1)描述:读从机线圈寄存器,位操作,可读单个或者多个: 2)发送指令: 假设从机地址位0x01,寄存器开始地址0x0023,寄存器结束抵制0x003 ...
随机推荐
- UI5-技术篇-SEGW DEEP ENTITY测试
参考:http://blog.sina.com.cn/s/blog_a7d67d810102xgms.html 一般调用后端的OData服务需要同时传输多个记录表对业务逻辑进行处理(例如BAPI),今 ...
- java,单文件和多文件上传代码范例
上传一个单文件,用request.getFile得到文件(下面的功能是上传到阿里云) @RequestMapping(value = {"/content"}, method = ...
- Django组件之forms
forms:校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_len ...
- NSIP
1. 第一章 信息安全概述 信息:信息是有意义的数据,具有一定的价值,是一种适当保护的资产,数据是是客观事务属性的记录,是信息的具体表现形式,数据经过加工处理之后 就是信息,而信息需要经过数字处理转换 ...
- nginx的应用【虚拟主机】
Nginx主要应用: 静态web服务器 负载均衡 静态代理虚拟主机 虚拟主机 :虚拟主机,就是把一台物理服务器划分成多个“虚拟”的服务器,这样我们的一台物理服务器就可以当做多个服务器来使用,从而可以配 ...
- JVM系列三:内存分配与回收策略
内存分配策略 1.对象优先分配在新生代Eden区 多数情况下,对象分配在新生代的Eden,若Eden区域内存不够,则引发一次Minor GC 2.大对象直接进入老年代 大对象直接分配在老年代,避免新生 ...
- P2921 [USACO08DEC]在农场万圣节[SCC缩点]
题目描述 每年,在威斯康星州,奶牛们都会穿上衣服,收集农夫约翰在N(1<=N<=100,000)个牛棚隔间中留下的糖果,以此来庆祝美国秋天的万圣节. 由于牛棚不太大,FJ通过指定奶牛必须遵 ...
- dos中查找端口的PID,并在任务管理器中处理端口
本文来源https://www.cnblogs.com/lsyf/p/8979012.html 1.查看所有端口进程 首先点击开始菜单选择运行,接着在运行对话框中输入“cmd”,回车打开命令提示符窗口 ...
- Robot Framework--接口实例一
需求:api/car/detail/recommendcar.json 接口返回的车辆数量少于等于20且车辆不能重复 分析:统计接口中返回的列表的长度,再把carid拿出来组成一个新的列表,判断这 ...
- 三、vue基础--表单绑定
表单输入绑定:可以一起使用以下修饰符,都是在v-model里面使用的,有input,radio,textrea,select中都可以使用绑定 1.单选按钮,代码如下: <div id='app' ...