IO[旧blog]

概述:

IO是重要的设备间数据传输工具,包括网络传输也是靠IO流完成的。

IO流具有以下特点:

1.处理设备间的数据传输

2.JAVA对数据的操作通过流的方式进行

3.java操作流的工具都在java.io包中。

4.按流向分为输入流和输出流

5.按数据分为字符流和字节流


IO流的四大基类:

 字节字符
输入InputStreamReader
输出OutputStreamWriter
其他IO流的工具基本都是这四个类的子类。已这四大基类为基础进行扩展。

注意:Reader和Writer的ctor权限为protected,只有其子类才能使用。


通用读写方法:

close()关闭资源

输入:

1.int read(),读取单个数据的字节/字符。

2.int read(byte[]/char[]),将读取的一部分数据存放到字节/字符数组中,并返回一次读取的数目。

输出

1.write(int)

2.write(buf)

3.write(buf,0,len)

写入一个或者多个数据。

4.flush()刷新缓冲区

因为IO涉及了底层系统资源,所以在使用时可能会产生IO异常。IOException



一、字符流

(一)特点:
        1、字符流将字节流的数据用编码表解码。使用的是默认的编码,即当前系统的编码。
        2、字符流专门用于处理文字数据,字节流可以对所有类型的数据进行IO处理。
(二)通用读写流程:

写入:

1.创建流对象:FileWriter fout=new FileWriter("a.txt");//FileWriter是Writer的子类,专门用来处理硬盘文件。ctor须要一个源作为参数。

x.关闭流对象:fout.close();//在流操作完成不再继续使用后,应当执行关闭操作,否则会一直占用系统资源。 

2.写入数据。

fout.write('a');//int

fout.write("abc".toCharArray());//char[]

fout.write("def");//String

3.刷新缓冲:fout.flush();

4.关闭资源: fout.close();//close()在关闭时会将缓冲区数据全部写入,也起到刷新缓冲的作用。

注意:

1. FileWriter(Strings,boolean append),append=true时,代表不覆盖已有的文件。并在已有文件的末尾处进行数据续写。

2.在创建一个文件时,如果目录下有同名文件将被覆盖。

读取:

1.创建流对象:FileReader fin=new FileReader("a.txt");//与FileWriter相同。

2.读取数据:

char[]buf=new char[1024];

int cntBuf=0;

cntBuf=fin.read(buf);

String s=new String(buf,0,cntBuf);

3.关闭资源:fin.close();

注意:在读取文件时,必须保证该文件已存在,否则出异常。

另外,定义文件路径时,可以用“/”或者“\\”。

/*
1.FileWriter创建一个目标文件准备写入
2.FileWriter关联源文件准备读取
3.读取一个写入一个
4.关闭资源
*/
import java.io.*;

class CopyTextFileDemo
{
	public static void main(String[] args) throws IOException
	{
		//copyDemo1();
		copyDemo2();
	}
	
	//读一个写一个对硬盘损伤较大,而且效率不高,应当一次读取多个到缓存(内存),然后再将缓存中的一次性写入到新位置。
	public static void copyDemo1() throws IOException
	{
		FileWriter fout=new FileWriter("FileWriterDemo_copy.java");//目标文件
		FileReader fin=new FileReader("FileWriterDemo.java");//源文件
		
		int temp=0;
		while((temp=fin.read())!=-1)
		{
			//fout.write((char)temp);//不需要转换类型,FileWriter里本身就有void write(int c);
			fout.write(temp);
		}
		fout.close();
		fin.close();	
	}
	
	public static void copyDemo2()
	{
		FileWriter fout=null;
		FileReader fin=null;
		//流对象在try外声明,在try内初始化。
		try
		{
			fout=new FileWriter("FileWriterDemo_copy.java");
			fin=new FileReader("FileWriterDemo.java");
			//定义缓冲区存放读取到的字符
			char[] cbuf=new char[10];
			int cntCbuf=0;
			//循环读取知道文件尾。即cntCbuf=-1
			while((cntCbuf=fin.read(cbuf))!=-1)
			{
				fout.write(cbuf,0,cntCbuf);
				fout.flush();
			}			
		}
		catch(IOException e)
		{
			newPrint("in copyDemo2 catch: "+e.toString()+"\n");	
			throw new RuntimeException("RW failed!");//抛出让程序停止下来		
		}
		finally
		{
                        if(null!=fin)
			{
				try
				{
					fout.close();					
				}
				catch(IOException e)
				{
					newPrint("in finally fout catch: "+e.toString()+"\n");					
				}				
			}
			if(null!=fin)
			{
				try
				{
					fin.close();					
				}
				catch(IOException e)
				{
					newPrint("in finally fin catch: "+e.toString()+"\n");					
				}				
			}			
		}
	}
		
	public static void newPrint(Object obj)
	{
		System.out.print(obj);//若直接打印,这里应该用print而不是ln否则在换行时会产生一点小问题。
	}
}







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值