java 输入输出流知识_Java知识点总结(JavaIO-字节流)

Java知识点总结(JavaIO-字节流)

@(Java知识点总结)[Java, JavaIO]

[toc]

字节流

在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据时要使用输入流读取数据,而当程序需要将一些数据保存起来时,就要使用输出流。

字节流主要操作byte类型数据,以byte数组为准,主要操作类是 OutputStream 类和 InputStream 类。

输出写入数据,输入写出数据

字节输出流:OutputStream

是整个IO包字节输出流的最大父类,定义如下:

public abstract class OutputStream implements Closeable, Flushable

从定义可以发现:

OutputStream是一个抽象类,必须要通过子类实例化对象,才能使用。

可以使用子类FileOutputStream,向上转型后,操作一个文件。

4c9206bba613fff0696f0e65871c13f3.png

df03f924a37101adc40f4a4a40d73240.png

字节输入流:InputStream

可以通过InputStream 从文件中把内容读取出来。

InputStream 类的定义如下:

public abstract class InputStream extends Object implements Closeable

同OutputStream 类一样,InputStream 本身也是一个抽象类,必须依靠其子类,如果从文件中读取,使用子类FileInputStream。

44f88f4c4655ad4babf246ac770224ea.png

14cf9ecc7be90f24d4f2d35da833f2ca.png

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

public class Demo03 {

// 将字符串转化为byte[]进行输出

public static void test1() throws IOException {

File file = new File("E:" + File.separator + "test.txt");

OutputStream fos = new FileOutputStream(file);

String str = "Hello world!";

byte[] b = str.getBytes(); // 只能使用byte数组,所以将字符串转为byte数组

fos.write(b);

fos.close();

}

// 在文末追加新的内容,且一个字节一个字节的输出

public static void test2() throws IOException {

File file = new File("E:" + File.separator + "test.txt");

OutputStream fos = new FileOutputStream(file, true);

String str = "\r\nHello world!";

byte[] b = str.getBytes(); // 只能使用byte数组,所以将字符串转为byte数组

for (int i = 0; i < b.length; i++) {

fos.write(b[i]);

}

fos.close();

}

// 读取数据

public static void test3() throws IOException {

File file = new File("E:" + File.separator + "test.txt");

InputStream fis = new FileInputStream(file);

// byte[] b = new byte[1024]; //定义一个数组用来存放读取的数据

byte[] b = new byte[(int) file.length()]; // 根据文件的数据量,开辟指定大小的 byte 数组

int len = fis.read(b); // 读取内容到数组中

fis.close();

System.out.println("读取数据的长度" + len);

// System.out.println("内容为:"+new String(b));

System.out.println("内容为:" + new String(b, 0, len)); // 把 byte 数组转为字符串输出

}

// 使用循环,一个字节一个字节读取数据

public static void test4() throws IOException {

File file = new File("E:" + File.separator + "test.txt");

InputStream fis = new FileInputStream(file);

byte[] b = new byte[(int) file.length()];

for (int i = 0; i < b.length; i++) {

b[i] = (byte) fis.read();

}

fis.close();

System.out.println("内容为:" + new String(b));

}

// 如果不知道要输入的内容有多大,则使用是否读到文件末尾的方式来读取文件

public static void test5() throws IOException {

File file = new File("E:" + File.separator + "test.txt");

InputStream fis = new FileInputStream(file);

int len = 0; //用于记录读取数据的个数

byte[] b = new byte[1024];

int temp = 0; //接收读取的每一个内容

while((temp = fis.read()) != -1){

b[len] = (byte) temp;

len ++;

}

fis.close();

System.out.println("内容为:" + new String(b,0,len));

}

public static void main(String[] args) {

try {

test1();

test2();

test5();

} catch (IOException e) {

e.printStackTrace();

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值