----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
java IO流操作规律总结
1,明确源和目的。
源:输入流。InputStream Reader
目的:输出流。OutputStream Writer。
2,操作的数据是否是纯文本。
是:字符流。
不是:字节流。
3,当体系明确后,在明确要使用哪个具体的对象。
通过设备来进行区分:
------源设备:键盘(System.in),硬盘,内存(数组)
---目的设备:控制台(System.out),硬盘,内存(数组)
将一个文本文件中数据存储到另一个文件中。复制文件。
源:因为是源,所以使用读取流。InputStream Reader
是不是操作文本文件。 ---是!这时就可以选择Reader
明确设备:硬盘上一个文件。
Reader体系中可以操作文件的对象是 FileReader
是否需要提高效率:是!。加入Reader体系中缓冲区 BufferedReader
FileReader fr = new FileReader("a.txt");
BufferedReader bufr = new BufferedReader(fr);
目的:OutputStream Writer
是否是纯文本。 --是!Writer。
设备:硬盘,一个文件。
Writer体系中可以操作文件的对象FileWriter。
是否需要提高效率:是!。加入Writer体系中缓冲区 BufferedWriter
FileWriter fw = new FileWriter("b.txt");
BufferedWriter bufw = new BufferedWriter(fw);
import java.io.*;
class CopyFile
{
public static void main(String[] args)throws Exception
{
FileReader fr = new FileReader("IODemo.java");
BufferedReader bufr = new BufferedReader(fr);
FileWriter fw = new FileWriter("d:\\demo.txt");
BufferedWriter bufw = new BufferedWriter(fw);
String s = null;
while((s=bufr.readLine())!=null)
{
bufw.write(s);//写入数据
bufw.newLine();//换行
bufw.flush();//刷新数据
}
//关闭流
bufr.close();
bufw.close();
}
}
图片、MP3的复制
/*
Copy图片 MP3、、
必须使用字节流
*/
import java.io.*;
class Copy
{
public static void main(String[] args) throws Exception
{
//通过字节流的缓冲区完成
BufferedInputStream bufis = new BufferedInputStream(
new FileInputStream("D:\\Dream\\images\\none.jpg"));
BufferedOutputStream bufos = new BufferedOutputStream(
new FileOutputStream("d:/2.jpg"));//目录写法:"d:\\2.jpg"或"d:/2.jpg"
int b = 0;
while((b=bufis.read())!=-1)
{
bufos.write(b);
bufos.flush();
}
bufis.close();
bufos.close();
}
}
将一个文本文件的数据打印在控制台上
import java.io.*;
class FileToSystem
{
public static void main(String[] args) throws Exception
{
//源:操作文本文件 ,所以用FileReader
//为了提高效率 加入缓冲区内 BufferedReader
FileReader fr = new FileReader("demo.txt");
BufferedReader bufr = new BufferedReader(fr);
//打印在控制台上 System.out
//通过转换流,使用字符流操作,并加入缓冲区
OutputStreamWriter osw = new OutputStreamWriter(System.out);
BufferedWriter bufw = new BufferedWriter(osw);
String s = null;
while((s=bufr.readLine())!=null)
{
//System.out.println(s);//直接在控制台输出
bufw.write(s);
bufw.newLine();
bufw.flush();
}
bufr.close();
bufw.close();
}
}
需求:将键盘录入的数据保存到一个文件中。
这个需求中有源和目的都存在。
那么分别分析
源:InputStream Reader
是不是纯文本?是!Reader
设备:键盘。对应的对象是System.in.
不是选择Reader吗?System.in对应的不是字节流吗?
为了操作键盘的文本数据方便。转成字符流按照字符串操作是最方便的。
所以既然明确了Reader,那么就将System.in转换成Reader。
用了Reader体系中转换流,InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
需要提高效率吗?需要!BufferedReader
BufferedReader bufr = new BufferedReader(isr);
目的:OutputStream Writer
是否是存文本?是!Writer。
设备:硬盘。一个文件。使用 FileWriter。
FileWriter fw = new FileWriter("c.txt");
需要提高效率吗?需要。
BufferedWriter bufw = new BufferedWriter(fw);
import java.io.*;
class ToSystem
{
public static void main(String[] args) throws Exception
{
//为了操作键盘的文本数据方便,转成字符流按照字符串操作是最方便的。
//用Reader体系中转换流InputStreamReader,将System.in转换成Reader
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader bufr = new BufferedReader(isr);
FileWriter fw = new FileWriter("toSystem.txt");
BufferedWriter bufw = new BufferedWriter(fw);
String line = null;
while((line=bufr.readLine())!=null)
{
//输入"over"则代表录入结束
if(line.equals("over"))
break;
bufw.write(line);
bufw.newLine();//换行
bufw.flush();//刷新数据
}
//关闭流
bufr.close();
bufw.close();
}
}
**************
对上面的扩展,想要把录入的数据按照指定的编码表(utf-8),将数据存到文件中。
import java.io.*;
class ToFile2
{
public static void main(String[] args) throws Exception
{
//为了操作键盘的文本数据方便,转成字符流按照字符串操作是最方便的。
//用Reader体系中转换流InputStreamReader,将System.in转换成Reader
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader bufr = new BufferedReader(isr);
//存储时,需要加入指定编码表utf-8。而指定的编码表只有转换流可以指定。
//所以要使用的对象是OutputStreamWriter。
//而该转换流对象要接收一个字节输出流。而且还可以操作的文件的字节输出流。FileOutputStream
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("d.txt"),"UTF-8");
//需要高效吗?需要
BufferedWriter bufw = new BufferedWriter(osw);
String line = null;
while((line=bufr.readLine())!=null)
{
//输入"over"则代表录入结束
if(line.equals("over"))
break;
bufw.write(line);
bufw.newLine();//换行
bufw.flush();//刷新数据
}
//关闭流
bufr.close();
bufw.close();
}
}
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------