java Io流学习(三)字符流
2017-08-03 11:06
162 查看
一、字符流定义:
字节流提供了针对字节处理的输入输出功能,基本满足了一切需求,但是其不能针对字符进行操作,unicode字符占用2个字节,如果要用字节流处理的话,还需要进行解码操作,不符合java的"一次编写,处处运行的"原则,因此针对于字符类的输入输出java 也提供了直接处理的流类,Reader和writer
二、Reader(字符输入流)
Reader是java的所有字符输入流的顶级父类,本质也是一个抽象类,因此只能由其子类进行实例化,对于此类,了解下常用的APi即可
1)read()方法
2、read(char[] b)方法
3、read(char[] b,int off,int len)方法
以上3种read方法,建议使用read(char[] b)方法进行读取较好,第一个read()方法,单个读取,效率较低,第三个方法,要考虑字符溢出问题,所以建议使用第二个方法进行读取(注意仅限读取字母,数字等,读取中文汉字会出现乱码,需使用其他输入流)
三、writer(字符输出流)
writer是java 所有字符输出流的父类,其本质是抽象类,不能实例化,只能由其子类实例化,了解其常规API即可(比字符输入流要简易些许)
1、write(int c )方法
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//write(int c ),写入单个字符到文件中;
char a='我'; //单个字符
int i=a; //单个字符对应的int位
System.out.println(i); //打印出来是25105,对应的就是字符‘我’在unicode中的位置
writer.write(i); //输出到文件中、输入的是字符的int位位置,但是输出的是字符‘我’到txt中
writer.close(); //输出流
}
}
2、write(String str)
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//write(String str),写入对应字符串到文件中
String str="包子是个小可爱";
writer.write(str);
writer.close();
}
}
3、writer(char[] buf)
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//writer.write(char[] buf);//读取buf字符数组中的字符写入到文件中
String str="咕噜是个小可爱"; //先建立字符串
char[] buf=str.toCharArray(); //字符串装字符数组
writer.write(buf);
writer.close();
}
}
4、write(char[] buf,int off,int len)
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//writer.write(char[] buf,int off,int len); //从buf数组中的OFF下表开始,读取len个字符到文件中
String str="咕噜是个大胖子"; //先建立字符串
char[] buf=str.toCharArray(); //字符串转字符数组
writer.write(buf,0,buf.length);
writer.close();
}
}
5、write(String str,int off,int len)
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//writer.write(String str,int off,int len); //从字符串的OFF下表开始读取len个字符到文件中,
String str="zhangsan"; //先建立字符串
writer.write(str,0,str.length());
writer.close();
}
}
以上5种方法,第一种很少使用(单字符输出使用场景较少),其余4种按照不同场景对应使用即可、其余对应的输出流API方法基本与此相差不大
字节流提供了针对字节处理的输入输出功能,基本满足了一切需求,但是其不能针对字符进行操作,unicode字符占用2个字节,如果要用字节流处理的话,还需要进行解码操作,不符合java的"一次编写,处处运行的"原则,因此针对于字符类的输入输出java 也提供了直接处理的流类,Reader和writer
二、Reader(字符输入流)
Reader是java的所有字符输入流的顶级父类,本质也是一个抽象类,因此只能由其子类进行实例化,对于此类,了解下常用的APi即可
1)read()方法
package com; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.Reader; public class Test11 { public static void main(String[] args) throws Exception { // Reader reader=new Reader(); //此行代码会报错,抽象类无法实例化 File file =new File("D:"+File.separator+"f.txt");//注意此时的我D盘下是有f.txt的,内容是"zhangsan"-注意,不含中文汉字,否则会出现乱码 Reader reader=new FileReader(file); //子类实例化一个reader对象 //read()方法,单个字符读取,返回的是字符在unicode的值,因此要强制转成字符,放入到字符数组中 char[] i=new char[1024]; //字符数组,用于存储单个读取的字符 int a=0; int b=0; while((a=reader.read())!=-1){ i[b]=(char)a; //读取的a是字符在unicode的位置(int型),因此需要把int转成char型,存储 b++; } reader.close(); //读取完毕后要关闭该流,释放资源 System.out.println(new String(i)); //直接用字符数组构造字符串 } }
2、read(char[] b)方法
package com; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.Reader; public class Test12 { public static void main(String[] args) throws Exception { // Reader reader=new Reader(); //此行代码会报错,抽象类无法实例化 File file =new File("D:"+File.separator+"f.txt");//注意此时的我D盘下是有f.txt的,内容是"zhangsan"-注意,不含中文汉字,否则会出现乱码 Reader reader=new FileReader(file); //子类实例化一个reader对象 //read(char[])方法 一次读取字符到字符数组中 char[] in=new char[1024]; //创建一个字符数组 int i=0; while((i=reader.read(in))!=-1){ //一次读取字符到字符数组中去,最多读取1024个字符,返回实际读取的字符个数i System.out.println(new String(in,0,i)); //利用读取到的字符个数以及字符数组,构造字符串, } reader.close();//关闭输入流,释放资源 } }
3、read(char[] b,int off,int len)方法
package com; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.Reader; public class Test13 { public static void main(String[] args) throws Exception { // Reader reader=new Reader(); //此行代码会报错,抽象类无法实例化 File file =new File("D:"+File.separator+"f.txt");//注意此时的我D盘下是有f.txt的,内容是"zhangsan"-注意,不含中文汉字,否则会出现乱码 Reader reader=new FileReader(file); //子类实例化一个reader对象 //read(char[] b,int off, int len)方法,读取len个字符,从off位置开始存储到字符数组中去,因此不影响off位置之前的字符,以及len+off后面的字符,off+len<b.length,否则会溢出异常 char b[]=new char[1024]; int i=0; while((i=reader.read(b, 0,(int)file.length()))!=-1){ //等于是多次read()方法,单个单个字符的读取到指定位置 System.out.println(new String(b)); } reader.close(); //关闭输入流,释放资源 } }
以上3种read方法,建议使用read(char[] b)方法进行读取较好,第一个read()方法,单个读取,效率较低,第三个方法,要考虑字符溢出问题,所以建议使用第二个方法进行读取(注意仅限读取字母,数字等,读取中文汉字会出现乱码,需使用其他输入流)
三、writer(字符输出流)
writer是java 所有字符输出流的父类,其本质是抽象类,不能实例化,只能由其子类实例化,了解其常规API即可(比字符输入流要简易些许)
1、write(int c )方法
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//write(int c ),写入单个字符到文件中;
char a='我'; //单个字符
int i=a; //单个字符对应的int位
System.out.println(i); //打印出来是25105,对应的就是字符‘我’在unicode中的位置
writer.write(i); //输出到文件中、输入的是字符的int位位置,但是输出的是字符‘我’到txt中
writer.close(); //输出流
}
}
2、write(String str)
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//write(String str),写入对应字符串到文件中
String str="包子是个小可爱";
writer.write(str);
writer.close();
}
}
3、writer(char[] buf)
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//writer.write(char[] buf);//读取buf字符数组中的字符写入到文件中
String str="咕噜是个小可爱"; //先建立字符串
char[] buf=str.toCharArray(); //字符串装字符数组
writer.write(buf);
writer.close();
}
}
4、write(char[] buf,int off,int len)
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//writer.write(char[] buf,int off,int len); //从buf数组中的OFF下表开始,读取len个字符到文件中
String str="咕噜是个大胖子"; //先建立字符串
char[] buf=str.toCharArray(); //字符串转字符数组
writer.write(buf,0,buf.length);
writer.close();
}
}
5、write(String str,int off,int len)
package com;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
public class Test
{
public static void main(String[] args) throws Exception {
File file=new File("E:"+File.separator+"a.txt"); //E盘下是不存在a.txt的,进行写的操作的时候,会自动检索该文件,而后进行创建
Writer writer=new FileWriter(file);
//writer.write(String str,int off,int len); //从字符串的OFF下表开始读取len个字符到文件中,
String str="zhangsan"; //先建立字符串
writer.write(str,0,str.length());
writer.close();
}
}
以上5种方法,第一种很少使用(单字符输出使用场景较少),其余4种按照不同场景对应使用即可、其余对应的输出流API方法基本与此相差不大
相关文章推荐
- 【学习笔记】Java IO流(1)--字符输出流FileWriter
- Java学习之IO流上(字符流: FileReader FileWriter BuffereedReader BufferedWriter 字节流:FileInputStream FileOutputStream BufferedInputStream BufferedOutputS)
- Java学习笔记之IO流中的文件字符流
- (43)Java学习笔记——IO流 / 字符流 / 编码表
- 黑马程序员 java学习笔记 Day5:IO流、字符流、字节流
- 黑马程序员--Java学习日记之IO流(字符流和字节流)
- java基础学习IO流之字符流 十一 -3
- 黑马程序员--Java基础学习之IO流之字节流、字符流、读取写入文件、Copy文件、键盘输入输出、流操作的基本规律
- 黑马程序员--Java基础学习笔记【IO流-字符流】
- java基础学习_IO流02_递归、IO流字节流、IO流字符流(自学)_day20总结
- IO流(字符流)+JAVA学习笔记-DAY21
- java学习日记_95:IO流之字符流
- JAVA中关于IO流中的字符流和字节流的个人总结
- java学习笔记--字符流、对象序列化
- Java IO流学习总结
- Java IO学习笔记(三):字节流与字符流
- Java学习---IO流的操作
- Java IO学习笔记(四):字节-字符转换流
- 【转】关于Java IO流学习总结
- Java IO学习笔记:字符流