《Java基础知识》Java IO流详解
Java IO概念
1. 用于设备之间的数据传输。
2. Java 将操作数据流的功能封装到了IO包中。
3. 数据流流向分:输入流和输出流,操作对象为文件。
4. 流按照操作数据分:字节流(通用)和字符流。
5. 将计算机语言:二进制数据转换成文件显示到电脑上。
IO包:继承关系图:

字符流:
Reader :读取字符流,方法见API。
Writer :写入字符流,方法见API。
案例(Writer ):
import java.io.*;
public class var {
public static void main(String[] agrs){
Writer writer = null;
try{
writer = new FileWriter("Demo.txt");
// writer = new FileWriter("Demo.txt",true); 文件续写功能,否则会覆盖。
writer.write("今天天气真好!");
writer.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(writer != null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
运行结果:

案例(Reader):
文件数据:

import java.io.*;
public class var {
public static void main(String[] agrs){
Reader reader = null;
try{
reader = new FileReader("Demo.txt");
char[] arr = new char[5];
int red = reader.read(arr); //red是装到数组的长度。
while(red != -1 ){
System.out.println(new String(arr,0,red));
red = reader.read(arr);
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
运行结果:

实现一个完整的文件复制。
import java.io.*;
public class var {
public static void main(String[] agrs){
Reader reader = null;
Writer writer = null;
try{
reader = new FileReader("Demo.txt");
writer = new FileWriter("Dome1.txt"); //
char[] arr = new char[5];
int red = 0; //red是装到数组的长度。
while((red = reader.read(arr)) != -1 ){
writer.write(new String(arr,0,red));
writer.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(writer != null){
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
运行结果:

优化文件复制案例(缓冲流):
import java.io.*;
public class var {
public static void main(String[] agrs){
BufferedReader bufferedReader = null; //缓冲读取流
BufferedWriter bufferedWriter = null; //缓冲写入流
try{
bufferedReader = new BufferedReader(new FileReader("Demo.txt"));
bufferedWriter = new BufferedWriter(new FileWriter("Dome2.txt"));
String str ;
while((str = bufferedReader.readLine()) != null ){
bufferedWriter.write(str);
bufferedWriter.newLine(); //换行。
bufferedWriter.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(bufferedReader != null){
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bufferedWriter != null){
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
运行结果:

上述IO无法处理视频,图片等一些文件,拷贝出来的文件也无法打开,由此我们引出字节流。
字节流:
OutputSteam:写入字节流,方法见API。
InputSteam: 读取字节流,方法见API。
案例(OutputSteam):
public class var {
public static void main(String[] agrs){
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream("demo.txt");
fileOutputStream.write("今天天气真好,我们去玩吧!".getBytes());
//不需要刷新。
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(fileOutputStream != null){
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
运行结果:

案例(InputSteam):
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException; public class PublicTest {
public static void main(String[] args) {
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream("demo.txt");
int ch =0;
byte[] arr = new byte[fileInputStream.available()]; //正式写代码不要使用fileInputStream.available(),因为文件比较大的时候内存会不够用。
while((ch = fileInputStream.read(arr)) != -1){
System.out.println(new String(arr,0,ch));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fileInputStream != null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
运行结果:

案例:复制一个视频文件
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException; public class PublicTest {
public static void main(String[] args) {
FileOutputStream fileOutputStream = null;
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream("video.avi");
fileOutputStream = new FileOutputStream("video1.avi");
int ch =0;
byte[] arr = new byte[fileInputStream.available()]; //正式写代码不要使用fileInputStream.available(),因为文件比较大的时候内存会不够用。
while((ch = fileInputStream.read(arr)) != -1){
fileOutputStream.write(arr);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fileInputStream != null){
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fileOutputStream != null){
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
运行结果:

转换流(键盘输入和控制台输出作为案例):
import java.io.*;
public class var {
public static void main(String[] agrs){
OutputStream out = System.out; //控制台打印
OutputStreamWriter outputStreamWriter = null;
outputStreamWriter = new OutputStreamWriter(out); // outputStreamWriter = new OutputStreamWriter(out,"GBK"); 可以指定写的编码
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
InputStream in = System.in; //键盘输入流。
InputStreamReader inputStreamReader = new InputStreamReader(in); // InputStreamReader inputStreamReader = new InputStreamReader(in,"BGK"); 同样可以指定编码
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
try {
String line = null;
while((line = bufferedReader.readLine()) != null){
if("exit".equals(line)){
break;
}
bufferedWriter.write(line);
bufferedWriter.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(bufferedWriter != null){
bufferedWriter.close();
}
if(bufferedReader != null){
bufferedReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
运行结果:

IO流先讲到这里,Java IO流还有很多有意思的类和方法见API。
参考:https://www.cnblogs.com/runningTurtle/p/7088125.html
《Java基础知识》Java IO流详解的更多相关文章
- 《Java基础——break与continue用法详解》
Java基础--break与continue用法详解 1. break语句: 规则: 1. 仅用于循环语句和switch语句当中,用于跳出循环. 2. 当只有一层循环时,则直接跳出循环,不 ...
- Java基础系列8——IO流超详细总结
该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...
- 基于JavaSE阶段的IO流详解
1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...
- JAVA基础知识|java虚拟机(JVM)
一.JVM简介 java语言是跨平台的,兼容各种操作系统.实现跨平台的基石就是虚拟机(JVM),虚拟机不是跨平台的,所以不同的操作系统需要安装不同的jdk版本(jre=jvm+类库:jdk=jre+开 ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java之IO流详解
IO流 Input/Output 完成输入/输出 应用程序运行时——数据在内存中 ←→ 把数据写入硬盘(磁带) 内存中的数据不可持久保存的 输入:从外部存储器(硬盘.磁带.U盘)把数据读入内存. ...
- Java io流详解一
原文地址http://www.cnblogs.com/xdp-gacl/p/3634409.html java基础学习总结——流 一.JAVA流式输入/输出原理
- Java IO流详解(五)——缓冲流
缓冲流也叫高效流,是处理流的一种,即是作用在流上的流.其目的就是加快读取和写入数据的速度. 缓冲流本身并没有IO功能,只是在别的流上加上缓冲效果从而提高了效率.当对文件或其他目标频繁读写或操作效率低, ...
- Java IO流详解(一)——简单介绍
文件在程序中是以流的形式来传输的.所以用Java来传输文件就得使用到Java IO流. 1.流的概念和作用 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象<Thinkin ...
随机推荐
- C#音频截取与原文匹配2:使用ffmpeg处理音频文件
ffmpeg获取音频时间 ffmpeg转换音频格式(单声道,16000hz,16bit wav) ffmpeg截取音频 不知道是不是错觉,感觉ffmpeg比NAudio要快啊~ 那么这就是第二个版本 ...
- html基础——div/span
div是一个块标签/盒子标签,单独占据一行 span不会占据一块,一般是用来修改某几个文字的格式 比如一行字,需要将每一句的首字母大写,就可以使用span标签 如果是要将一个段落的字加样式,两个都可以 ...
- JavaScript笔记二
1.表格 - 在网页中可以通过表格来表示一些格式化的数据 - 表格相关的标签 - <table> 用来创建一个表格 - <tr> 表示表格中的一行 - <th> 表 ...
- Theano中的导数
计算梯度 现在让我们使用Theano来完成一个稍微复杂的任务:创建一个函数,该函数计算相对于其参数x的某个表达式y的导数.为此,我们将使用宏T.grad.例如,我们可以计算相对于的梯度 import ...
- P2669 金币
题目描述 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天),每天收到两枚金币:之后三天(第四.五.六天),每天收到三枚金币:之后四天(第七.八.九.十天),每 ...
- CCNA 之 八 交换基础 VLAN TRUNK VTP
交换基础 主要知识点: 二层交换基础 Vlan的概念 Trunk的概念 VTP 二层交换基本配置 首先来看下园区网分层结构 交换机的主要功能: Address learning 学习MAC地址 会维护 ...
- MySQL主从扩展知识
6月29/7月2日任务 说明:这两天无新课,主要是扩充知识面注意:这两天的任务,需要回专贴.需要你们通过看这些东西总结成自己的心得. 不能照搬,必须要自己理解,能看多少就看多少,看不完也没有关系,但一 ...
- c语言博客专业05
问题 答案 这个作业属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8655 我在 ...
- Python爬虫帮你打包下载所有抖音好听的背景音乐,还不快收藏一起听歌【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- .NET Core简单使用RabbitMq
RabbitMQ简介 RabbitMQ是一个开源的,基于AMQP(Advanced Message Queuing Protocol)协议的完整的可复用的企业级消息队,RabbitMQ可以实现点对点, ...