java io编程_java-IO编程

输入与输出

将数据读入到虚拟机中==>输入

将数据从内部到外部存储起来或显示出来(如输出到控制台)==>输出

IO概念

在传输数据的时候,需要一个流(对象)的概念。而流简单而言就是内存与存储设备之间传输数据的通道,管道

JVM(虚拟机)

磁盘上的文件作为数据源。

流<=========文件

虚拟机   ======

将磁盘上的文件传到虚拟机中。

IO流的分类:

1)按方向分:(以虚拟机为参照物-重点)

输入流:将中的内容读到。==>读数据

输出流:将中的内容写入到中。==>写数据

输入和输出来说是相对虚拟机来说的。

2)按单位(按照数据的):

字节流:以字节为单位,可以操作所有类型的文件。

字符流:以字符为单位,只能操作文本类型的文件。

纯文本类型:.txt,.java,.html,.xml,.log等等(拿记事本打开能看懂的就是纯文本)

3)按照流的功能分为:

节点流:完成数据读写。

过滤流:为节点流或其他流增强功能(过滤流可以看成节点流的装饰)。这就好比军人的使命是打仗,文工团(唱歌跳舞的)会让士气更高涨。这种设计来自于java中的设计模式,装饰模式。装饰模式解决了什么问题?

装饰模式能解决需要组合功能的类。如武器是父类,其子类中零件和枪,零件就是过滤流。

1.创建节点流

2.包装过滤流

3.读写数据

4.关闭流

字节流:

InputStream是字节输入流的父类==>所有字节输入流都是InputStream的子类(只要看见XXXInputStream,就可以判断是字节输入流)  抽象类

int read()读一个字节 返回值:读到的字节数据  返回-1表示结束;

int read(byte[] bs):尝试读满bs数组 返回值:读到的字节个数 返回-1表示结束

int read(byte[] bs,int start, int length):尝试读满bs数组中的一段   返回值:读到的字节个数 返回-1表示结束

OutputStream是字节输出流的父类==>字节输出流都是OutputStream的所有子类(只要看见XXXOutputStream,就可以判断是字节输出流)抽象类

write(int a): (byte)a是一个字节

write(int a): (byte[] bs): 将bs数组中所有数据写出去

write(int a): (byte[] bs,int start,int length): 将bs数组中数据中的一段写出去

write(int a): (byte[] bs,0,bs.length): 将bs数组中所有数据(写到length-1)写出去相当于write(s)

InputStream,OutputStream这两个既非节点流,又非过滤流,它们是父类,没有节点过滤这一说。他们都是抽象类。

FileInputStream/FileOutputStream 文件字节流         节点流

文件的写入:

package day22;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

public class TestFileOutputStream {

public static void main(String[] args) throws IOException{

OutputStream out=new FileOutputStream("a.txt");

// out.write('A');

out.write(65);

//流是一种资源,在代码结束后应该释放

out.close();

}

}

资源保存在当前项目下,可以直接按照路径搜索,找到如下文件证明成功写入。

4821222c8bb7ff6588b407a1ab16770e.png

向文件中写入数组:

package day22;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

public class TestFileOutputStream {

public static void main(String[] args) throws IOException{

OutputStream out=new FileOutputStream("a.txt");//文件不存在创建,存在覆盖掉

// 如果想追加怎么办?new FileOutputStream("a.txt",A)这里的A指的是true或false,随便写

// out.write('A');

// out.write(65);

//流是一种资源,在代码结束后应该释放

String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";

byte[] bs=str.getBytes();

out.write(bs);

out.close();

}

}

代码运行后查看结果:

8d9739e60bdd22ce1047a7fae82b7a7c.png

IO操作几乎每句话都是需要抛出异常的。

804d39f845fb843dee2ab58258519c3e.png

不用throws怎么处理呢?

代码:

packageday22;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStream;public classTestFileOutputStream {public static voidmain(String[] args) {

OutputStream out= null;try{

out=new FileOutputStream("a.txt");

String str="ABCDEFGHIJKLMNOPQRSTUVWXYZ";byte[] bs=str.getBytes();

out.write(bs);

}catch(Exception e){

e.printStackTrace();

}finally{//有异常的时候可能流没有关系

if(out!=null)try{

out.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

FileInputStream  字节输入流  节点流

例子:

package day22;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

public class TestFileInputStream {

public static void main(String[] args)throws IOException {

InputStream in = new FileInputStream("a.txt");

byte[] bs=new byte[10];

while(true) {

int len=in.read(bs,2,7);

/*输入数据流的操作,in为一个inputstream对象,read()是in的方法,

每次读取一个字节的二进制数据,并判断in.read()的值是否等于-1,

当in.read()值等于-1时,代表数据读取完毕,最后将输入流的值赋值给c*/

if(len==-1) break;

System.out.print(len+":");

for(int i=0;i

System.out.print((char)bs[i]+" ");

}

System.out.println();

}

in.close();

}

}

运行截图:

84ed99abef6cc74c028c049639bfbed2.png

用节点流实现文件拷贝:

文件拷贝要求新文件和老文件的大小一致(IO的数据交换速度得快)

有原文件 ,目标文件     文件输入流把文件读到虚拟机里边,虚拟机再把读到的内容通过一个问件输出流写到目标文件里。

数据过滤流:

DataInputStream/DataOutputStream 功能:读写八种基本类型和字符串   过滤流

输入流

InputStream

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值