首页 IO笔记

IO笔记

举报
开通vip

IO笔记/* 1.练习。copy。java文件,通过缓冲区的形式。 */ import java.io.*; class BufCopyText { public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; BufferedReader bufr = null; BufferedWriter bufw = null; try { fr = new ...

IO笔记
/* 1.练习。copy。java文件,通过缓冲区的形式。 */ import java.io.*; class BufCopyText { public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; BufferedReader bufr = null; BufferedWriter bufw = null; try { fr = new FileReader("buf.txt"); fw = new FileWriter("copyBuf.txt"); bufr = new BufferedReader(fr); bufw = new BufferedWriter(fw); String line = null; while((line=bufr.readLine())!=null) { bufw.write(line); bufw.newLine(); bufw.flush(); } } catch (IOException e) { System.out.println(e.toString()); } finally { if(bufr!=null) try { bufr.close(); } catch (IOException e) { System.out.println(e.toString()); } if(bufw!=null) try { bufw.close(); } catch (IOException e) { System.out.println(e.toString()); } } } } 2./* 演示字符读取流缓冲区 BufferedReader */ import java.io.*; class BufferedReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("buf.txt"); BufferedReader bufr = new BufferedReader(fr); String line = null; while((line=bufr.readLine())!=null) { System.out.println(line); } bufr.close(); } } /* 练习。copy。java文件,通过缓冲区的形式。 */ 3. import java.io.*; /* 演示字符写入流的缓冲区。 */ class BufferedWriterDemo { public static void main(String[] args) throws IOException { //1,先要创建流对象。 FileWriter fw = new FileWriter("buf.txt"); //2,创建缓冲区,与流对象相关联。 BufferedWriter bufw = new BufferedWriter(fw); for(int x=0; x<4; x++) { bufw.write("abcdef"+x); bufw.newLine(); bufw.flush(); } bufw.close(); } } /* public void close() { fw.close(); } */ 4. import java.util.*; class CalendarDemo { public static void main(String[] args) { Calendar c = Calendar.getInstance(); c.add(Calendar.DAY_OF_MONTH,-14); // System.out.println(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日"); getDay(2018); } public static void getDay(int year) { Calendar c = Calendar.getInstance(); c.set(year,2,1); c.add(Calendar.DAY_OF_MONTH,-1); System.out.println(c.get(Calendar.YEAR)+"年"+(c.get(Calendar.MONTH)+1)+"月"+c.get(Calendar.DAY_OF_MONTH)+"日"); } } 5. import java.io.*; class CopyText2 { public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; try { fr = new FileReader("demo.txt"); fw = new FileWriter("aa.txt"); int ch = 0; while((ch=fr.read())!=-1) { fw.write(ch); } } catch (IOException e) { System.out.println(e.toString()); } finally { if(fw!=null) try { fw.close(); } catch (IOException e) { System.out.println(e.toString()); } if(fr!=null) try { fr.close(); } catch (IOException e) { System.out.println(e.toString()); } } } } 6. /* 练习: 将C盘的1.txt文件复制到D盘。 思路: 复制动作:先对c盘的1.txt进行读取。获取其数据。 将获取到数据写入到d盘某一文件中。 */ import java.io.*; class CopyText { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("DateDemo.java"); FileWriter fw = new FileWriter("kk.txt"); char[] arr = new char[1024]; int num = 0; while((num=fr.read(arr))!=-1) { fw.write(arr,0,num); } fw.close(); fr.close(); } } 7. import java.util.*; import java.text.*; class DateDemo { public static void main(String[] args) { Date d = new Date(); String str = "yy-MM-dd hh:mm:ss"; SimpleDateFormat sdf = new SimpleDateFormat(str); String s = sdf.format(d); System.out.println(s); } } 8. ................................................ 缓冲区提高了对数据的读写操作缓冲区: ........................................ 反正操作流对象,通常都需要 用到 缓冲区 字符流的缓冲区:必须要刷新 .flush() day16内容:读写 复制(数组就是自定义缓冲区) 然后是演示字符写入流的缓冲区 读取流的缓冲区 拷贝文件用缓冲区 然后是 装饰 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 模式 /* 字符流 Reader Writer 需求: 在硬盘上创建一个文件并写入一些数据: import java.io.*; 创建FileWriter对象,调用Windows资源,在制定位置创建好了数据存放的目的地。 如果指定目录下,已存在要创建的文件,那么会被覆盖。 FileWriter fw=new FileWriter("demo.tet"); 通过流对象write方法将字符串写入到流中 fw.write(abcde); 关闭资源,清空它先 fw.close(); 需求,对原有文件进行数据的续写 写入:(Writer) class FileWriterDemo { public static void main(String[] args) { FileWriter fw=null; try { fw=new FileWriter("demo.txt",true); fw.write("wsss\r\name"); } catch(IOException e) { System.out.println(e.toString()); } finally { if(fw!=null) try { fw.close(); } catch(IOException e) { System.out.println("close:"+e.toString()); } } } } ......................................................... */ 读取1 import java.io.*; class FileReadDemo { public static void main(String[] args) { //建议一个字符读取流对象,与指定文件相关联。 FileReader fr=new FileReader("demo.txt"); //创建一个字符数组,为了将硬盘上读取的每一个字符存入数组中 char[] arr=new char[1024]; int num=0; while((num=fr.read(arr))!=-1) { System.out.println(new String(arr,0,num)); fr.close(); } read(char[] obuf) 将字符读入数组 } } 读取2 import java.io.* class FileReaderDemo2 { public static void main(String[] args)throws IOException { FileReader fr=new FileReader("demo.txt"); int ch=0; while((ch=fr.read())!=-1)//读一个写一个。 { System.out.println((char)ch); } fr.close(); } read() 读取单个字符 ................................................... /* 练习:将C盘的文件1.txt复制到D盘(本盘) 思路:复制动作,先对C盘的1.txt进行读取, 获取其数据,将获取的数据写入到D(本盘)某一文件中。 */ import java.io.*; class CopyText { public static void main(String[] args)throws Exception { FileReader fr=new FileReader("baichichi.java"); FileWriter fw=new FileWriter("chenyibaichi.txt"); char[] arr=new char[1024]; 一次行写入 int num=0; while((num=fr.read(arr))!=-1) 将字符读入数组。 { fw.write(arr,0,num); } fw.close(); //最后开的最先关 fr.close(); } } 另一种:读一个写一个 /* 练习:将C盘的文件1.txt复制到D盘(本盘) 思路:复制动作,先对C盘的1.txt进行读取, 获取其数据,将获取的数据写入到D(本盘)某一文件中。 */ import java.io.*; class CopyText { public static void main(String[] args)//throws Exception { FileReader fr=null; FileWriter fw=null; try { fr=new FileReader("baichichi.java"); fw=new FileWriter("zchenyishizaa.java"); int ch=0; while((ch=fr.read())!=-1) { fw.write(ch); } } catch(IOException e) { System.out.println(e.toString()); } finally { if(fw!=null) //最后开的最先关。 try { fw.close(); } catch(IOException e) { System.out.println(e.toString()); } } if(fr!=null) try { fr.close(); } catch(IOException e) { System.out.println(e.toString()); } } } .................................................... 缓冲区: 反正操作流对象,通常都需要 用到 缓冲区 字符流的缓冲区:必须要刷新 .flush() 特有方法(跨平台)换行:newLine(), /* 演示字符写入流的缓冲区: */ import java.io.*; class BufferedWriterDemo { public static void main(String[] args)throws Exception { //1先要创建流对象 FileWriter fw=new FileWriter("zchenyishigebaichichi.txt"); //2创建缓冲区,与流对象相关联 BufferedWriter bufw=new BufferedWriter(fw); // bufw.write("abcde"); // bufw.newLine();//特有方法换行,并且跨平台。 // bufw.write("kkk"); // bufw.flush(); for(int x=0;x<4;x++) { bufw.write("abcde"+x); bufw.newLine(); bufw.flush(); } } } ............ 或者 //演示字符写入流的缓冲区: import java.io.*; class BufferedWriterDemo { public static void main(String[] args)throws IOException { //先要创建流对象 FileWriter fw=new FileWriter("ahongxiacaidan.txt"); //创建缓冲区,与流对象相关联 BufferedWriter bufw=new BufferedWriter(fw); for(int x=0;x<4;x++) { bufw.write("abcde"+x); bufw.newLine();//特有方法,换行 bufw.flush(); //写一个刷新一下 } bufw.close(); } } ................................................ //字符读取流缓冲区 BurreredReader import java.io.*; class BufferedReaderDemo { public static void main(String[] args)throws IOException { //创建流 FileReader fr=new FileReader("ahongxiacaidan.txt"); //缓冲区与流关联。 创建缓冲区 BufferedReader bufr=new BufferedReader(fr); String line=null; while((line=bufr.readLine())!=null) { System.out.println(line); } //String s=bufr.readLine();//readLine()返回值是String. // System.out.println(s); bufr.close(); } } readLine() 回车符前的数据。abcdnf\r\n //返回值是String。 //readLine() 读取一个文本行,文本以行存在,一行一行读很高效, //返回:包含该行内容的字符串,不包含任何终止符,如果已到达流 //末尾,则返回null. ............................................................................................... 文件缓冲区拷贝 //字符读取流缓冲区 FileReader FileWriter BufferedReader BufferedWriter import java.io.*; class BufCopyText { public static void main(String[] args)//throws IOException { FileReader fr=null; FileWriter fw=null; BufferedReader bufr=null; BufferedWriter bufw=null; try { fr=new FileReader("chenyishigebaichi.txt"); fw=new FileWriter("worinimama.txt"); bufr=new BufferedReader(fr); bufw=new BufferedWriter(fw); String line=null; while((line=bufr.readLine())!=null) { bufw.write(line); bufw.newLine(); bufw.flush(); } } catch(IOException e) { System.out.println(e.toString()); } finally { if(bufr!=null) try { bufr.close(); } catch(IOException e) { System.out.println(e.toString()); } if(bufw!=null) try { bufw.close(); } catch(IOException e) { System.out.println(e.toString()); } } } } .................................................................... 装饰设计模式:新的想法就搞一个包装类。创建自己装饰类的对象,并调用新的方法就可以了。 /* 对原有的对象增强功能:装饰设计模式/包装设计模式 */ class Person { void chifan() { System.out.println(chifan); } } class SuperPerson//增强谁传谁。只为增强人而存在 SuperPersom增强了Person功能 { //SuperPerson就是装饰设计模式,设计出来的一个对象。 private Person p; SuperPerson(Person p) { this.p=p; } public void superChifan() { System.out.println("开胃酒"); p.chifan(); System.out.println("甜点"); System.out.println("来一根"); } } class Person { public static void main(String[] args) { Person p=new Person(); //早期对象不变,方法不用 // p.chifan() SuperPerson sp=new SuperPerson(p); sp.superChifan(); } } 装饰设计模式:可以对原有对象的功能进行增强 只要将原有对象作为参数传递给 装饰类的构造函数即可 对外提供增强方法 通过以前所学,继承一样可以解决这个问题,那么装饰可继承有什么区别呢? 拿I/O流 继承可以完成基本需求,导致了继承体系的臃肿。 而且子类功能的重复。 ................................................... /* 分析readLine(); 其实用的还是最终流对象的read(),一次读一个,但是将字符进行临时存储 当读取了结束标记回车符的时候,把临时存储中的数据一次性的返回 */ 装饰类 import java.io.*; class MyBufferedReader { private FileReader fr; MyBufferedReader(FileReader fr) { this.fr=fr; } public String myReadLine()throws IOException { StringBuilder sb=new StringBuilder();//1.5版本开始,所以本机无法运行。本机是1.4版本 int ch=0; while((ch=fr.read())!=-1) { if(ch=='\r') continue; //\r \n day12System,In那个视频里曾经讲过 if(ch=='\n') return sb.toString(); else sb.append((char)ch); } return null; } public void myClose()throws IOException { fr.close(); } } class MyBufferedReadDemo { public static void main(String[] args) throws IOException { FileReader fr =new FileReader("woxihuandalanqiu"); MyBufferedReader mybufr=new MyBufferedReader(fr); String line=null; while((line=mybufr.myReadLine())!=null) { System.out.println(line); } mybufr.myClose(); } } //此题目要理解总体的思想。 最有这一块比较重点!!!!!!!!!!!!!!!!!!!!!!!!! 9. import java.io.*; class FileReaderDemo2 { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("demo.txt"); int ch = 0; while((ch=fr.read())!=-1) { System.out.print((char)ch); } /* int ch = fr.read(); System.out.println(ch); int ch1 = fr.read(); System.out.println(ch1); */ fr.close(); } } /* 练习: 将C盘的1.txt文件复制到D盘。 */ 10. import java.io.*; class FileReaderDemo { public static void main(String[] args) throws IOException { //建立一个字符读取流对象,与指定文件相关联。 FileReader fr = new FileReader("demo.txt"); //创建一个字符数组。为了将从硬盘上读取的每一个字符存入数组中。 char[] arr = new char[1024]; int num = 0; while((num = fr.read(arr))!=-1) { System.out.println(new String(arr,0,num)); } /* int x = fr.read(arr); System.out.println(new String(arr,0,x)+","+x); int y = fr.read(arr); System.out.println(new String(arr,0,y)+","+y); int z = fr.read(arr); System.out.println(z); */ fr.close(); } } 11. /* 字符流: Reader Writer。 需求: 在硬盘上创建一个文件并写入一些数据。 */ import java.io.*; /* //创建FileWriter对象,调用window资源,在指定位置创建好了数据存放的目的地。 //如果指定目录下,已存在要创建的文件,那么会被覆盖。 FileWriter fw = new FileWriter("demo.txt"); //通过流对象write方法将字符串写入到流中。 fw.write("abcde"); //关闭资源,清空它先。 fw.close(); 需求:对原有文件进行数据的续写。 1,建立对象。 2,使用读写方法。 3,关闭资源。 */ class FileWriterDemo { public static void main(String[] args) //throws IOException { FileWriter fw = null; try { fw = new FileWriter("k:\\demo.txt",true); fw.write("qqqqq\r\nmmmm"); } catch (IOException e) { System.out.println(e.toString()); } finally { if(fw!=null) try { fw.close(); } catch (IOException e) { System.out.println("close:"+e.toString()); } } } } 12. import java.io.*; class LineNumberReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("CopyText.java"); LineNumberReader lnr = new LineNumberReader(fr); String line = null; lnr.setLineNumber(100); // System.out.println(lnr.getLineNumber()); // System.out.println(lnr.getLineNumber()); // System.out.println(lnr.getLineNumber()); while((line=lnr.readLine())!=null) { System.out.println(lnr.getLineNumber()+":"+line); } lnr.close(); } } 13. import java.util.*; class MathDemo { public static void main(String[] args) { /* for(int x=0; x<10; x++) { double d = Math.random()*10+1; System.out.println((int)d); } */ Random r = new Random(); for(int x=0; x<10; x++) { int num = r.nextInt(10)+1; System.out.println("num="+num); } } } 14. /* 分析readLine(); 其实用的还是最终流对象的read().一次读一个但是将字符进行临时存储。 当读取了结束标记回车符的时候,把临时存储中的数据一次性的返回。 */ import java.io.*; class MyBufferedReader { private Reader r ; MyBufferedReader(Reader r) { this.r = r; } public String myReadLine()throws IOException { StringBuilder sb = new StringBuilder(); int ch = 0; while((ch=r.read())!=-1) { if(ch=='\r') continue; if(ch=='\n') return sb.toString(); else sb.append((char)ch); } if(sb.length()!=0) return sb.toString(); return null; } public void myClose()throws IOException { r.close(); } } 15import java.io.*; class MyBufferedReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("buf.txt"); MyBufferedReader mybufr = new MyBufferedReader(fr); String line = null; while((line=mybufr.myReadLine())!=null) { System.out.println(line); } mybufr.myClose(); } } 16. class Person { void chifan() { System.out.println("chifan"); } } class SuperPerson { private Person p; SuperPerson(Person p) { this.p = p; } public void superChifan() { System.out.println("开胃酒"); p.chifan(); System.out.println("甜点"); System.out.println("来一根"); } } /* 装饰设计模式: 可以对原有对象的功能进行增强。 只要将原有对象作为参数传递给装饰类的构造函数即可。 对外提供增强方法。 通过以前所学,继承一样可以解决这个问题。 那么装饰和继承有什么区别? 继承方式增强每一个子类对象。 Writer |--FileWriter |--BufferedFileWriter。 |--MediaWriter |--BufferedMediaWriter |--DataWriter |--BufferedDataWriter 这样的设计可以完成基本需求,但是导致了继承体系的臃肿,而且子类功能的重复。 -------- class BufferedWriter { char[] BufferedWriter(FileWriter w) { } BufferedWriter(MediaWriter w) { } BufferedWriter(DataWriter w) { } public void write() { } } class BufferedWriter extends Writer { BufferedWriter(Writer w) { } public void write() { } } Writer |--FileWriter |--MediaWriter |--DataWriter |--BufferedWriter */ class PersonDemo { public static void main(String[] args) { Person p = new Person(); p.chifan(); //SuperPerson sp = new SuperPerson(p); //sp.superChifan(); } } 17IO: 用于设备上的数据处理。 IO的分类: 字符流,字节流。 在早期时,只有字节流,后期为了方便处理不同的文字出现了字符流。 因为编码的原因,而出现字符流。 所有IO体系中的对象通常都以自己所属的父类名作为子类名的后缀名。 IO体系顶层类: 四个抽象基类: 字节流: InputStream OutputStream。 字符流: Reader Writer。 使用了字符流中的子类对象。因为要操作的是硬盘的文件。 所以使用了FileReader,FileWriter. 需求: 在硬盘上建立一个文件,并往文件中写入内容。 1,建立字符写入流对象。 建立了流对象,调用了window资源,在指定位置创建了demo.txt文件。先建立了数据存储的目的。 但是因为传递参数的原因,有可能出现IO异常。 如果指定目录下已有该文件会出现覆盖操作。 如果需求是在原有文件中进行数据的续写。要在构造时,传入另一个参数true。new FileWriter("demo.txt",true); FileWriter fw = new FileWriter("demo.txt"); 2,调用流对象写入方法,将数据写入到流中。 fw.write("abcdec");//fw.write("abcd".toCharArray()); 3,对流中的数据进行刷新,将数据刷到目的当中。 fw.flush(); 可以进行频繁写入,并刷新。。。。 4,关闭资源,会刷新它先。 fw.close(); public void show() { FileWriter fw = null; try { fw = new FileWriter("c:/demo.txt"); fw.write("abced"); } catch(IOException e) { System.out.println(e.toString()); } finally { /* if(fw!=null) try { fw.close(); } catch(Exception e) { e.printStackTrace(); } */ closeAll(fw,null); } } 需求: 读取硬盘上的数据,并将其打印在控制台上。 //1,建立字符读取流对象。先用流对象与要读取的文件相关联。必须要保证该是存在的,否则会发生FileNotFoundException。 FileReader fr = new FileReader("demo.txt"); //2,定于一个临时容器,因为读到的都是字符数据,所以建立一个字符数组。 该数组的长度如何定义呢?以计算机的基本单位或者其整数倍作为长度 char[] arr = new char[1024]; //3,使用读取流对象的read(arr)方法,将读取到每一个字符数据存入到数组中。 该方法会读到的字符个数。其实就是往数组里面装的元素的个数。 int num = 0; while((num=fr.read(arr))!=-1) { System.out.println(new String(arr,0,num)); } //4,关闭资源。 fr.close(); 注意:读取流还有一个read()方法,该方法是没有参数的,一次读一个字符,并将读到的字符返回。 int ch = 0; while((ch=fr.read())!=-1) { System.out.println((char)ch); } 需求: copy文本文件 public void show() { FileReader fr = null; FileWriter fw = null; try { fr = new FileReader("demo.txt"); fw = new FileWriter("copydemo.txt"); char[] arr = new char[1024]; int num = 0; while((num=fr.read(arr))!=-1) { fw.write(arr,0,num); } } catch(Exception e) { ystem.out.println(e.toString()); } finally { closeAll(fw,fr); } } public void closeAll(Writer w,Reader r) { if(w!=null) try { w.close(); } catch(Exception e) { e.printStackTrace(); } if(r!=null) try { r.close(); } catch(Exception e) { e.printStackTrace(); } } ----------------------------------------- 为了提高了对流的操作效率,出现了缓冲技术,提高了流的操作效率。 该缓冲技术也被封装成了对象。 对于字符流: BufferedWriter: newLine();跨平台的换行符。 BufferedReader readLine():一次获取一行数据。不包括回车符。 缓冲技术,是为了提高流的效率,所以缓冲对象在初始化的时必须要有流。 使用缓冲技术一定要使
本文档为【IO笔记】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_215263
暂无简介~
格式:doc
大小:186KB
软件:Word
页数:0
分类:互联网
上传时间:2011-12-11
浏览量:21