/*
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():一次获取一行数据。不包括回车符。
缓冲技术,是为了提高流的效率,所以缓冲对象在初始化的时必须要有流。
使用缓冲技术一定要使