流操作基本规律
1、明确源和目的
源:输入流。InputStream Reader
目的:输出流。 OutputStream Writer
2、操作的数据是否是纯文本。
是:字符流
不是:字节流
3、当体系明确后,在明确要使用哪个具体的对象
通过设备来进行区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
转换流什么使用。字符和字节之间的桥梁,通常,涉及到字符编码转换时,需要用到转换流
字符流:
字符流只用来操作文字数据
字符流两个基类:
Reader
FileReader 录入
BufferedReader
Writer
FileWriter 读取
bufferedWriter
close和flush的区别:flush刷新后,流可以继续使用,close刷新后,关闭流
FileWriter
package BytePakage;
import java.io.*;
public class FileWriterDemo {
//需求:在硬盘上创建一个文件,并写入文字数据
public static void main(String[] args) throws IOException
{
//创建一个FileWriter对象。该对象一被初始化就必须要明确被操作的文件。
//而且该文件会被创建到指定目录下,如果该目录下已有同名文件,将被覆盖。
FileWriter file = new FileWriter("demo.text");
//调用write方法,将字符串写入流中
file.write("胡平燕");
//刷新流对象中的缓冲数据,将数据刷新到目的中
file.flush();
//关闭流资源,但是关闭之前会刷新一次内部的缓冲中的数据,
//将数据刷新到目的地中
//和flush的区别:flush刷新后,流可以继续使用,close刷新后,关闭流
file.close();
}
}
BufferedWriter
在创建缓冲区之前,必须先有对象流
该缓冲区提供了一个跨平台的换行符 newLine()方法
package BytePakage;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
public class BufferedWriterDemo {
public static void main(String[] args)throws IOException
{
FileWriter file = new FileWriter("E://text.txt");
//将对象流作为参数传递给缓冲区的构造函数即可
BufferedWriter bur = new BufferedWriter(file);
for(int i=1; i<5;i++)
{
bur.write("胡平燕"+i);
bur.newLine();//换行
bur.flush();//刷新流
}
//关闭缓冲区,就是在关闭缓冲区的对象流
bur.close();
}
}
BufferedReader
package BytePakage;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderDemo {
public static void main(String[] args)throws IOException
{
FileReader fr = new FileReader("E://text.txt");
BufferedReader buf = new BufferedReader(fr);
String line = null;
while((line = buf.readLine()) != null)
{
System.out.println(line);
}
buf.close();
}
}
FileReader
package BytePakage;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class CopyText {
public static void main(String[] args) throws IOException
{
FileWriter file = null;
FileReader fr3 = null;
try
{
//创建目的地
file = new FileWriter("E://demo.java");
//与已有文件关联
fr3 = new FileReader("F://demo.txt");
char[] ch2 = new char[1024];
int len = 0;
while((len = fr3.read(ch2))!=-1)
{
//将F盘文本文件Copy到E盘
file.write(ch2,0,len);
}
}
catch (IOException e)
{
throw new RuntimeException("读取失败");
}
finally
{
try
{
if(file != null)
file.close();
if(fr3 != null)
fr3.close();
}
catch (IOException e)
{
throw new RuntimeException("读取失败");
}
}
}
}
写入转换流
package BytePakage;
import java.io.BufferedWriter;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class TransStreamDemo2 {
public static void main(String[] args)
{
//键盘录入最常见写法
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));
String len = null;
while((len = bufw.readLine()) != null)
{
if("over".equals(bufw))
break;
bufw.write(len.toUpperCase());
bufw.newLine();
bufw.flush();
}
bufw.close();
}
}
读取转换流
<span style="font-size:12px;color:#000000;">package BytePakage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class TransStreamDemo {
public static void main(String[] args) throws IOException
{
//获取键盘录入对象。
//InputStream in = System.in;
//将字节流对象转成字符流对象,使用转换流。InputStreamReader
//InputStreamReader irs = new InputStreamReader(in);
//为了提高效率,将字符流进行缓冲区技术高效作用,使用BufferedReader
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
String len = null;
while((len = buf.readLine()) != null)
{
if("over".equals(len))
break;
System.out.println(len.toUpperCase());
}
}
}</span>
InputStream
FileInputStream 录入
BufferedInputStream
OutputStream
FileOutputStream 读取
BufferedOutputStream
复制文件案例
package BytePakage;
import java.io.*;
public class CopyPic {
public static void main(String[] args) throws Exception
{
FileInputStream fileI = null;
FileOutputStream fileO = null;
try
{
//获取硬盘文件
fileI = new FileInputStream("E://ed.JPEG");
//复制文件的对象
fileO = new FileOutputStream("E://ed2.JPEG");
byte[] buf = new byte[1024];
int len = 0;
while((len = fileI.read(buf)) != -1)
{
fileO.write(buf,0,len);
}
}
catch (Exception e)
{
throw new RuntimeException("复制文件失败");
}
finally
{
try
{
if(fileI != null)
fileI.close();
}
catch (Exception e2)
{
throw new RuntimeException("读取文件失败");
}
try
{
if(fileO != null)
fileO.close();
}
catch (Exception e2)
{
throw new RuntimeException("写入文件失败");
}
}
}
}
复制MP3
package BytePakage;
import java.io.*;
public class CopyMp3 {
public static void main(String[] args) throws IOException
{
long start = System.currentTimeMillis();
copy();
long end = System.currentTimeMillis();
System.out.println((end-start)+"毫秒");
}
public static void copy()throws IOException
{
BufferedInputStream bufInput = new BufferedInputStream(new FileInputStream("E://music1.mp3"));
BufferedOutputStream bufOutput = new BufferedOutputStream(new FileOutputStream("E://music2.mp3"));
int len = 0;
while((len = bufInput.read()) != -1)
{
bufOutput.write(len);
}
bufInput.close();
bufOutput.close();
}
}