流:字节流和字符流。字节流只读取一个字节一个字节的读取。字符流是一个字符一个字符的读取。字节流可以处理各种格式数据,字符流只能处理文本格式的数据,一般对于文本格式来说可优先使用字符流。
常用流:
FileReader和FileWiter(继承于InputSteamReader和OutputSteamWriter)
常用方法:
int read();读取不到则返回-1;
int read(char[]);
int read(char[], i, j)
close();
int writer();
int wirter(char[]);
int writer(char[], i, j);
flush();刷新流,将流中的内容刷新到目的地,流还存在
close();关闭流
例子:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class IOTest {
//在指定位置生成txt文件,并将指定内容写入txt文件
public void test1(){
FileWriter fw1 = null;
try {
//将流写入指定的路径中
fw1= new FileWriter("D:/test1.txt");
fw1.write("wangyj1992");
fw1.flush();
fw1.write("happy");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(fw1!=null){
try {
fw1.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//从指定的文件下读取,并在管理台打印出来,一个字符一个字符的读
public void test2(){
FileReader fr = null;
try {
//从指定的路径中读取流
fr = new FileReader("D:/test1.txt");
int length = 0;
while((length=fr.read())!=-1){
System.out.println((char)length);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//从指定的文件下读取,并在管理台打印出来,按照指定长度读取
public void test3(){
FileReader fr = null;
try {
fr = new FileReader("D:/test1.txt");
int length = 0;
char[] buffer = new char[1024];
//每次读取1kb大小的字符,直到读到末尾-1为止
while((length=fr.read(buffer))!=-1){
System.out.println(new String(buffer, 0, length));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
IOTest ioTest = new IOTest();
//在指定的D:/test1.txt路径下生成txt文件,且txt文件内容为wangyj1992happy
//ioTest.test1();
//将D:/test1.txt文件下的内容,一个字符一个字符的打印到控制台上
//打印内容:
//w
//a
//n
//g
//y
//j
//1
//9
//9
//2
//h
//a
//p
//p
//y
//ioTest.test2();
//将D:/test1.txt文件下的内容,一次性读取1kb的内容,然后一次性打印在控制台上
//打印内容:wangyj1992happy
ioTest.test3();
}
}
常用流:
BufferReader和BufferWriter字符流的缓冲区。其是为了加强流处理的效率,本质是讲流用数组进行封装,一次性处理。因为它是对流的效率进行加强处理,所以是在流的基础上完成的,所以在使用BufferReader和BufferWriter的时候是基于流的基础上使用。
BufferReader特有发方法readLine();读不到的为null
BufferWriter特有的方法为newLine();
根据前面所说的建立缓冲区时要先有流对象,并将其作为参数传递给缓冲区的构造函数。
例子:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class IOTest {
/**
* 用非缓存流的方式,将指定的某个文件的内容写到另一个文件中去
* read(char[]),-1,int
*/
public void test4(){
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("D:/test1.txt");
fw = new FileWriter("D:/writer.txt");
int length = 0;
char[] buf = new char[1024];
while((length=fr.read(buf))!=-1){
System.out.println(new String(buf, 0, length));
fw.write(new String(buf, 0, length));
fw.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fw!=null){
fw.close();
}
if(fr!=null){
fr.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 用缓存流的方式,将指定的某个文件的内容写到另一个文件中去
* 因为缓冲流的存在是加强流的处理效率,所以缓冲流是基于流存在的
* readLine(),null,String
*/
public void test5(){
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader("D:/test1.txt"));
bw = new BufferedWriter(new FileWriter("D:/writer.txt"));
String buffer = null;
while((buffer=br.readLine())!=null){
bw.write(buffer);
bw.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(bw!=null){
bw.close();
}
if(br!=null){
br.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
IOTest ioTest = new IOTest();
//将test1.txt的内容赋值到witer.txt文件中
ioTest.test4();
//将test1.txt的内容赋值到witer.txt文件中
//ioTest.test5();
}
}
完整代码片:
package test1;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class IOTest {
//在指定位置生成txt文件,并将指定内容写入txt文件
public void test1(){
FileWriter fw1 = null;
try {
//将流写入指定的路径中
fw1= new FileWriter("D:/test1.txt");
fw1.write("wangyj1992");
fw1.flush();
fw1.write("happy");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(fw1!=null){
try {
fw1.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//从指定的文件下读取,并在管理台打印出来,一个字符一个字符的读
public void test2(){
FileReader fr = null;
try {
//从指定的路径中读取流
fr = new FileReader("D:/test1.txt");
int length = 0;
while((length=fr.read())!=-1){
System.out.println((char)length);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//从指定的文件下读取,并在管理台打印出来,按照指定长度读取
public void test3(){
FileReader fr = null;
try {
fr = new FileReader("D:/test1.txt");
int length = 0;
char[] buffer = new char[1024];
//每次读取1kb大小的字符,直到读到末尾-1为止
while((length=fr.read(buffer))!=-1){
System.out.println(new String(buffer, 0, length));
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(fr!=null){
try {
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 用非缓存流的方式,将指定的某个文件的内容写到另一个文件中去
* read(char[]),-1,int
*/
public void test4(){
FileReader fr = null;
FileWriter fw = null;
try {
fr = new FileReader("D:/test1.txt");
fw = new FileWriter("D:/writer.txt");
int length = 0;
char[] buf = new char[1024];
while((length=fr.read(buf))!=-1){
System.out.println(new String(buf, 0, length));
fw.write(new String(buf, 0, length));
fw.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(fw!=null){
fw.close();
}
if(fr!=null){
fr.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 用缓存流的方式,将指定的某个文件的内容写到另一个文件中去
* 因为缓冲流的存在是加强流的处理效率,所以缓冲流是基于流存在的
* readLine(),null,String
*/
public void test5(){
BufferedReader br = null;
BufferedWriter bw = null;
try {
br = new BufferedReader(new FileReader("D:/test1.txt"));
bw = new BufferedWriter(new FileWriter("D:/writer.txt"));
String buffer = null;
while((buffer=br.readLine())!=null){
bw.write(buffer);
bw.flush();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(bw!=null){
bw.close();
}
if(br!=null){
br.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
IOTest ioTest = new IOTest();
//在指定的D:/test1.txt路径下生成txt文件,且txt文件内容为wangyj1992happy
//ioTest.test1();
//将D:/test1.txt文件下的内容,一个字符一个字符的打印到控制台上
//打印内容:
//w
//a
//n
//g
//y
//j
//1
//9
//9
//2
//h
//a
//p
//p
//y
//ioTest.test2();
//将D:/test1.txt文件下的内容,一次性读取1kb的内容,然后一次性打印在控制台上
//打印内容:wangyj1992happy
//ioTest.test3();
//将test1.txt的内容赋值到witer.txt文件中
ioTest.test4();
//将test1.txt的内容赋值到witer.txt文件中
//ioTest.test5();
}
}