您的位置:首页 > 其它

IO的初步理解(二)

2013-10-08 11:19 288 查看
节点流类型
类型字符流字节流
File(文件)FileReader

FileWriter
FileInputStream

FileOutputStream
Memory ArrayCharArrayReader

CharArrayWriter
ByteArrayInputStream

ByteArrayOutputStream
Memory String
StringReader

StringWriter
--
Pipe(管道)PipeReader

PipeWriter
PipedInputStream

PipedOutputStream
这里将补充一下字节流的类型,上一篇中的两个示例也是字节流的示例,包括这一篇中的两个示例一共有四个示例。这些小例子很简单,注释只是简单的写了一下。
FileWriter示例:

public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("d:\\1.txt");//在D盘下寻找1.txt文件,如果没有则新建一个
for(int c=0;c<=50;c++){
fw.write(c);//将打印前50个字符
}
fw.close();//关闭连接
} catch (IOException e1) {
e1.printStackTrace();
System.out.println("文件写入错误");
System.exit(-1);
}
}

这时打印出来的是Unicode编码的前50个编码打印到1.txt中。

FileReader示例:

public class TestFileReader {
public static void main(String[] args) {
FileReader fr = null;
int c = 0;
try {
fr = new FileReader("d:\\FileReader.java");
int ln = 0;
while ((c = fr.read()) != -1) {
System.out.print((char)c);//强制转换成char型
}
fr.close();
} catch (FileNotFoundException e) {
System.out.println("找不到指定文件");
} catch (IOException e) {
System.out.println("文件读取错误");
}

}

这时的程序中的中文就能正常打印了。

总结:节点流是将文件中的信息直接不加以任何改变的读取或者输出出来, 字节流是将文件中的信息一个字节一个字节的读取或者是写入,这时要注意像中文等文字在编码中是占据了两个字节的位置,这时候字节流不能将文件中的一部分信息准确的读取或者写入,这时候就要采用字节流了。

处理流类型
处理类型
字符流
字节流
Buffering
BufferedReader
BufferedWriter
Bufferedlnputstream
Bufferedoutputstream
Filtering
FilterReader

FilterWriter
Fllterlnputstream
FilterOutputstream
Converting between 
bytesand character
InputStreamWriter
OutputStreamWriter
Object
Serialization
Objectlnputstream
ObjectOutputstream
Data conversion
Datalnputstream
DataOutputstream
Counting 
LineNumberReader
LineNumberInputStream
Peeking ahead
PusbackReader
PushbackInputStream
Printing
PrintWriter
PrintStream
处理流得一种-----缓冲流:

缓冲流要"套接"在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。
缓冲流BufferedInputStream示例:
public static void main(String[] args) {
try {
FileInputStream fis = new FileInputStream("d:\\World.java");//以字节的方式读取文件中的内容
BufferedInputStream bis = new BufferedInputStream(fis);//将fis放入缓冲区里
int c = 0;
System.out.println(bis.read());
System.out.println(bis.read());
bis.mark(100);//从第100个开始读
for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
System.out.print((char)c+" ");//如果不加强制转换将打印数字
}
System.out.println();
bis.reset();回到第100的标记点上
for(int i=0;i<=10 && (c=bis.read())!=-1;i++){
System.out.print((char)c+" ");//如果不加强制转换将打印数字
}
bis.close();//关闭连接
} catch (IOException e) {e.printStackTrace();}
}

缓冲流BufferedWriter,BufferedReader示例:

public static void main(String[] args) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\1.txt"));//new出的FileWriter时就准备往里面写数据了,但是感觉这样直接使用不是很方便,于是在外面加上一个处理流BufferedWriter。这个加上的处理流是带缓冲区的。
BufferedReader br = new BufferedReader(new FileReader("d:\\1.txt"));
String s = null;
for(int i=1;i<=100;i++){
s = String.valueOf(Math.random());//产生一个随机数,然后把这个随机数转换为字符串
bw.write(s);
bw.newLine();//往文件里加入一个换行符,意义是每写一个字符串之后就加入一个换行符
}
bw.flush();//将缓冲的文件全部放入文件里面去
while((s=br.readLine())!=null){//br.readLine()将一行中的内容当作字符串传递出来
System.out.println(s);
}
bw.close();
br.close();//关闭两个连接
} catch (IOException e) { e.printStackTrace();}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: