Java输入输出流

- 2 mins

本质:数据传输

File类

File类的对象主要用来获取文件和目录本身的一些信息,例如文件所在的目录、文件的长度、文件读写权限等,不涉及对文件的读写操作。

File类的构造方法

3个

流的分类

type of stream

字节输入流

字节输入流类的常用方法

文件字节流可以调用从父类继承的read方法顺序读取文件,只要不关闭,每次调用read方法就可以顺序地读取文件中地其余内容,查到文件的末尾或文件字节输入流被关闭。

字节输出流类的常用方法

文件流

FileInputStream是InputStream的子类,实现了抽象方法read(),并将流的数据源定义为文件。

FileOutputStream是OutputStream的子类,实现了抽象方法write(),并将流的数据目标定义为磁盘文件。

FileReader类是Reader的子类,并将流的数据源定义为文件。

FileWriter是Writer的子类,并将流的数据目标定义为磁盘文件。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class InputStreamDemo1 {
	
	
	public static void read1(){
		try {
			InputStream in = new FileInputStream("E:\\1.txt");
			int b = -1;
			while((b = in.read())!=-1){
				System.out.print((char)b);
			}
			in.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void read2(){
		try {
			File f = new File("E:\\1.txt");
			InputStream in = new FileInputStream(f);
			byte [] bytes = new byte[(int) f.length()];
			int len = in.read(bytes);
			System.out.println(new String(bytes));
			System.out.println(len);
			in.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public static void read3(){
		File file = new File("E:\\1.txt");
		try {
			InputStream in = new FileInputStream(file);
			byte [] bytes = new byte[10];
			int len = -1;
			StringBuilder sb = new StringBuilder();
			while((len = in.read(bytes))!=-1){
				sb.append(new String(bytes,0,len));
			}
			System.out.println(sb);
			in.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static void main(String [] args){
		//read1();
		//read2();
		read3();
	}
}

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

public class OutputStreamDemo {

	/**
	 * 字节输出流的方式二:每次输出指定大小的字节
	 */
	public static void write2() {
		try {
			// 创建一个文件字节输出流对象(参数true表示追加输出)
//			追加的意思是:打开一个流后,一直写,以追加的形式,直到关闭;如果不关闭流,不管是true还是false都是追加
//			再下一次打开流后,采用追加的形式
			OutputStream out = new FileOutputStream("E:\\1.txt");

			String info = "hello,everyone我是中国人,中华人民共和国 ";
//			String info1 = " 你好 fsfkgfks";
			
			byte[] bytes = info.getBytes();
			out.write(bytes);// 输出一个字节数组
			out.write(bytes,0,5);//输出一个字节数组中的指定范围的字节
			
//			byte[] bytes1 = info1.getBytes();
//			out.write(bytes1);// 输出一个字节数组
			// 关闭流
			out.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 字节输出流的方式一:每次输出一个字节
	 */
	public static void write1() {
		try {
			// 创建一个文件字节输出流对象
			OutputStream out = new FileOutputStream("E:\\1.txt");

			String info = "hello,IO";
			byte[] bytes = info.getBytes("utf-8");
			for (int i = 0; i < bytes.length; i++) {
				// 向文件中输出
				out.write(bytes[i]);
			}

			// 关闭流
			out.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
//		write1();
		write2();
		System.out.println("success");
	}

}
Inger Chao

Inger Chao

A girl willing to learn and progress

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora qq quora wechat