黑马程序员——黑马学习日志之十二 IO流(一)
2014-07-02 23:54
246 查看
------- android培训、java培训、期待与您交流!
----------
黑马学习日志之十二 IO流(一)
1 IO流:
IO流用来处理设备之间的数据传输,Java对数据操作是通过流的方式,Java用于操作
流的对象都在IO包中。
流按照数据分为:字符流 字节流 其中字节流可以操作任何数据,字符流对纯字符操作方便。
按照流向:输入流 输出流
字节流的抽象基类:InputStream OutputStream
字符流的抽象基类:Reader Writer
由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream。 Reader的子类FileReader。
2 字符流读写文件
既然IO流是用于操作数据类型,那么数据最常见的体现形式:文件。
写入文件FileWriter类
专门用于操作文件的Writer类子类FileWriter.
例子:
import java.io.*;
class FileWriterDemo
{
public static void main(String [] args) throws IOException//抛io异常
{
//创建一个FileWrite对象,该对象一被初始化必须要明确被操作的文件
//而且该文件会被创建到指定目录下。如果该目录下有同名文件,则会被覆盖
//其实该步就是在明确数据要存放的目的地
FileWriter fw = new FileWriter("demo.txt");
//调用write方法,将字符串写入到流中
fw.write("abcde");
//刷新对象中的缓冲中的数据
//将数据刷到目的地中
fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部的缓存中的数据
//flush刷新后,流可以继续使用,close刷新后,会将流关闭
fw.close();
}
}
IO流异常处理
import java.io.*;
class FileWriterDemo2
{
public static void main(String [] args){
FileWriter fw = null ;//这样整个代码都能看见
try
{
fw = new FileWriter("D:\\demo.txt");
fw.write("abcde");
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally{
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
文件续写
传递一个true参数,代表不覆盖已有的文件 在已有的文件的末尾处进行数据的续写
FileWriterfw =newFileWriter("demo.txt",true);
fw.write("hahanihao\r\nxiexie"); //windows中换行符\r\n
读取文件 FileReader类
专门用于操作文件的Reader类子类FileReader。
读取方式一:
例子:
import java.io.*;
class FileReaderDemo
{
public static void main(String [] args)throws IOException{
//创建一个文件读取流对象,和指定名称的文件相关联
//保证该文件是存在的,不存在就会发生异常FileNotFoundException
FileReader fr = new FileReader("demo.txt");
int ch = 0;
//调用读取流对象的read方法,read一次读一个字符,自动往下读,
// read()方法返回整数0—65535之间,如果到末尾,返回-1.
while ((ch=fr.read())!=-1)
{
System.out.println((char)ch);
}
fr.close();
}
}
读取方式二:通过数组读取
例子:
import java.io.*;
class FileReaderDemo2
{
public static void main(String [] args)throws IOException{
FileReader fr = new FileReader("demo.txt");
//定义一个字符数组,用于存储读到字符
//该read(char[])返回是读到字符个数
char[] buf = new char[1024]; //通常定义1024的整数倍
int num = 0;
while ((num=fr.read(buf))!=-1)
{
System.out.println(new String(buf,0,num));
}
fr.close();
}
}
3 字符流缓冲区
缓冲区提高了对数据的读写效率。
对应类:BufferedWriter BufferedReader
创建缓冲区之前,要先有流对象,缓冲区结合流才能使用,在流的基础上对流功能进行增强。
BufferedWriter类
例子:
import java.io.*;
class BufferedWriterDemo
{
public static void main(String [] args){
//创建一个字符写入流对象
FileWriter fw = new FileWriter("buf.txt");
//缓冲技术,其实就是将数组封装成对象
//将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw = new BufferedWriter(fw);
for (int x=1;x<5 ;x++ )
{
bufw.write("abcd");
bufw.newLine(); //该缓冲区中提供了一个跨平台的换行符 //newLine() 必须在缓冲区中才有该技术
bufw.flush();//写一次刷一次,以防内存中数据丢失
}
//记住,只要用到缓冲区,就要记得刷新 缓冲区位置在内存中
bufw.flush();
//其实关闭缓冲区,就是关闭缓冲区中的流对象 所以不必fw.close();
bufw.close();
}
}
BufferedReader类
例子:
import java.io.*;
class BufferedReaderDemo
{
public static void main(String [] args){
//创建一个读取流对象和文件相关联
FileReader fr = new FileReader("CopyText.java");
//缓冲
BufferedReader bufr = new BufferedReader(fr);
String line = null;
// readLine()方法,读一行,方便对文本数据的获取,不包含行终止符
//readLine()只返回回车符之前的数据内容。并不返回回车符
//当返回Null时,说明到文件末尾
while ((line=bufr.readLine())!=null)
{
System.out.println(line);
}
bufr.close();
}
}
LineNumberReader类是BufferedReader的子类
方法:
getLineNumber:获取行号,从0开始
setLineNumber:设置行号。默认从0开始,设置的是当前行号
4 装饰设计模式
当想要对已有的对象进行功能增强时,可以定义类。将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的该类成为装饰类。
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰对象的功能,提供更强的功能。
例子:
class Person
{
public void eat()
{
System.out.println("吃饭");
}
}
class SuperPerson
{
private Person p;
SuperPerson(Person){
this.p=p;
}
public void superEat(){
System.out.println("开胃酒");
p.eat();
System.out.println("甜点");
System.out.println("吸烟");
}
}
class PersonDemo
{
public static void main(String [] args){
Person p = new Person();
SuperPerson sp = new SuperPerson(p);
sp.superEat();
}
}
装饰和继承的区别:
装饰模式币继承更灵活,避免了继承体系臃肿,而且降低了类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有都是相同的,只不过提供了更强的功能,所以装饰类和被装饰类都属于一个体系中。
------- android培训、java培训、期待与您交流!
----------
----------
黑马学习日志之十二 IO流(一)
1 IO流:
IO流用来处理设备之间的数据传输,Java对数据操作是通过流的方式,Java用于操作
流的对象都在IO包中。
流按照数据分为:字符流 字节流 其中字节流可以操作任何数据,字符流对纯字符操作方便。
按照流向:输入流 输出流
字节流的抽象基类:InputStream OutputStream
字符流的抽象基类:Reader Writer
由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream。 Reader的子类FileReader。
2 字符流读写文件
既然IO流是用于操作数据类型,那么数据最常见的体现形式:文件。
写入文件FileWriter类
专门用于操作文件的Writer类子类FileWriter.
例子:
import java.io.*;
class FileWriterDemo
{
public static void main(String [] args) throws IOException//抛io异常
{
//创建一个FileWrite对象,该对象一被初始化必须要明确被操作的文件
//而且该文件会被创建到指定目录下。如果该目录下有同名文件,则会被覆盖
//其实该步就是在明确数据要存放的目的地
FileWriter fw = new FileWriter("demo.txt");
//调用write方法,将字符串写入到流中
fw.write("abcde");
//刷新对象中的缓冲中的数据
//将数据刷到目的地中
fw.flush();
//关闭流资源,但是关闭之前会刷新一次内部的缓存中的数据
//flush刷新后,流可以继续使用,close刷新后,会将流关闭
fw.close();
}
}
IO流异常处理
import java.io.*;
class FileWriterDemo2
{
public static void main(String [] args){
FileWriter fw = null ;//这样整个代码都能看见
try
{
fw = new FileWriter("D:\\demo.txt");
fw.write("abcde");
}
catch (IOException e)
{
System.out.println(e.toString());
}
finally{
try
{
if(fw!=null)
fw.close();
}
catch (IOException e)
{
System.out.println(e.toString());
}
}
}
}
文件续写
传递一个true参数,代表不覆盖已有的文件 在已有的文件的末尾处进行数据的续写
FileWriterfw =newFileWriter("demo.txt",true);
fw.write("hahanihao\r\nxiexie"); //windows中换行符\r\n
读取文件 FileReader类
专门用于操作文件的Reader类子类FileReader。
读取方式一:
例子:
import java.io.*;
class FileReaderDemo
{
public static void main(String [] args)throws IOException{
//创建一个文件读取流对象,和指定名称的文件相关联
//保证该文件是存在的,不存在就会发生异常FileNotFoundException
FileReader fr = new FileReader("demo.txt");
int ch = 0;
//调用读取流对象的read方法,read一次读一个字符,自动往下读,
// read()方法返回整数0—65535之间,如果到末尾,返回-1.
while ((ch=fr.read())!=-1)
{
System.out.println((char)ch);
}
fr.close();
}
}
读取方式二:通过数组读取
例子:
import java.io.*;
class FileReaderDemo2
{
public static void main(String [] args)throws IOException{
FileReader fr = new FileReader("demo.txt");
//定义一个字符数组,用于存储读到字符
//该read(char[])返回是读到字符个数
char[] buf = new char[1024]; //通常定义1024的整数倍
int num = 0;
while ((num=fr.read(buf))!=-1)
{
System.out.println(new String(buf,0,num));
}
fr.close();
}
}
3 字符流缓冲区
缓冲区提高了对数据的读写效率。
对应类:BufferedWriter BufferedReader
创建缓冲区之前,要先有流对象,缓冲区结合流才能使用,在流的基础上对流功能进行增强。
BufferedWriter类
例子:
import java.io.*;
class BufferedWriterDemo
{
public static void main(String [] args){
//创建一个字符写入流对象
FileWriter fw = new FileWriter("buf.txt");
//缓冲技术,其实就是将数组封装成对象
//将需要被提高效率的流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter bufw = new BufferedWriter(fw);
for (int x=1;x<5 ;x++ )
{
bufw.write("abcd");
bufw.newLine(); //该缓冲区中提供了一个跨平台的换行符 //newLine() 必须在缓冲区中才有该技术
bufw.flush();//写一次刷一次,以防内存中数据丢失
}
//记住,只要用到缓冲区,就要记得刷新 缓冲区位置在内存中
bufw.flush();
//其实关闭缓冲区,就是关闭缓冲区中的流对象 所以不必fw.close();
bufw.close();
}
}
BufferedReader类
例子:
import java.io.*;
class BufferedReaderDemo
{
public static void main(String [] args){
//创建一个读取流对象和文件相关联
FileReader fr = new FileReader("CopyText.java");
//缓冲
BufferedReader bufr = new BufferedReader(fr);
String line = null;
// readLine()方法,读一行,方便对文本数据的获取,不包含行终止符
//readLine()只返回回车符之前的数据内容。并不返回回车符
//当返回Null时,说明到文件末尾
while ((line=bufr.readLine())!=null)
{
System.out.println(line);
}
bufr.close();
}
}
LineNumberReader类是BufferedReader的子类
方法:
getLineNumber:获取行号,从0开始
setLineNumber:设置行号。默认从0开始,设置的是当前行号
4 装饰设计模式
当想要对已有的对象进行功能增强时,可以定义类。将已有对象传入,基于已有的功能,并提供加强功能,那么自定义的该类成为装饰类。
装饰类通常会通过构造方法接收被装饰的对象,并基于被装饰对象的功能,提供更强的功能。
例子:
class Person
{
public void eat()
{
System.out.println("吃饭");
}
}
class SuperPerson
{
private Person p;
SuperPerson(Person){
this.p=p;
}
public void superEat(){
System.out.println("开胃酒");
p.eat();
System.out.println("甜点");
System.out.println("吸烟");
}
}
class PersonDemo
{
public static void main(String [] args){
Person p = new Person();
SuperPerson sp = new SuperPerson(p);
sp.superEat();
}
}
装饰和继承的区别:
装饰模式币继承更灵活,避免了继承体系臃肿,而且降低了类与类之间的关系。
装饰类因为增强已有对象,具备的功能和已有都是相同的,只不过提供了更强的功能,所以装饰类和被装饰类都属于一个体系中。
------- android培训、java培训、期待与您交流!
----------
相关文章推荐
- 黑马程序员——黑马学习日志之十四 IO流(三)
- 黑马程序员——黑马学习日志之二 Java基础02
- 黑马程序员——黑马学习日志之六 静态,单例设计模式,继承,多态
- 黑马程序员——黑马学习日志之二十五 交通灯管理系统
- 黑马程序员——黑马学习日志之三 Java基础03
- 黑马程序员——黑马学习日志之十八 正则表达式
- 黑马程序员——黑马学习日志之二十六 银行业务调度系统
- 黑马程序员——黑马学习日志之二十一 Java高新技术(三)
- 黑马程序员——黑马学习日志之四 Java基础——数组
- 黑马程序员——黑马学习日志之十六 GUI
- 黑马程序员——黑马学习日志之八 异常
- 黑马程序员——学习日志9IO流
- 黑马程序员——黑马学习日志之五 面向对象,类,函数,匿名对象,封装,构造函数,this,代码块
- 黑马程序员——黑马学习日志之十 集合(一)
- 黑马程序员——黑马学习日志之二十四 Java高新技术(六)
- 黑马程序员——黑马学习日志之二十 Java高新技术(二)
- 黑马程序员——黑马学习日志之二十二 Java高新技术(四)
- 黑马程序员——黑马学习日志之九 多线程
- 黑马程序员——黑马学习日志之七 抽象类,接口,内部类,包
- 黑马程序员-----关于IO流学习日志