黑马程序员——IO流(一)概述及分类

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

IO概述及分类

问题:IO是什么,它有什么作用?

IO:  input  Output

IO流:输入输出流

计算机底层,是二进制,计算机之间进行信息交换,传递的也是二进制。

通过IO流我们的计算机才可以进行信息交换。

输入和输出: 

什么是输入?什么是输出?

Java中的IO流全都在java.io包下.(还有一个nio)

关于javaIO流的分类

讲三种分法:

1. 按照流的流向来划分

a) 输入流     XxxxInputStream   XxxReader

b) 输出流     XxxxoOutputStream   XxxxWriter

2. 按照传输单位

流最底层操作的全是二进制。

a) 字节流----直接操作二进制   XxxxInputStream   XxxOutputStream

b) 字符流----操作的是字符   XxxReader  XxxWriter

3. 按照使用方式

a) 基本流  简单理解:可以直接对源或目的地操作(例如文件)

b) 复合流  它不能直接对源或目的地操作,它需要在包装一个基本流。 

java.io包下有四个类

InputStream

OutputStream

Reader

Wieter

以上四个类都是abstract类,它们是所有的IO流的基类(根类,父类)

IO基类概述

InputStream  字节输入流的超类

OutputStream 字节输出流的超类

Reader 字符输入

Wieter  字符输出

 

注意一个规范:字节流都是以InputStream  OutputStream结尾

 字符流都是以 Reader Writer结尾

 

重点:

输入流:读操作

输出流:写操作

 

一个文件要将其内容读取出来:输入流 InputStream   Reader

对于输入流来说:它一定会提供读取操作的方法    read方法

向一个文件中写入内容:输出流   OutputStream Writer

对于输出流来说:它一定会提供写操作的方法.   Write方法

 

问题:怎样选择字节还是字符哪?

第一种分法:

如果操作的是文本文件:一般情况下使用字符流.

如果操作的是二进制文件:一般情况下使用字节流.

第二种分法:

只想做一个文件的复制,就是使用字节流.(文件下载)

FileOutputStream的构造方法

ackage cn.itcast.io;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

//关于文件操作的字节输出流 
//问题:字节输入流   操作的单位---字节   输出流----写操作
//这个流的作用就是将字节信息写到一个文件中(目的地)
//FileOutputStream
//构造方法
//1. new FileOutputStream(String name)
//2.new FileOutputStream(File file);
//3.new FileOutputStream(String name,boolean append);
//4.new FileOutputStream(File file,boolean append);
public class FileOutputStreamDemo1 {

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

	// 演示 new FileOutputStreasm(String name);
	public static void demo1() throws IOException {

		FileOutputStream fos = new FileOutputStream("a.txt"); // 注意产生异常,抛出.
																// FileNotFoundException
		// 我使用的是a.txt这个相对路径,它的位置应该是day20工程下.
		// 如果我们指定的目的地,也就是那个文件,如果不存在,会自动创建.
		// 如果我们指定的目的地,也就是那个文件,存在,会覆盖。

		fos.write('h'); // public void write(int b)
		fos.write('e');
		fos.write('l');
		fos.write('l');
		fos.write('o');

		// 问题:要向a.txt文件写出内容? a.txt文件在哪? a.txt文件是否存在?

	}

	// 演示 new FileOutputStreasm(File file);
	public static void demo2() throws IOException {

		File file = new File("a.txt");
		FileOutputStream fos = new FileOutputStream(file); // 注意产生异常,抛出.

		fos.write('h');
		fos.write('e');
		fos.write('l');
		fos.write('l');
		fos.write('o');

	}

	// 演示 new FileOutputStreasm(File file,boolean append);
	public static void demo3() throws IOException {

		File file = new File("a.txt");
		FileOutputStream fos = new FileOutputStream(file, true);
		// 第二个参数是boolean类型的,如果为false,与不写一样,都会覆盖,如果为true,它会在文件的末尾进行追加操作,而不会覆盖.
		fos.write('h');
		fos.write('e');
		fos.write('l');
		fos.write('l');
		fos.write('o');

	}
}

FileOutputStream的三个write 方法

介绍一下关于FileOutputStream中三个重载的write方法

 

public void write(int code) 一次写入一个字节,code值代表的是写入的字节信息码值,它只能写入int数据的后八位,前24位舍弃。

public void write(byte[] b) 一次写入b.length个字节

public void write(byte[] b ,int start,int len)  将b数组中从start开始的len个写入.

package cn.itcast.io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamDemo3 {

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

	// 演示 write(byte[] b)
	public static void demo1() throws IOException {
		FileOutputStream fos = new FileOutputStream("a.txt"); // 抛出异常
																// FileNotFoundException

		// 2.调用其write方法写信息
		String s = "hello world";

		byte[] b = s.getBytes(); // 转换成字节数组

		fos.write(b); // 一次将b.length信息全部写入
		// 3.关闭资源
		fos.close();
	}

	// 演示 write(byte[] b,int start,int len)
	public static void demo2() throws IOException {
		FileOutputStream fos = new FileOutputStream("a.txt"); // 抛出异常
																// FileNotFoundException

		// 2.调用其write方法写信息
		String s = "hello world";

		byte[] b = s.getBytes(); // 转换成字节数组

		fos.write(b, 6, 5); // 一次将b数组中从下标6开始的5个字节信息写入.
		// 3.关闭资源
		fos.close();
	}
}


FileOutputStream写出数据实现换行和追加写入

从键盘信息,如果输入的不是exit,那么就将这个信息写入到一个指定文件中,并且,每一次输入的信息,都是单独一行.

描述:程序运行,请输入信息:hello world  就会将hello world写入到一个文件中,并且是单独一行。

程序继续提示:请输入信息,如果输入的不是exit,就将信息一直写入,并且都是单独一行,直到输入exit结束.

package cn.itcast.io;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Scanner;
//描述:程序运行,请输入信息:hello world  就会将hello world写入到一个文件中,并且是单独一行。
//程序继续提示:请输入信息,如果输入的不是exit,就将信息一直写入,并且都是单独一行,直到输入exit结束.
//将信息写入到msg.txt文件中.
//要求可以追加写入.

//在java中怎样实现向文件中写入信息时换行 :   windows:\r\n  
public class FileOutputStreamDemo4 {

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

		// 1.创建输出流
		FileOutputStream fos = new FileOutputStream("src/msg.txt", true); //就可以追加写入

		// 2.定义一个Scanner
		Scanner sc = new Scanner(System.in);

		// 3.从键盘接收
		while (true) {
			System.out.println("请输入信息");
			String line = sc.nextLine();

			if ("exit".equalsIgnoreCase(line)) { // 不区分大小写
				break;
			}
			// 4.将信息写入到文件中.
			byte[] b = (line + "\r\n").getBytes(); // 在信息后加上\r\n在得到byte[]。
			fos.write(b);

		}

		// 5.关闭
		fos.close();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值