一、前言
前面我们讲解了如何使用字节流输入以及输出流,还有如何复制文件的操作,
今天我们讲解一下如何使用字符流。
字符流的一些基本知识点:
package file.charStream;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
public class StringDemo {
public static void main(String[] args) throws UnsupportedEncodingException {
//定义一个字符串
String s = "中国";
byte[] bys = s.getBytes();//[-28, -72, -83, -27, -101, -67]
byte[] bys1 = s.getBytes("GBK");//[-42, -48, -71, -6]
String ss = new String(bys,"UTF-8");
System.out.println(ss);
}
}
字符输出流
package file.charStream;
import java.io.*;
public class OutputStreamWriteDemo {
public static void main(String[] args) throws IOException {
if(!new File("myCharStream").exists()){
new File("myCharStream").mkdirs();
// new File("myCharStream\\a.txt").createNewFile();
}
FileWriter fw = new FileWriter("myCharStream//a.txt");
fw.write(97);
fw.write(98);
fw.write(99);
//void write(char[] cbuf): 写入一个字符数组
char[] chs = {'a','b','c','d','e'};
fw.write(chs);
//void write(char[] cbuf, int off, int len): 写入字符数组的一部分
fw.write(chs,0,chs.length);
fw.write(chs,1,3);
//void write(String str):写一个字符串
fw.write("abcde");
//void write(String str, int off, int len): 写一个字符串的一部分
fw.write("abcde",0,"abcde".length());
fw.write("abcde",1,3);
//释放资源
fw.close();
// //读取文件中有几个字符?
// FileInputStream bis = new FileInputStream("myCharStream\\a.txt");
// byte[] bys = new byte[1024];
// int len;
// while((len = bis.read(bys))!= -1){
// System.out.println(new String(bys,0,len).length());
// }
}
}
字符输入流
package file.charStream;
import java.io.FileReader;
import java.io.IOException;
public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("myCharStream\\a.txt");
//第一种方法: in read(): 一次读一个字符数据
int ch;
while ((ch=fr.read()) != -1) {
System.out.print((char)ch);
}
//第二种方法: int read(char[] cbuf): 一次读取一个字符数组数据
char[] chs = new char[1024];
int len;
while((len = fr.read(chs))!=-1){
System.out.println(new String(chs,0,len));
}
//释放资源
fr.close();
}
}
字符缓冲输入流和字符缓冲输出流
案例一:
package file.charStream;
import java.io.*;
public class BufferedStreamDemo01 {
public static void main(String[] args) throws IOException {
//BufferedWriter(Writer out)
BufferedWriter bw = new BufferedWriter(new
FileWriter("myCharStream\\bw.txt"));
bw.write("hello\r\n");
bw.write("world\r\n");
bw.close();
//BufferedReader(Reader in)
BufferedReader br = new BufferedReader(new
FileReader("myCharStream\\bw.txt"));
//一次读取一个字符数据
int ch;
while((ch = br.read())!= -1){
System.out.println((char)ch);
}
//一次读取一个字符数组数据
char[] chs = new char[1024];
int len;
while((len = br.read(chs))!=-1){
System.out.println(new String(chs,0,len));
}
br.close();
}
}
案例二:
package file.charStream;
import java.io.*;
public class BufferedStreamDemo02 {
public static void main(String[] args) throws IOException {
//创建字符缓冲输出流
BufferedWriter bw = new BufferedWriter(new
FileWriter("myCharStream\\bw.txt"));
for(int i = 0; i < 10; i++){
bw.write("hello" + i);
bw.newLine();//这是什么意思
bw.flush();
}
//释放资源
bw.close();
//创建字符缓冲输入流
BufferedReader br = new BufferedReader(new
FileReader("myCharStream\\bw.txt"));
String line;
while((line = br.readLine())!= null){
System.out.println(line );
}
bw.close();
}
}
应用:
package file.charStream;
import java.io.*;
import java.util.Arrays;
/*
案例需求
使用字符缓冲流读取文件中的数据,排序后再次写到本地文件
实现步骤
将文件中的数据读取到程序中
对读取到的数据进行处理
将处理后的数据添加到集合中
对集合中的数据进行排序
将排序后的集合中的数据写入到文件中
*/
public class CharStreamDemo2 {
public static void main(String[] args) throws IOException {
//需求:读取文件中的数据,排序后再次写到本地文件
//分析:
//1、要把文件中的数据读取进来
BufferedReader br = new BufferedReader(new FileReader("myCharStream\\sort.txt"));
//输出流一定不能写在这里,因为会清空文件中的内容
//BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\sort.txt"));
String line = br.readLine();
System.out.println("读取到的数据为:" + line);
br.close();
//2、按照空格进行切割
String[] split = line.split(" ");//9 1 2 5 3 10 4 6 7 8
//3、字符串类型的数组变成int类型
int[] arr = new int[split.length];
//遍历split数组,可以进行类型转换
for(int i = 0; i < split.length; i++){
String smallStr = split[i];
//类型转换
int number = Integer.parseInt(smallStr);
//把转换后的结果存入到arr中
arr[i] = number;
}
//4、排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//把排序之后的结果写回到本地
BufferedWriter bw = new BufferedWriter(new FileWriter("myCharStream\\sort.txt"));
//写出
for(int i = 0; i < arr.length; i++){
bw.write(arr[i] + " ");
bw.flush();
}
//释放资源
bw.close();
}
}
本文来自博客园,作者:news_one,转载请注明原文链接:https://www.cnblogs.com/new-one/p/17824662.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/199428.html