您的位置:首页 > 职场人生

黑马程序员--java基础--io流(1)

2014-02-10 22:38 447 查看
------- android培训java培训、期待与您交流! ----------
 

目录:1、io流概述 2、字符流 3、IO异常处理方式4、IO流-BufferedWriter(缓冲流-写)  5、BufferedReader(字符流读取缓冲区)6、装饰和继承的区别 7、字节流的缓冲区

 

1、IO流

1,IO流用来处理设备之间的数据传输

2,Java对数据的操作都是通过流的方式

3,Java用于操作流的对象都在IO包中

4,流按操作数据分两种:字节流(通用),字符流(融合了编码表)

5,流按流向分:输入流,输出流

字节流的抽象基类:InputStream,OutputStream

字符流的抽象基类:Readr,Writer

2、字符流:
FileReader

FileWriter

BufferedReader

BufferedWriter

 

FileWrite

import java.io.*;
class FileWriterDemo {
public static void main(String[] args)throws IOException
{
//第一步:创建一个FileWriter对象。该对象一被初始化,就必须要明确要被操作的文件。
//而且该文件会创建到指定的目录下,如果该目录下已有同名文件,将被覆盖
//其实该步就是在明确数据要存放到目的地
FileWriter fw = new FileWriter("demo.txt");

//第二步:调用write方法,将字符串写入到流中
fw.write("abcd");

//第三步:刷新流对象中的缓冲中的数据。
//将数据刷新到目的地中
fw.flush();

fw.write("haha");

fw.flush();
//第四步,关闭资源,但是关闭之前会刷新一次内部的缓冲中的数据
//将数据刷新到目的地中,和flush的区别:
//flush刷新后可以继续使用close刷新后,会将流关闭
fw.close();
}
}

FileReader

import java.io.FileReader;
import java.io.IOException;

class FileReaderDemo {
public static void main(String[] args)throws IOException
{
//创建一个文件读取流对象,和指定名称的文件相关联
//要保证文件是已经存在的,如果不存在,会发生异常FileNotFoundException
FileReader fr = new FileReader("Demo.txt");

//调用读取流对象的read方法。
//read():一次读一个字符。而且会自动往下读

int ch = 0;
while((ch=fr.read())!=-1) {
System.out.println((char)ch);
}
/*
while(true)
{
int ch = fr.read();
if(ch==-1)
break;
System.out.println((char)ch);
}
*/
fr.close();
}
}


 

3、IO异常处理方式

import java.io.FileWriter;
import java.io.IOException;
class FileWriteDemo2 {
public static void main(String[] args)
{
FileWriter fw = null;
try
{
//这里需注意的是,写盘符一定要两个\比如:c:\\demo.txt
fw = new FileWriter("demo.txt");

fw.write("abcdddr");
}
catch(IOException e)
{
System.out.println("catch:"+e.toString());
}
finally
{
try//fw.close();也有异常,所以要继续捕获
{
if(fw!=null)//一定要判断不为空
{
fw.close();
}
}
catch(IOException e)
{
System.out.println(e.toString());
}
}
}
}

4、IO流-BufferedWriter(缓冲流-写)
缓冲区的出现是为了提高流的操作效率而出现的。

所以在创建缓冲区之前,必须要现有流对象。

该缓冲区中提供了一个跨平台的换行符方法

newLine();

 

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
IO流-BufferedWriter演示
*/
class BufferedWriterDemo {
public static void main(String[] args)throws IOException
{
//创建一个字符流对象buf.txt
FileWriter fw = new FileWriter("buf.txt");

//加入缓冲技术
BufferedWriter bw = new BufferedWriter(fw);

//演示换行newLine()
for(int x=0;x<5;x++)
{
bw.write("abcde"+x);
bw.newLine();
bw.flush();
}

//关闭缓冲区
bw.close();
}
}


5、BufferedReader(字符流读取缓冲区)


该缓冲区中提供了一个一次读一行的方法readLine(),方便对文本数据的获取

当返回null时,表示读到文件末尾.

readLine()方法返回的时候值返回回车符之前的数据内容,并不返回回车符

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

/**
* 演示BufferedReader
*/
class BufferedReaderDemo {
public static void main(String[] args)throws IOException
{
//创建一个读取流对象
FileReader fr = new FileReader("buf.txt");

//创建一个读的流缓冲区对象
BufferedReader br = new BufferedReader(fr);

//演示一行一行读的方法readLine();
String line = null;
while((line = br.readLine())!=null)
{
System.out.println(line);
}

//关闭缓冲区
br.close();
}
}

6、装饰和继承的区别

装饰模式比继承要灵活,避免了继承体系的臃肿。

而且降低了类与类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能。

所以装饰类和被装饰类通常都是一个体系当中的

字节流:

InputStream

OutputStream

BufferedInputSream

BufferedOutputSream

示例:字节流拷贝文件

class CopyPic {
public static void main(String[] args)throws IOException
{
//拷贝的文件
FileOutputStream fos = null;

//源文件
FileInputStream fis = null;

try
{
fos = new FileOutputStream(d:\\2.jpg);

fis = new FileInputStream(d:\\1.jpg);

byte[] buf = new byte[1024];
int ch = 0;
while((ch=fis.read(buf))!=-1)
{
fos.write(buf,0,ch);
}
}
catch(IOException e)
{
System.out.println("复制失败");
}
finally
{
try
{
if(fis!=null)
fis.close();
}
catch(IOException e)
{
System.out.println("读取关闭失败");
}

try
{
if(fos!=null)
fos.close();
}
catch(IOException e)
{
System.out.println("复制关闭失败");
}
}
}

}
}

7、字节流的缓冲区

class CopyMp3 {
public static void main(String[] args)throws IOException
{
long start = System.currentTimeMillis();
copy_1();
long end = System.currentTimeMillis();

System.out.println((end-start)+"毫秒");
}
//通过字节流的缓冲区完成复制.
public static void copy_1()throws IOException
{
BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("H:\\1.mp3"));
BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("H:\\2.mp3"));

int by = 0;
while((by = bufis.read())!=-1)
{
bufos.write(by);
}

bufos.close();
bufis.close();
}

 

 

 

------- android培训java培训、期待与您交流! ----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  class