java输出输入IO流

IO流:就是以流的方式进行输入输出操作(读写操作)
流:从发送端 —> 接收端 的有序数据
分类:
<1> 流向:输入流(读) 和 输出流(写)
<2> 处理数据类型:字节流 和 字符流 (每次读写一个byte) (每次读写一个char)
<3> 查看构造函数:低级流(节点流) 和 高级流(处理流) 若构造函数的参数又是一个流,这个流就是高级流
例如:BufferedReader(Reader in) 参数又是一个Reader
<4> 按照操作的数据源不同
IO流

区分流的细节:xxxxStream 一定是一个字节流 xxxxer 一定是一个字符流
字节输入流:InputStream 字节输出流:OutputStream 字符输入流:Reader 字符输出流: Writer

字节流

1.InputStream

abstract class InputStream 字节输入流 
	     class ByteArrayInputStream 从字节数组中读数据 (使用率非常低) 
		 class FileInputStream 读文件中的内容 (√) 
		 class ObjectInputStream 每次读一个对象 () 对象反序列流
		 class SequenceInputStream 有序读入文件内容,从第一个文件读到结尾,接着读第2个文件内容
FileInputStream

把文件中的数据读到程序中
①构造方法

FileInputStream(File file) 
FileInputStream(String name)

②方法
int available() 获取可读的字节个数
int read()
从该输入流读取一个字节的数据
int read(byte[] b)
从该输入流读取最多 b.length个字节的数据为字节数组
int read(byte[] b, int off, int len)
从该输入流读取最多 len字节的数据为字节数组
long skip(long n)
③int read()每次读一个字节

public class ReadDemo { 
	public static void main(String[] args) { 
		try {File file = new File("src/demo.txt"); 
		// ctrl+shift+o 
		// 检查异常:在编译阶段就要处理的异常 
		// 若文件不存在,则抛出此异常 
		FileInputStream fis = new FileInputStream(file); 
		int size = fis.available(); 
		// 鼠标放在红色提示线上,选择第2个 add catch 
		System.out.println("可读的字节个数" + size); 
		// 循环读数据,while循环,循环要有结束条件,要不然就是一个死循环 
		// 读到文件的末尾就不读 
		int end = -1; // int read() 返回是int类型
		while ((end = fis.read()) != -1) { 
			//若读到文件的末尾返回-1,就结束循环
			System.out.println((char) end); 
		}
		fis.close();// 关闭流 
	 } catch (Exception e) { 
		e.printStackTrace(); 
	 }
    } 
}

2.OutputStream

abstract class OutputStream 字节输出流 
		 class ByteArrayOutputStream 向输入中写入字节数据(使用率非常低) 
		 class FileOutputStream 向文件中写数据 () 
		 class ObjectOutputStream 将对象写入一个磁盘文件或者网络中()对象序列化流 
		 class SequenceOutputStream 将内容写入文件中
FileOutputStream

向一个文件中写入数据,每次写入一个字节的数据
①构造方法

	//File代表一个文件或者目录,此时这里只能是文件
	FileOutputStream(File file) 创建文件输出流以写入由指定的 File对象表示的文件。 
	FileOutputStream(File file, boolean append) 
	FileOutputStream(String name) 创建文件输出流以指定的名称写入文件。 
	FileOutputStream(String name, boolean append) 创建文件输出流以指定的名称写入文件。

②方法

void close() 关闭此文件输出流并释放与此流相关联的任何系统资源.
protected void finalize() 清理与文件的连接,并确保当没有更多的引用此流时,将调用此文件输出流的 close方法.
FileChannel getChannel() 返回与此文件输出流相关联的唯一的FileChannel对象。 
FileDescriptor getFD() 返回与此流相关联的文件描述符.
void write(byte[] b) 将 b.length个字节从指定的字节数组写入此文件输出流.
void write(byte[] b, int off, int len) 将len字节从位于偏移量 off的指定字节数组写入此文件输出流.
void write(int b) 将指定的字节写入此文件输出流.

