import org.junit.Test;
import java.io.*;
/**
* 一、流的分类
* 1.操作数据单位:字节流、字符流
* 2.数据的流向:输入流、输出流
* 3.流的角色:节点流、处理流
*
* 二、流的体系结构
* 抽象基类 节点流 缓冲流(处理流的一种)
* InputStream FileInputStream (read(byte [] buffer)) BufferedInputStream (read(byte [] buffer))
* OutputStream FileOutputStream (write(byte [] buffer,0,len)) BufferedOutputStream (write(byte [] buffer,0,len))
* Reader FileReader (read(char [] cbuf)) BufferedReader (read(char [] cbuf))
* Writer FileWriter (write(char [] cbuf,0,len)) BufferedWriter (write(char [] cbuf,0,len))
* @author orz
*/
public class FileReadWriteTest {
/**
* 将hello.txt文件内容读入程序中,并输出到控制台a
* FileReader基本操作
* 1.实例化File类的对象,指明要操作的文件
* 2.提供具体的流(FileReader)
* 3.数据读入(read)
* 4.流的关闭
*
*
* 说明点
* 1.public int read()理解:返回读入的一个字符。如果打到末尾,返回-1
* public int read(char cbuf[]) :返回每次读入cbuf数组中的字符个数。如果达到文件末尾,返回-1
* 2.异常处理:为了保证流资源一定可以执行关闭操作。需要使用try-catch-finally处理
* 3.读入文件一定要存在,否则会报FileNotFoundException
*/
@Test
public void test1()
{
//相对于module
//1.实例化File类的对象,指明要操作的文件
//
FileReader fr=null;
try
{
File file=new File("hello1.txt");
//2.提供具体的流
fr=new FileReader(file);
//3.数据读入
//public int read()//返回读入的一个字符,如果达到文件末尾,返回-1
int data;
while ((data=fr.read())!=-1)
{
System.out.print((char)data);
}
}catch (IOException e)
{
e.printStackTrace();
}
finally {
//4.流的关闭
if(fr!=null)
{
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
@Test
public void test2()
{
//1.File类的实例化
//2.FIleReader流实例化
//3.读入的操作
//4.资源的关闭
FileReader fr=null;
try {
File file=new File("hello.txt");
fr=new FileReader(file);
char [] cbuf=new char[5];
int len;
while ((len=fr.read(cbuf))!=-1)
{
for (int i = 0; i <len ; i++) {
System.out.print(cbuf[i]);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if(fr!=null)
{
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 从内存中写出数据到硬盘文件里
* 1.实例化File类的对象,指明要操作的文件
* 2.提供FileWriter的对象,用于数据的写出
* 3.写出的操作(write)
* 4.资源的关闭
*
*
*说明:
* 1.输出操作,对应的File可以不存在。并不会报异常
* 2.File对应的硬盘如果文件存在:
* 如果流使用的构造器是:FileWriter(file,false)/FileWriter(file):对原文件进行覆盖
* 如果流使用的构造器是:FileWriter(file,true):不会对原文件覆盖,而是在原文件基础上追加内容
*/
@Test
public void test3()
{
// 1.提供File类的对象,指明要写到的文件
File file=new File("hello.txt");
//2.提供FileWriter的对象,用于数据的写出
FileWriter fw=null;
try {
fw=new FileWriter(file,true);
//3.写出的操作
fw.write("I have a dream\n");
fw.write("I am 19 years old\n");
} catch (IOException e) {
e.printStackTrace();
}
finally {
if(fw!=null)
{
try {
//4.资源的关闭
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 综合使用输入输出流(相当于复制文件)
* //1.创建File类的对象,指明读入和写出的文件
* //2.创建输入流、输出流对象
* //3.数据的读入和写出操作
* //4.流资源关闭
*
*
*/
@Test
public void test4()
{
//1.创建File类的对象,指明读入和写出的文件
FileReader fr=null;
FileWriter fw=null;
try
{
//2.创建输入流、输出流对象
File file1=new File("hello.txt");
File file2=new File("hi.txt");
fr=new FileReader(file1);
fw=new FileWriter(file2);
//3.数据的读入和写出操作
char [] cbuf=new char[5];
int len;
while ((len=fr.read(cbuf))!=-1)
{
//每次写出len个字符
fw.write(cbuf,0,len);
}
}catch (IOException e)
{
e.printStackTrace();
}
finally {
//4.流资源关闭
try
{
if(fw!=null)
{
fw.close();
}
}catch (IOException e)
{
e.printStackTrace();
}
try {
if(fr!=null)
{
fr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Test
public void test5()
{
}
}