JAVA基础IO流

JAVA基础IO流

 

InputStream / Reader :所有输入流的基类,前者是字节输入流,后者是字符输入流。

输入流:只能从中读取数据,而不能向其写入数据。

OutputStream / Writer :所有输出流的基类,前者是字节输出流,后者是字符输出流。

输出流:只能向其写入数据,而不能从中读取数据。

此处的输入、输出是以程序运行所在内存的角度划分的。

如果从硬盘的角度来考虑,二者应该反过来才对。

但是当我们从文件中读取数据时是将数据从硬盘移动到内存,对内存来说是一个输入的过程。

反之,当我们将数据写入文件时对内存来说需要把数据从自身移动到硬盘,是一个输出的过程。


以字符的形式向文件添加数据,读取数据   

package com.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;

public class Test02 {
	 public static void main(String[] args) throws IOException {	
		 
		 File file = new File("text.txt");
                 //true可有可无,代表是向文件追加内容,false或不写会清空文件原有内容
		 FileWriter fw = new FileWriter(file, true);
		 BufferedWriter bw = new BufferedWriter(fw);
		 
		 bw.write("添加");
		 
		 FileReader fr = new FileReader(file);
		 BufferedReader br = new BufferedReader(fr);
		 
		 List<String> list = new ArrayList<String>();
		 
		 String str;
		 while((str = br.readLine())!=null) {
			 list.add(str);
		 }
		 for(int i=0 ; i<list.size() ; i++) {
			 System.out.println(list.get(i));
		 }
		 bw.close();
	 }
}

以字节方式向文件写入数据,读取数据

package com.io;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test03 {
	public static void main(String[] args) throws IOException{
		File file = new File("text01.txt");
		FileOutputStream out = new FileOutputStream(file,true);
		BufferedOutputStream bos = new BufferedOutputStream(out);
		byte[] a = "添加".getBytes();
                //字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组 
		bos.write(a);//以字节数组的方式向文件添加内容
		bos.close();
		
		FileInputStream in = new FileInputStream(file);
		BufferedInputStream bis = new BufferedInputStream(in);
		InputStreamReader isr = new InputStreamReader(bis, "utf-8");
		/*
		 * 此方法无法读取中文
		 * int n = -1;
		while((n = bis.read())!=-1) {
			
			System.out.print((char)n);
		}
		System.out.println("--");*/
		byte[] b = new byte[100];
		int m = -1;
		while((m = in.read(b))!=-1) {
			//可以读取中文
			System.out.print(new String(b,0,m));
		}	
	}
}