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

黑马程序员-----IO流(1)字符流

2015-08-20 16:44 387 查看
——- android培训java培训、期待与您交流! ———-

1、 IO流用来处理设备之间的数据传输,JAVA对数据的操作是通过流的方式。

2、 IO流常用基类

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

字符流的抽象基类:Reader/Writer

3、字符流(写入)Writer

需求:在硬盘上创建一个文件并写入一些文字数据,并对文件进行续写。

package com.shan;
import java.io.FileWriter;
import java.io.IOException;

public class Demo8 {
public static void main(String[] args) throws IOException{

//创建一个可以往文件中写入字符数据的字符输出流对象
//既然是往一个文件中写入文字数据,那么在创建对象时,就必须明确该文件(用于存储数据的目的地)
//如果文件不存在,则会自动创建
//如果文件存在,则会被覆盖
FileWriter fw = new FileWriter("demo.txt" );

//调用Writer对象中的write(string)方法,写入数据
//其实数据写入到临时存储缓冲区中
fw.write( "abcde");

//进行刷新,将数据直接写入到目的地中
fw.flush();

//关闭流,关闭资源,在关闭前会先调用flush刷新缓冲中的数据到目的地。
fw.close();

/*对文件进行续写
FileWriter fw1 = new FileWriter("demo.txt" ,true);
fw1.write("\r\n xiexie");

//关闭流,关闭资源,在关闭前会先调用flush刷新缓冲中的数据到目的地。
fw1.close();
*/

}

}

关闭流,关闭资源,在关闭前会先调用flush刷新缓冲中的数据到目的地。
fw.close();
}
}


4、 字符流(读取)Reader

文本文件读取方式有两种:

方式一:通过Read()方法进行读取

方式二:通过字符数组进行读取

需求:将E盘下的一个文本文件复制到D盘(分别用这两种方式来读取)

package com.shan;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
* 需求:将E盘下的一个文本文件复制到D盘(分别用这两种方式来读取)
* @author ling
*
*/
public class Demo9 {

public static void main(String[] args) throws IOException{
//copy1();
}
/*第一种方式:一个字符一个字符的读取
public static void copy1() throws IOException
{
FileWriter fw=new FileWriter("ArrayList.txt");
FileReader fr=new FileReader("E:\\ArrayList.java");
int ch=0;
while((ch=fr.read())!=-1)
{
fw.write(ch);
fw.flush();
//fw.close();
//fr.close();
}
}
*/
//第二种方式:通过字符数组进行读取
public static void copy2() throws IOException
{
FileWriter fw=new FileWriter("E:\\1.txt");
FileReader fr=new FileReader("1.java");
char[] buf=new char[1024];
int len=0;
while((len=fr.read(buf))!=-1)
{
fw.write(buf, 0, len);
fw.close();
fr.close();
}

}

}


5、 字符流的缓冲区

BufferedWriter : 字符写入流缓冲区

BufferedReader : 字符读取流缓冲区

举例说明:字符写入流缓冲区

package com.shan;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
* 需求:将流对象写入缓冲区
* @param args
*/
public class Demo10 {

public static void main(String[] args) throws IOException {
//创建一个字符写入流对象
FileWriter fw=new FileWriter("buf.txt");
//为了提高字符写入流效率,加入缓冲技术,将流对象作为参数传递给缓冲区的构造函数即可
BufferedWriter  bufw=new BufferedWriter(fw);
for(int x=1;x<5;x++)
{
bufw.write("abcde"+x);
bufw.newLine();
bufw.flush();
}

bufw.close();

}

}


举例说明:字符读取流缓冲区

package com.shan;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
* 需求:通过缓冲区读取流文件
* @param args
*/
public class Demo11 {
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();

}

}


6、 综合实例: 通过缓冲区复制一个.java文件

package com.shan;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
* 需求:通过缓冲区复制一个.java文件
* @param args
*/
public class Demo12 {
public static void main(String[] args) {
BufferedWriter  bufw=null;
BufferedReader  bufr=null;
try
{
bufr=new BufferedReader(new FileReader("D:\\arraylist2.java"));
bufw=new BufferedWriter(new FileWriter("D:\\arraylist2_copy.txt"));
String line=null;
while((line=bufr.readLine())!=null)
{
bufw.write(line);
bufw.newLine();
}
}
catch(IOException e)
{
new RuntimeException("读写失败!");
}
finally
{
try
{
if(bufr!=null)
{
bufr.close();
}

}
catch(IOException e)
{
new RuntimeException("读取关闭失败!");
}
try
{
if(bufw!=null)
{
bufw.close();
}

}
catch(IOException e)
{
new RuntimeException("写入关闭失败!");
}

}

}

}


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