③示例

public class WriteDemo { 
	public static void main(String[] args) { 
		try {
		//在src目录下,新建一个文件demo.txt 
		//使用相对路径创建File对象 
		File file=new File("src/demo.txt"); 
		//向文件中写数据 
		FileOutputStream fos=new FileOutputStream(file); 
		//需要try...catch 选中需要放入try中的代码 
		//右键-->Surround with --> try...catch block 
		for(int i=97;i<=122;i++) { 
			fos.write(i); 
			// ASCII值 
		}
		byte[] arr= {65,66,67,68,69}; //ASCII码 
		fos.write(arr); //把数组写入文件中 
		//void write(byte[] b) 
		//void write(byte[] b, int off, int len) 
		fos.write(arr,1,3); // 66 67 68 
		String msg="你们真的很棒!"; //先将字符串转换成字节数组byte[] byte[] 
		arr2=msg.getBytes(); 
		fos.write(arr2); 
		//关闭流 
		fos.close(); 
		} catch (Exception e) { 
			e.printStackTrace(); 
		 }  
	} 
}

⑤不覆盖文件原有的内容

FileOutputStream(File file, boolean append) 
FileOutputStream(String name, boolean append) 
booleantrue,就会在 File 文件末尾追加,而不是覆盖

字符流

字节流每次读写都是一个字节 byte
字符流每次读写都是一个字符 char

1.Reader

abstract class Reader 字符输入流,每次读一个字符 
		 class FileReader 读文件中的内容 
		 class BufferedReader 带缓冲区的高级字符输入流,readLine() 每次读1行 (√)
FileReader

①构造方法

FileReader(File file) 
FileReader(String fileName)

②方法

int read() 读一个字符 
int read(char[] cbuf) 将字符读入数组 
abstract int read(char[] cbuf, int off, int len) 将字符读入数组的一部分

③示例

public class ReadDemo { 
	public static void main(String[] args) { 
		try {File file=new File("src/demo.txt"); 
		FileReader fr=new FileReader(file); 
		//一个字符一个字符的读 int read() 
		// int end=-1; 
		// while( (end=fr.read()) !=-1) { 
		// System.out.println((char)end); 
		// }
		//注意区分:字符数组 
		char[] arr=new char[10]; 
		int len=-1; 
		while( (len=fr.read(arr))!=-1) { 
			String s=new String(arr,0,len); 
			System.out.println(s); 
		}
		fr.close();
		//关闭流 
		} catch (Exception e) { 
			e.printStackTrace(); 
			} 
		} 
}

2.Writer

abstract class Writer 字符输出流,每次写入一个字符 
		 class FileWriter 向文件中写入内容 
		 class BufferedWriter (×) PrintWriter 字符输出流,println() 每次可以写入1行数据
FileWriter

①构造方法

FileWriter(File file) 
FileWriter(File file, boolean append) 
FileWriter(String fileName) 
FileWriter(String fileName, boolean append)

②方法

void write(int c) 写一个字符 
void write(String str) 写一个字符串 
void write(String str, int off, int len)的一部分

③示例

public class WriteDemo { 
	public static void main(String[] args) { 
		try {
				Scanner sc=new Scanner(System.in); 
				FileWriter pw=new FileWriter(new File("src/demo3.txt"),true); 
				while(true) { String str=sc.nextLine(); 
				//next 和 nextLine(写空格) 
				if(str!=null && str.equals("quit")) { 
					break; 
				}
				//把输入str,写入到文件demo3.txt中 
					pw.write(str+"\r\n"); 
					pw.flush(); //刷新的 
				}
			pw.close(); 
			//不要在循环中关闭流 
			sc.close();
			//关闭扫描器 
		} catch (IOException e) { 
			e.printStackTrace();
		 } 
	} 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值