通过JAVA——IO流 篇五的规律分析以下实例。
-
复制一个文本文件 1. 明确目的和源: 源: Reader InputStream 目的: Writer OutputStream 2. 明确数量是否为纯文本(分析:文本文件是纯文本): 源:Reader 目的:Writer 3. 明确具体的设备(分析:文本文件都保存到了硬盘上): 源设备:硬盘——File 则可通过FileReader对象操作源 目的设备:硬盘——File 则可通过FileWriter对象操作目的 4. 是否需要其他额外功能(分析:想用上缓冲区Buffer) 对于源可使用字符输入缓冲区:BufferedReader 对于目的使用字符输出缓冲区:BufferWriter
/**
* 复制文件
* @param sourcePath 源文件路径
* @param aimPath 目的文件路径
*/
public static void copyFile(String sourcePath, String aimPath )
{
//创建字符输入缓冲区对象
BufferedReader bufferedReader = null;
//创建字符输出流缓冲区对象
BufferedWriter bufferedWriter = null;
try {
//创建字符输入流对象
FileReader fileReader = new FileReader(sourcePath);
bufferedReader = new BufferedReader(fileReader);
//创建字符输出流对象
FileWriter fileWriter = new FileWriter(aimPath);
bufferedWriter = new BufferedWriter(fileWriter);
int readSize = 0;
char[] buff = new char[1024];
//将字符输入缓冲区的数据写入
while ((readSize = bufferedReader.read(buff)) != -1) {
bufferedWriter.write(buff, 0, readSize);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(bufferedReader != null)
{
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(bufferedWriter != null)
{
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
-
读取键盘录入信息,并写入到一个文件中。 1.明确源和目的 源: Reader InputStream 目的:Writer OutputStream 2.明确数据是否为纯文本(分析:输入键盘录入是字节流但是也是纯文本数据 输出文本文件是纯文本文件) 源:Reader 目的: Writer 3.明确具体设备 源设备:键盘 System.in 则可获取到字节输入流 目的设备:硬盘File 则可通过FileWriter对象操作目的 4.是否需要额外功能 需要转换:将键盘录入的字节流进行转换成字符流, InputStreamReader(从字节流到字符流的桥 ) 需要高效:用上缓冲区Buffer(BufferRead BufferWriter)
/**
* 读取键盘录入信息,并写入到一个文件中
* @param aimPath 文件路径
*/
public static void keyToFile(String aimPath)
{
//创建字符输出流缓冲区
BufferedWriter bufferedWriter = null;
try {
//创建将字节流转换成字符流的对象(输入流)
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
//创建字符输入流缓冲区
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
//创建字符输出流对象
FileWriter writer = new FileWriter(aimPath);
bufferedWriter = new BufferedWriter(writer);
String readbuf = null;
while ((readbuf = bufferedReader.readLine()) != null) {
bufferedWriter.write(readbuf);
bufferedWriter.newLine();
bufferedWriter.flush();
if (readbuf.equals("OVER")) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(bufferedWriter != null)
{
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
-
将一个文件文件数据显示在控制台上 1. 明确源和目的 源: Reader InputStream 目的:Writer OutputStream 2. 文件是否为纯文本文件 源:Reader 目的:Writer 3. 明确设备 源:硬盘File FileReader 目的:控制台 System.out 4. 是否需要额外功能 需要转换: System.out是字节流需要转换成字符流 需要高效: 添加缓冲区(Buffer) BufferedReader BufferedWriter
/**
* 将一个文件文件数据显示在控制台上
* @param sourcePath 文件路径
* @throws Exception
*/
public static void fileToConsole(String sourcePath)
{
BufferedReader bufferedReader = null;
try {
FileReader fileReader = new FileReader(sourcePath);
bufferedReader = new BufferedReader(fileReader);
OutputStreamWriter out = new OutputStreamWriter(System.out);
BufferedWriter bufferedWriter = new BufferedWriter(out);
char[] cbuf = new char[1024];
int len = 0;
while ((len = bufferedReader.read(cbuf)) != -1) {
bufferedWriter.write(cbuf, 0, len);
bufferedWriter.flush();
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(bufferedReader != null)
{
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
-
读取键盘录入的数据,显示在控制台上。 1. 明确源和目的 源: Reader InputStream 目的:Writer OutputStream 2. 是否为纯文本文件 源:Reader 目的:Writer 3. 明确设备 源:System.in 目的:System.out 4. 是否需要额外功能 需要转换 需要高效
/**
* 读取键盘录入的数据,显示在控制台上。
*/
public static void consoleToConsole()
{
InputStreamReader inputStreamReader = new InputStreamReader(System.in);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(System.out);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
String line = null;
try {
while ((line = bufferedReader.readLine()) != null) {
bufferedWriter.write(line);
bufferedWriter.newLine();
bufferedWriter.flush();
if ("OVER".equals(line)) {
break;
}
}
} catch (Exception e) {
e.printStackTrace();
}
}