java笔记-IO流-流操作

本文介绍了Java中的IO流操作,包括如何读取键盘输入并循环处理直到接收到'over',以及流操作的基本规律。文章详细讲解了字符流与字节流的选择,以及在不同设备间如何选择合适的流对象,例如使用FileReader、BufferedReader、FileWriter和BufferedWriter来实现文件的复制,并在遇到异常时打印错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读取键盘输入(单个字节读取)

循环打印键盘输入,当接收到“over”时退出。

import java.io.*;
class KeyboardReadLineDemo 
{
	public static void main(String[] args) 
	{
		KeyboardReadLine();
	}
	public static void KeyboardReadLine(){
		//标准输入流,此流对应键盘输入流等。
		//返回输入流。
		//以下三句话汇成一句。
		//InputStream in=System.in;
		//InputStreamReader isr=new InputStreamReader(in);
		//BufferedReader bufr=new BufferedReader(isr);
		//最终语句。
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in))
		String line=null;
		try{
			while((line=bufr.readLine())!=null){
				if("over".equals(line)){
					break;
				}
				System.out.println(line);
			}
		}
		catch(IOException e){
			throw new RuntimeException("键盘读取错误");
		}
		finally{
			try{
				if(bufr!=null){
					bufr.close();
				}
			}
			catch(Exception e){
				throw new RuntimeException("关闭失败");	
			}
		}
	}
}

读取键盘输入(InputStreamReader-字节>字符)
/*
 InputStreamReader 实例
*/
import java.io.*;
class InputStreamReaderDemo 
{
	public static void main(String[] args) throws Exception
	{
		/*
		//构建标准字节输入流
		InputStream in=System.in;
		//将字节输入流转换为字符输入流
		InputStreamReader isr=new InputStreamReader(in);
		//创建字符输入流缓冲区
		BufferedReader bufr=new BufferedReader(isr);
		*/
		//将以上语句组织成一句
		BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));
		String str=null;
		//循环读取输入
		while((str=bufr.readLine())!=null){
			//over结束
			if("over".equals(str))
				break;
			else{
			System.out.println(str);
			}
		}
	}
}
读取键盘输入(字符->字节)
/*
 字符转化为字节
*/
import java.io.*;
class OutputStreamWriterDemo 
{
	public static void main(String[] args) throws Exception
	{
		//定义读取缓冲区变量
		BufferedReader bufr=null;
		//定义写入缓冲区变量
		BufferedWriter bufw=null;
		try{
			//从输入流中读取数据到读取缓冲区中。
			bufr=new BufferedReader(new InputStreamReader(System.in));
			//从输出流中读取数据到写入缓冲区中。
			bufw=new BufferedWriter(new OutputStreamWriter(System.out));
			String str=null;
			//循环读取键盘输入数据。
			while((str=bufr.readLine())!=null){
				if("over".equals(str)){
					break;
				}
				//将从键盘读取的数据输出到输出缓冲区中。
				bufw.write(str);
				//换行。
				bufw.newLine();
				//刷新
				bufw.flush();
			}
		}
		catch(IOException e){
			throw new RuntimeException("error.");	
		}
		//关闭流
		finally{
			try{
				if(bufr!=null){
					bufr.close();
				}
			}
			catch(IOException e){
				throw new RuntimeException("error.");	
			}
			try{
				if(bufw!=null){
					bufw.close();
				}
			}
			catch(IOException e){
				throw new RuntimeException("error.");	
			}
		}
	}
}

流操作的基本规律

1.明确源和目的

源头:输入流:InputStream Reader

目的:输出流:OutputStream Writer

2.操作的数据是否是纯文本

是:字符流

否:字节流

3.当体系明确后,还需明确具体使用哪个对象

通过设备进行区分

源头设备:内存,硬盘,键盘

目的设备:内存,硬盘,控制台

例:将一个文本文件存储到另外一个文件

源头:文本文件(字符),使用读取流:InputStream Reader

Reader体系中可以操作文件的对象是FileReader

是否需要提高效率?是:加入Reader体系中的缓冲区BufferedReader

FileReader fileR=new FileReader("cs.txt");

BufferedReader bufr=new BufferedReader(fileR);

目的:文本文件(字符),使用写入流:OutputStream Writer

Wirter体系中可以写入字符的对象是FileWriter

是否需要提高效率?是:加入Writer体系中的BufferedWriter

FileWriter fileW=new FileWriter(csCopy.txt);

BufferedWriter bufw=new BufferedWriter(fileW);

打印程序运行异常信息

/*
 打印程序异常信息。
*/
import java.io.*;
import java.text.*;
import java.util.*;
class ExceptionLog 
{
	public static void main(String[] args) 
	{
		try{
			int[] arr=new int[3];
			//故意数组角标越界异常。
			System.out.println(arr[3]);
		}
		catch(Exception e){
			try{
				//输出日期信息。
				Date d=new Date();
				//指定日期输出格式
				SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd,HH-mm-ss");
				//将日期转化为字符串
				String s=sdf.format(d);
				//指定输出位置,此处会抛异常。
				PrintStream ps=new PrintStream("Exception.log");
				//打印日期。
				ps.println(s);
				//重新设置系统输出位置。
				System.setOut(ps);	
			}
			catch(Exception ex){
				throw new RuntimeException("异常信息存储错误。");
			}
			//将追踪到的信息打印到指定的输出流
			e.printStackTrace(System.out);
		}
	}
}
打印系统属性信息

import java.io.*;
import java.util.*;
class SystemInfo 
{
	public static void main(String[] args) throws Exception
	{
		//获取系统属性信息。
		Properties pro=System.getProperties();
		//打印系统属性信息。
		pro.list(new PrintStream("SystemInfo.txt"));
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值