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流详解的更多相关文章

  1. 《Java基础——break与continue用法详解》

    Java基础--break与continue用法详解       1. break语句: 规则: 1. 仅用于循环语句和switch语句当中,用于跳出循环. 2. 当只有一层循环时,则直接跳出循环,不 ...

  2. Java基础系列8——IO流超详细总结

    该系列博文会告诉你如何从入门到进阶,一步步地学习Java基础知识,并上手进行实战,接着了解每个Java知识点背后的实现原理,更完整地了解整个Java技术体系,形成自己的知识框架. 在初学Java时,I ...

  3. 基于JavaSE阶段的IO流详解

    1.IO流基本概述 在Java语言中定义了许多针对不同的传输方式,最基本的就是输入输出流(俗称IO流),IO流是属于java.io包下的内容,在JavaSE阶段主要学下图所示的: 其中从图中可知,所有 ...

  4. JAVA基础知识|java虚拟机(JVM)

    一.JVM简介 java语言是跨平台的,兼容各种操作系统.实现跨平台的基石就是虚拟机(JVM),虚拟机不是跨平台的,所以不同的操作系统需要安装不同的jdk版本(jre=jvm+类库:jdk=jre+开 ...

  5. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  6. Java之IO流详解

    IO流 Input/Output 完成输入/输出 应用程序运行时——数据在内存中  ←→ 把数据写入硬盘(磁带)  内存中的数据不可持久保存的  输入:从外部存储器(硬盘.磁带.U盘)把数据读入内存. ...

  7. Java io流详解一

    原文地址http://www.cnblogs.com/xdp-gacl/p/3634409.html java基础学习总结——流 一.JAVA流式输入/输出原理

  8. Java IO流详解(五)——缓冲流

    缓冲流也叫高效流,是处理流的一种,即是作用在流上的流.其目的就是加快读取和写入数据的速度. 缓冲流本身并没有IO功能,只是在别的流上加上缓冲效果从而提高了效率.当对文件或其他目标频繁读写或操作效率低, ...

  9. Java IO流详解(一)——简单介绍

    文件在程序中是以流的形式来传输的.所以用Java来传输文件就得使用到Java IO流. 1.流的概念和作用 流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象<Thinkin ...

随机推荐

  1. MyEclipse使用总结

    0.快捷键 ================================================================================ 编辑: Ctrl+Shif ...

  2. 编写自定义cmake配置文件FindXXX.cmake或者xxx-config.cmake | cmake with user defined entry

    本文首发于个人博客https://kezunlin.me/post/12ab5707/,欢迎阅读! cmake with user defined entry Guide FindXXX.cmake ...

  3. 新闻网页通用抽取器GNEv0.04版更新,支持提取正文图片与源代码

    GeneralNewsExtractor以下简称GNE是一个新闻网页通用抽取器,能够在不指定任何抽取规则的情况下,把新闻网站的正文提取出来. 我们来看一下它的基本使用方法. 安装 GNE 使用 pip ...

  4. html基础——a标签

    a标签:超链接/锚点链接  实现页面跳转  只占据自己内容大小的位置 超链接: 使用 target="_self":表示在本页面跳转到 href 中的地址 target=" ...

  5. 2019-9-27:渗透测试,metasploit-framework初接触

    初次利用metasploit漏洞利用框架,入侵获取win7获取权限 目标机系统:windows7,无修复补丁 目标ip地址:192.168.20.131 任务:利用ms17-010,永恒之蓝漏洞,获取 ...

  6. 新闻实时分析系统 Spark Streaming实时数据分析

    1.Spark Streaming功能介绍1)定义Spark Streaming is an extension of the core Spark API that enables scalable ...

  7. Gemini.Workflow 双子工作流高级教程:数据库-设计文档

    数据库设计文档 数据库名:Workflow_New 序号 表名 说明 1 WF_Activity wf_Activity 2 WF_ActivityInstance wf_ActivityInstan ...

  8. pymongo的基本操作和使用--练习

    1.将MongoDB注册到电脑中 安装好MongoDB之后,如何使用MongoDB呢?来到安装目录D:/MongoDB/bin会有如下列表: 其中,mongod.exe是服务端,mongo.exe是客 ...

  9. centos7安装fail2ban

    fail2ban是一款非常实用的安全软件,通过监视系统日志,设置错误登陆次数,可阻挡暴力密码攻击. 1.安装epelyum install epel-release -y 2.安装fail2banyu ...

  10. MySql简单的增删改查语句 js

    最近在项目中需要连接数据库,做增删改查的功能,sql语句整理做了以下记录(基于NodeJs,注:data为你的真实数据): (一)新增插入表中数据: sql: 'insert into work(表名 ...