java i/o 学习总结(二)
来源:互联网 发布:java相关的书籍 编辑:程序博客网 时间:2024/04/23 16:09
java i/o 学习总结(二)
在上一篇博客中,我总结了Java i/o中面向字节的部分。还有面向字符的部分没有总结,在这篇博客中,我会介绍面向字符部分的部分。
既然,已经有了面向字节的i/o,为什么还需要面向字符的i/o呢。我的理解是,面向字节无法处理汉字的问题,有汉字问题的时候,需要制定
编码方式,来保证正确的输出,否则只会出现乱码。面向字符部分,解决了这种问题,同时兼容Unicode。
reader和writer是面向字符的两个基本的类,他们的write()和read()方法是天然支持Unicode编码的。这为我们提供了便利。
Writer的常用子类有BufferedWriter,CharArrayWriter,PipedWriter,StringWriter.
还有两个用于转换字节和字符的流
InputStreamReader 用于字节向字符转换,它的子类是FileReader(很奇怪没有想字节系统一样,是Reader的子类)
OutputStreamWriter 用于字节向字符转换。它的子类是FileWriter。
下面是一个读入文件,输出到控制台的程序
public class Test{
public static void main(String [] args) throws IOException{
BufferedReader in=new BufferedReader( //这样写,是为了突出装饰器模式,File打开文件
new FileReader( //FileReader用来将文件读入,BufferReader用来缓存。
new File("src\\com\\nuc\\Test.java"))); //
String s;
StringBuilder sb=new StringBuilder();
while((s=in.readLine())!=null) //一次在文件中读一行,当读到末尾的时候为空,将其加入
sb.append(s+"\n"); //StringBuilder中,然后输出
in.close();
System.out.println(sb.toString());
}
}
下面,是一个复制文件的过程,当然也可以用InputStream和OutPutStream完成复制
public class Test2{
public static void main(String [] args) throws IOException{
BufferedReader in=new BufferedReader(
new FileReader("src\\com\\nuc\\Test.java"));
PrintWriter out=new PrintWriter(
new BufferedWriter(
new FileWriter("out")));
String s;
while((s=in.readLine())!=null){
out.print(s+"\n");
}
in.close();
out.close();
StringBuilder s1=new StringBuilder();
BufferedReader in1=new BufferedReader(
new FileReader("out"));
while((s=in1.readLine())!=null)
s1.append(s+"\n");
System.out.println(s1);
in1.close();
}
}
面向字符流和面向字节流都笔试孤立存在的,他们之间通常需要进行转换,例如GZip压缩文件的时候,就仅仅支持字节流,
所以,有的时候,需要字节流和字符流需药转换,如InputStreamReader,是把InpurSteam转换成Reader,OutputStream是把OutputStream转换成Writer
下面是对字符字节流转换,还有重定向的例子
System.in是一个InputStream,System.out是一个PrintStream()。
public class Test3{
public static void main(String [] args) throws IOException{
BufferedReader br=new BufferedReader(
new InputStreamReader(System.in)); //InputStreamReader用于把System.in装换成字符输出
PrintStream ps=new PrintStream(
new BufferedOutputStream(
new FileOutputStream("test"))); //首先,建立一个PrintStreem的流
System.setOut(ps); //将标准输出重定向到ps
PrintWriter out=new PrintWriter(System.out,true);
int i=5;
while(i!=0){
out.println(br.readLine()); //在控制台读入,写到文件里
i--;
}
ps.close();
}
}
在上一篇博客中,我总结了Java i/o中面向字节的部分。还有面向字符的部分没有总结,在这篇博客中,我会介绍面向字符部分的部分。
既然,已经有了面向字节的i/o,为什么还需要面向字符的i/o呢。我的理解是,面向字节无法处理汉字的问题,有汉字问题的时候,需要制定
编码方式,来保证正确的输出,否则只会出现乱码。面向字符部分,解决了这种问题,同时兼容Unicode。
reader和writer是面向字符的两个基本的类,他们的write()和read()方法是天然支持Unicode编码的。这为我们提供了便利。
下面,是reader和writer得继承体系结构。
Reader的常用子类有BufferedReader,CharArrayReader,PipedReader,StringReader.Writer的常用子类有BufferedWriter,CharArrayWriter,PipedWriter,StringWriter.
还有两个用于转换字节和字符的流
InputStreamReader 用于字节向字符转换,它的子类是FileReader(很奇怪没有想字节系统一样,是Reader的子类)
OutputStreamWriter 用于字节向字符转换。它的子类是FileWriter。
下面是一个读入文件,输出到控制台的程序
public class Test{
public static void main(String [] args) throws IOException{
BufferedReader in=new BufferedReader( //这样写,是为了突出装饰器模式,File打开文件
new FileReader( //FileReader用来将文件读入,BufferReader用来缓存。
new File("src\\com\\nuc\\Test.java"))); //
String s;
StringBuilder sb=new StringBuilder();
while((s=in.readLine())!=null) //一次在文件中读一行,当读到末尾的时候为空,将其加入
sb.append(s+"\n"); //StringBuilder中,然后输出
in.close();
System.out.println(sb.toString());
}
}
下面,是一个复制文件的过程,当然也可以用InputStream和OutPutStream完成复制
public class Test2{
public static void main(String [] args) throws IOException{
BufferedReader in=new BufferedReader(
new FileReader("src\\com\\nuc\\Test.java"));
PrintWriter out=new PrintWriter(
new BufferedWriter(
new FileWriter("out")));
String s;
while((s=in.readLine())!=null){
out.print(s+"\n");
}
in.close();
out.close();
StringBuilder s1=new StringBuilder();
BufferedReader in1=new BufferedReader(
new FileReader("out"));
while((s=in1.readLine())!=null)
s1.append(s+"\n");
System.out.println(s1);
in1.close();
}
}
面向字符流和面向字节流都笔试孤立存在的,他们之间通常需要进行转换,例如GZip压缩文件的时候,就仅仅支持字节流,
所以,有的时候,需要字节流和字符流需药转换,如InputStreamReader,是把InpurSteam转换成Reader,OutputStream是把OutputStream转换成Writer
下面是对字符字节流转换,还有重定向的例子
System.in是一个InputStream,System.out是一个PrintStream()。
public class Test3{
public static void main(String [] args) throws IOException{
BufferedReader br=new BufferedReader(
new InputStreamReader(System.in)); //InputStreamReader用于把System.in装换成字符输出
PrintStream ps=new PrintStream(
new BufferedOutputStream(
new FileOutputStream("test"))); //首先,建立一个PrintStreem的流
System.setOut(ps); //将标准输出重定向到ps
PrintWriter out=new PrintWriter(System.out,true);
int i=5;
while(i!=0){
out.println(br.readLine()); //在控制台读入,写到文件里
i--;
}
ps.close();
}
}
1 0
- java i/o 学习总结(二)
- Java I/O 学习总结(二)
- Java I/O总结(二)
- Java I/O流总结(二)
- java I/O学习(二)
- Java I/O 学习总结(一)
- Java I/O学习总结
- Java I/O 学习总结
- java i/o学习总结
- java学习小笔记(二.i/o)
- I/O系统之Java学习总结
- JAVA I/O流学习总结
- Java I/O 学习小总结
- 【黑马程序员】java I/O 学习总结
- java I/O 流总结学习
- Java I/O总结
- Java I/O总结
- java I/O总结
- Android严苛模式StrictMode使用详解
- archlinux 升级系统时遇到 “ca-certificates-utils: 文件系统中已存在 /etc/ssl/certs/ca-certificates.crt ”解决方案
- 路径中 斜杠/和反斜杠\ 的区别
- string和stringBuilder和stringBuffer的区别
- 非root用户搭建hadoop伪分布式
- java i/o 学习总结(二)
- python进阶学习笔记(二)——闭包、装饰器、偏函数
- Problem A: 立体空间中的点(I)
- 关于各种排序算法的代码分析
- python新手自学-dict
- LeetCode 523. Continuous Subarray Sum
- spring框架学习笔记03
- C++作业3
- 详解Jquery.form.js