Java初级培训笔记------IO流(2)

字符流理念上与字节流相同,区别就在于字符流每次读取的单位是字符,也就是两个字节,具体结构图参见Java初级培训笔记------IO流(1)

FileWriter 与FileReader;BufferedReader与BufferedWriter

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			File f=new File("E:/test/a.txt");
			if(!f.exists()){
				f.createNewFile();
			}
			FileWriter fw=new FileWriter(f);
			FileReader fr=new FileReader(f);
			String str="好好学习,天天向上";
			fw.write(str);//FileWriter的构造方法中直接提供了传入字符串的方法,可以直接写入字符串
			char[] c=str.toCharArray();
			fw.write(c);//此处是传入一个char数组,这一点跟字节流的传入byte数组是一样的  byte数组一次读一个字节  char数组一次读两个字节
			fw.flush();//刷新
			BufferedWriter bw=new BufferedWriter(fw);
			bw.write(str);
			bw.flush();
			bw.close();
			fw.close();//关闭
			//读
			//方式1
			int len;
			while((len=fr.read())!=-1){
				System.out.print((char)len);
			}
			//方式2
			char[] ch=new char[2];
			while((len=fr.read(ch))!=-1){
				System.out.print(String.valueOf(ch,0,len)+"  ");//一次读两个字符,加后边的空格就是为了体现这一特点
			}
			//方式3
			while((len=fr.read(ch,0,ch.length))!=-1){//方法重载  参数不同而已
				System.out.print(String.valueOf(ch)+"*");//一次读两个字符
			}
			//方式4
			BufferedReader br=new BufferedReader(fr);
			String a="";
			while((a=br.readLine())!=null){
				System.out.println(a);
			}
			br.close();
			fr.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}

写入读出方式都是任选其一

BufferedReader与BufferedWriter将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。 可以减少数据的读写次数,提高数据的读写效率(实质是将需要读写的数据存在一个char类型的数组中)字节流也是,所以要重点掌握,比较常用。

了解:Object对象流:
ObjectOutputStream对象的序列化:将对象以二进制的形式永久性保存,或者以二进制的形式在网络传输
ObjectInputStream对象的反序列化:将二进制永久性保存的对象或者传输的对象,还原Java中临时对象
他的主要目标就是将对象永久保存起来,比如说存到某个txt文档中,当某一天用到的时候再通过反序列化调用

<span style="white-space:pre">		</span>News n = new News("北京将举办冬奥会");//创建对象  news类里只有新闻名称一个属性
		
		//对象的序列化
		try{
			FileOutputStream fos = new FileOutputStream(
					new File("e:/io/a.txt"));
			
			//创建对象输入流对象
			ObjectOutputStream oos = new ObjectOutputStream(fos);
			
			//将n对象序列化,将n写入e:/io/a.txt
			oos.writeBoolean(true);
			
			//Serializable标识性接口,只是说明该类的对象是可以序列化
			oos.writeObject(n);	
			oos.close();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
<pre name="code" class="java">//完成对象的反序列化:将对象以二进制形式读入程序,并还原。

		try {
			FileInputStream fis = new FileInputStream(new File("e:/io/a.txt"));
			
			//创建对象输入流对象,完成对象的反序列化
			ObjectInputStream ois = new ObjectInputStream(fis);
			System.out.println(ois.readBoolean());
			Object obj=ois.readObject();
			System.out.println("obj="+obj);
			News ns=(News)obj;//强转
			System.out.println(ns.getDate());
		} catch (Exception e) {
			e.printStackTrace();

		}

了解就行

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/MiracleWW/article/details/47909573
文章标签: IO流 java
个人分类: java初级
想对作者说点什么? 我来说一句

java笔记IO

2014年03月23日 3KB 下载

java基础笔记

2015年04月04日 476KB 下载

JAVA 培训 笔记 PPT 初级

2009年09月11日 4.39MB 下载

Java的例外处理和IO

2009年04月25日 106KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