标签:打开文件 刷新 bubuko 文字 color static 错误 数字 分享
Java中的流是个抽象的概念,当程序需要从某个数据源读入数据的时候,就会开启一个数据流,数据源可以是文件、内存或网络等等。相反地,需要写出数据到某个数据源目的地的时候,也会开启一个数据流,这个数据源目的地也可以是文件、内存或网络等等
正如字节流中所看到的,有时候当一个中文字符含有两个字节时,字节流它时一次只能操作一个字节,它不能直接操作Unicode字符。因此引入了字符流。
字符流分为输入字符流和输出字符流。它们的基类代表分别时Reader和Writer。
Writer: 把要写入文件的字符序列(实际上是unicode码元序列)转为指定编码方式下的字节序列,然后再写入文件中。
Reader:把要读取的字节序列按照指定编码方式转为相应的字符序列(实际上是unicode码元序列),从而写入内存中。
1. 常见的字符输入流有:
2. 它们的用途与区别
(1)Reader:是字符流的抽象基类,它包含了重要方法有read和close
(2)InputStreamReader:可以把InputStream中的字节数据流根据字符编码方式转换成字符数据流。
(3)FileReader:可以把FileInputStream中的字节数据转换成根据字符编码方式转成字符数字流。
(4)BufferedReader:可以把字符输入流进行封装,将数据进行缓冲,提高读取效率。它含有read(末尾返回-1)和readLine()(末尾返回Null).
3. InputStreamReader的使用
1 package com.test.a; 2 3 import java.io.FileInputStream; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 7 public class Test { 8 public static void main(String args[]) throws IOException { 9 FileInputStream fileInputStream=new FileInputStream("C:\\Users\\hermioner\\Desktop\\test.txt"); 10 InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream); 11 int ch; 12 while((ch=inputStreamReader.read())!=-1) 13 { 14 System.out.println((char)ch); 15 } 16 inputStreamReader.close(); 17 fileInputStream.close(); 18 } 19 } 20 21 我 22 爱 23 我 24 家
note:test.txt中的内容是横着的 我爱我家
note:InputStreamReader需要一个字节输入流对象作为实例化参数。还可以指定第二个参数,第二个参数是字符编码方式,可以是编码方式的字符串形式,也可以是一个字符集对象。
4. FileReader
1 package com.test.a; 2 3 import java.io.FileReader; 4 import java.io.IOException; 5 6 public class Test { 7 public static void main(String args[]) throws IOException { 8 FileReader reader=new FileReader("C:\\Users\\hermioner\\Desktop\\test.txt"); 9 char chars[]=new char[1024]; 10 int len; 11 while((len=reader.read(chars))!=-1) { 12 System.out.println(new String(chars,0,len)); 13 } 14 reader.close(); 15 } 16 } 17 18 我爱我家
note:FileReader 需要一个文件对象作为实例化参数,可以是File类对象,也可以是文件的路径字符串。
5. BufferedReader
1 package com.test.a; 2 3 import java.io.BufferedReader; 4 import java.io.FileReader; 5 import java.io.IOException; 6 7 public class Test { 8 public static void main(String args[]) throws IOException { 9 FileReader fileReader=new FileReader("C:\\Users\\hermioner\\Desktop\\test.txt"); 10 BufferedReader bufferedReader=new BufferedReader(fileReader); 11 String line; 12 while((line=bufferedReader.readLine())!=null) { 13 System.out.println(line); 14 } 15 bufferedReader.close(); 16 fileReader.close(); 17 } 18 } 19 20 21 我爱我家
note: BufferReader需要一个字符输入流对象作为实例化参数。
1. 常见的字符输出流有:
它们的区别和用途:
(1)Writer:是字符输出流的抽象基类,它包含的重要方法有wirte、close、flush(刷新输出流,把数据马上写到输出流中)
(2)OutputStreamWriter:可以使我们直接往流中写字符串数据,它里面会帮我们根据字符编码方式来把字符数据转成字节数据再写给输出流,它相当于一个中介\桥梁。
(3)FileWriter:与OutputStreamWriter功能类似,我们可以直接往流中写字符串数据,FileWriter内部会根据字符编码方式来把字符数据转成字节数据再写给输出流。
(4)BufferedWriter:比FileWriter还高级一点,它利用了缓冲区来提高写的效率。它还多出了一个函数:
2. OutputStreamWriter使用
1 public class Test { 2 public static void main(String args[]) throws IOException { 3 OutputStream outputStream=new FileOutputStream("C:\\Users\\hermioner\\Desktop\\test.txt"); 4 OutputStreamWriter outputStreamWriter=new OutputStreamWriter(outputStream); 5 outputStreamWriter.write("hello world,你好"); 6 outputStreamWriter.close(); 7 } 8 } 9 10 11 就可以在test中写入数据。
说明:OutputStreamWriter是需要传入一个流对象作为实例化参数的
3. FileWriter使用
1 public class Test { 2 public static void main(String args[]) throws IOException { 3 FileWriter fileWriter=new FileWriter("C:\\Users\\hermioner\\Desktop\\test.txt"); 4 fileWriter.write("加油"); 5 fileWriter.close(); 6 } 7 } 8 9 文件中就写入了字符串内容
说明:FileWriter需要一个文件对象来实例化,可以是File类对象,也可以是文件的路径字符串。
4. BufferedWriter使用
1 public class Test { 2 public static void main(String args[]) throws IOException{ 3 FileWriter fileWriter=new FileWriter("C:\\Users\\hermioner\\Desktop\\test.txt"); 4 BufferedWriter bufferedWriter=new BufferedWriter(fileWriter); 5 bufferedWriter.write("加油"); 6 bufferedWriter.close(); 7 fileWriter.close(); 8 } 9 }
1. OutputStreamWriter、InputStreamReader就是输入、输出提起中提供的两个转换流,用于将字节流转换为字符流。-------只能从字节流转换到字符流。
2.为什么不能从字符流转换到字节流?
首先想一字节流和字符流的区别:字节流比字符流的使用范围更广,但字符流比字节流操作方便。如果一个流已经是字符流,也就意味着这是一个使用起来更方便的流,为什么还要转换成字节流呢?反之,如果现在有一个字节流,但可以确定这个字节流的内容都是文本内容,我们就可以将它转换成字符流处理起来会更方便一点。所以,java只提供了字节流到字符流的转换,没有提供字符流到字节流的转换。
3. 计算机中的文件常被分成文本文件和二进制文件两大类:
参考文献:
https://www.cnblogs.com/progor/p/9357676.html
https://www.cnblogs.com/dongguacai/p/5676254.html
标签:打开文件 刷新 bubuko 文字 color static 错误 数字 分享
原文地址:https://www.cnblogs.com/Hermioner/p/9773188.html