------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
package file;
import java.io.FileReader;
import java.io.FileWriter;
//输入流的练习例子
public class Hebing {
public static void main(String[] args) {
FileWriter b2b=null;
FileReader b1=null;
FileReader b2=null;
try {
b2b=new FileWriter("c:\\OneAndTwo.txt");
b1=new FileReader("c:\\One.txt");
b2=new FileReader("c:\\Two.txt");
char[] ch=new char[1024];
int len=0;
len=b1.read(ch);
b2b.write(ch,0,len);
len=b2.read(ch);
b2b.write(ch, 0, len);
} catch (Exception e) {
System.out.println("e++++"+e.toString());
}
finally{
if(b2b!=null){
try {
b2b.close();
} catch (Exception e2) {
System.out.println("e2+++"+e2.toString());
}
}
if(b1!=null){
try {
b1.close();
} catch (Exception e3) {
System.out.println("e3+++"+e3.toString());
}
}
if(b2!=null){
try {
b2.close();
} catch (Exception e4) {
System.out.println("e4+++"+e4.toString());
}
}
}
}
}
数据流是一串连续不断的数据的集合,就像水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流.
程序需要数据 --> 读进来 --> 输入
程序保存数据 --> 写出去 --> 输出
分类:
按流动方向的不同可以分为输入流和输出流;
按处理数据的单位不同分为字节流和字符流;
按功能的不同可分为节点流和处理流;
一般步骤为:
import java.io.FileInputStream;
import java.io.InputStream;
public class Demo4 {
public static void main(String[] args) throws Exception {
//第一步:创建源!
String filename = "6.4";//这个文件是在工作空间里面,没有后缀名!
//第二步:创建管道!
InputStream ips = new FileInputStream(filename);
//第三步:操作!
byte []buff = new byte[1024];
int len;//定义缓冲区
while((len = ips.read(buff)) != -1){
System.out.println(new String(buff,0,buff.length));//输出到控制台!此时的输出流就是打印流!
System.out.println("==========================================");//打印下,看哪里在1024。1024的地方被隔开了
}
//第四步:关闭资源(字符流必须关闭资源,因为它中间有缓冲区!对于字节流可以不用关闭,但是还是建议写上,习惯!)
ips.close();
}
}
字节流和字符流的区别
字节流和字符流在使用上的代码结构都是非常类似的,但是其内部本身也是有区别的,因为在进行字符流操作的时候会使用到缓冲区(内存中),而字节流操作的时候是不会使用到缓冲区的。
在输出的时候,OutputStream类即使最后没有关闭内容也可以输出。但是如果是Writer的话,则如果不关闭,最后一条内容是无法输出的,因为所有的内容都是保存在了缓冲区之中,每当调用了close()方法就意味着清空缓冲区了。那么可以证明字符流确实使用了缓冲区:
字节流:程序 → 文件
字符流:程序 → 缓冲区(内存中) → 文件
如果现在字符流即使不关闭也可以完成输出的话,则必须强制性清空缓冲区:
方法:public void flush() throws IOException
总结:
两者相比,肯定使用字节流更加的方便,而且在程序中像图片、MP3等都是采用字节的方式的保存,那么肯定字节流会比字符流使用的更广泛。
但是需要说明的是,但是如果要是想操作中文的话,字符流肯定是最好使的。
字节→字符转换流
OutputStreamWriter:把字节输出流对象转成字符输出流对象
InputStreamReader:把字节输入流对象转成字符输入流对象
FileWriter和FileReader分别是OutputStreamWriter和InputStreamReader的直接子类,而不是Writer和Reader的直接子类,区别于FileInputStream 和InputStream。
我的总结:无论使用字节流还是字符流实际上在内存中最终都是通过字节的形式来操作流的。
所以并没有字符流转换字节流。
Eg:
//构建一个字节输出流对象
OutputStream out = newFileOutputStream("");
//把字节输出流转成字符输出流
Writer w = new OutputStreamWriter(out);
//然后的操作和使用字符输出流的操作一样
---------------------------------------------
//构建一个字节输入流对象
InputStream is = newFileInputStream("");
//把字节输入流转成字符输入流
Reader r = new InputStreamReader(is);
//然后的操作和使用字符输入流的操作一样