一.字符流

1.字符流出现的原因

字符流出现的原因:由于字节流操作中文不是特别方便,常常需要根据编码方式选择每次读取的字节数,所以,java就提供了字符流。字符流:字节流 + 编码方式。字符流只能操作文本文件。


2.String类中的编码和解码问题

编码: 就是把字符串转换成字节数组- 把一个字符串转换成一个字节数组
- public byte[] getBytes();使用平台的默认字符集将此 String编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
- public byte[] getBytes(String charsetName) 使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。 - 解码: 把字节数组转换成字符串
- public String(byte[] bytes):  通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
- public String(byte[] bytes, String charsetName) 通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。使用什么字符集进行编码,那么就是使用什么字符集进行解码:老地方  ----- 十进制   ---- 二进制  ---- 发出去接收 ---- 二进制  ---- 十进制  --- 老地方编码:把看得懂的变成看不懂的:   String -- byte[]
解码:把看不懂的变成看得懂的: byte[] -- String

案例:String类中的编码和解码问题

package org.westos.demo3;import java.util.Arrays;public class MyTest {public static void main(String[] args) {//String类中的编码和解码问题/*编码:把看得懂的变成看不懂的:    String -- byte[]解码:把看不懂的变成看得懂的: byte[] -- String*/String s="本伟卢氏";//编码:把String转化为字节数组类型,把看得懂的转换为看不懂的byte[] bytes = s.getBytes();System.out.println(Arrays.toString(bytes));//解码:将byte类型转换为String类型,把看不懂的转换为看到懂的String s1 = new String(bytes);System.out.println(s1);}
}
-----------------------------------------------
package org.westos.demo3;import sun.nio.cs.ext.GBK;import java.io.UnsupportedEncodingException;
import java.util.Arrays;public class MyTest2 {public static void main(String[] args) throws UnsupportedEncodingException {//中文乱码问题:编解码方式不一致String s="中文乱码问题";//采用UTF-8方式进行编码byte[] bytes = s.getBytes("UTF-8");System.out.println(Arrays.toString(bytes));//使用GBK方式进行解码String s1 = new String(bytes,"GBK");System.out.println(s1);//乱码出现的原因:就是编解码用的不是同一张码表}
}

3.OutputStreamWriter 字符输出流

OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 码表 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。OutputStreamWriter(OutputStream out)输出流所关联的文件,如果不存在会自动创建OutputStreamWriter(OutputStream out, String charsetName)可以指定码表来关联文件
package org.westos.demo3;import java.io.*;public class MyTest3 {public static void main(String[] args) throws FileNotFoundException, UnsupportedEncodingException {// OutputStreamWriter/* OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 码表 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。*//* OutputStreamWriter(OutputStream out)输出流所关联的文件,如果不存在会自动创建OutputStreamWriter(OutputStream out, String charsetName)可以指定码表关联文件*///输出流所关联的文件,如果不存在会自动创建OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("aAA.txt"));//可以指定码表OutputStreamWriter out2 = new OutputStreamWriter(new FileOutputStream("bBB.txt"),"GBK");}
}
字符流的5种写数据的方式:
A: 方法概述public void write(int c) 写一个字符public void write(char[] cbuf) 写一个字符数组public void write(char[] cbuf,int off,int len) 写一个字符数组的 一部分public void write(String str) 写一个字符串public void write(String str,int off,int len) 写一个字符串的一部分
package org.westos.demo3;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;public class Mytest4 {public static void main(String[] args) throws IOException {//关联文件,如果不存在,会帮你创建OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("aaa111.txt"));//往文件中写入数据//一次写入一个字符write(int c) 写一个字符out.write('a');out.flush();// write(char[] cbuf) 写一个字符数组out.write("我爱Java".toCharArray());out.flush();//write(String str) 写一个字符串out.write("aaaa");out.flush();// write(char[] cbuf,int off,int len) 写一个字符数组的 一部分out.write(new char[]{'a','b','c'},0,3);out.flush();//write(String str,int off,int len) 写一个字符串的一部分out.write(new String("好好学习"),0,3);out.flush();out.write("\r\n");//写入换行符out.write("\r\n");//一次写入一个字符串out.write("劝君更进一杯酒");out.write("\r\n");out.flush();//字符流,必须刷新才能将数据写入到文件中out.close();}
}

(1)字符输出流的异常处理

package org.westos.demo3;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;public class Mytest5 {public static void main(String[] args) {OutputStreamWriter out=null;try {out = new OutputStreamWriter(new FileOutputStream("f.txt"));out.write("我爱Java");out.write("\r\n");out.write('a');out.write("\r\n");out.write(97);out.write("\r\n");out.write("朝辞白帝彩云间",0,3);out.flush();} catch (IOException e) {e.printStackTrace();} finally {try {if (out!=null) {out.close();}out.close();} catch (IOException e) {e.printStackTrace();}}}
}

4.InputStreamReader字符输入流

InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 码表 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集InputStreamReader(InputStream in)输入流所关联的文件,如果不存在,就报错
InputStreamReader(InputStream in, String charsetName)指定码表关联文件A:InputStreamReader的构造方法InputStreamReader(InputStream is):用默认的编码(GBK)读取数据InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据字符流的2种读数据的方式:
A:  方法概述public int read() 一次读取一个字符,如果没有读到 返回-1public int read(char[] cbuf) 一次读取一个字符数组 如果没有读到 返回-1
package org.westos.demo5;import java.io.*;public class MyTest {public static void main(String[] args) throws IOException {/*InputStreamReader 是字节流通向字符流的桥梁:它使用指定的 码表 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集*//*构造方法:InputStreamReader(InputStream in)输入流所关联的文件,如果不存在,就报错InputStreamReader(InputStream in, String charsetName)指定码表来关联文件*///报错,系统找不到指定的文件//InputStreamReader in = new InputStreamReader(new FileInputStream("wufu.txt"));InputStreamReader in = new InputStreamReader(new FileInputStream("e.txt"),"UTF-8");//一次读取一个字符int read = in.read();System.out.println(read);read = in.read();System.out.println(read);read = in.read();System.out.println(read);read = in.read();System.out.println(read);//如果读取不到,就返回-1 我们就可以使用 -1 来判断这个文件是否读取完毕read = in.read();System.out.println(read);in.close();}
}
------------------------------------------------package org.westos.demo5;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;public class MyTest2 {public static void main(String[] args) throws IOException {InputStreamReader in = new InputStreamReader(new FileInputStream("eee.txt"));//一次读取一个字符数组// public int read(char[] cbuf) 一次读取一个字符数组 如果没有读到 返回-1//定义一个字符数组,来充当容器,可以一次取到这个容器中char[] chars = new char[1024 * 8];//一次读取1024*8个字符,放到字符数组中。返回值是实际读取到的字符个数int len = in.read(chars);System.out.println(len);System.out.println(Arrays.toString(chars));//把字符数组转换成字符串String s = String.valueOf(chars);System.out.println(s);//把字符数组转换成字符串String s1 = new String(chars);System.out.println(s1);in.close();}
}
--------------------------------
package org.westos.demo5;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;public class Mytest3 {public static void main(String[] args) throws IOException {InputStreamReader in = new InputStreamReader(new FileInputStream("eee.txt"));//定义一个字符数组充当容器char[] chars = new char[1000];//一次读取字符数组的一部分,从0索引处开始,读取的长度为4int len = in.read(chars, 0, 4);System.out.println(len);System.out.println(Arrays.toString(chars));in.close();}
}

(1)字符输入流的异常处理

package org.westos.demo6;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;public class MyTest {public static void main(String[] args) {//流的异常处理InputStreamReader in = null;try {in = new InputStreamReader(new FileInputStream("eee.txt"));//定义一个字符数组充当容器char[] chars = new char[1000];int len = 0;len = in.read(chars, 0, len);System.out.println(len);System.out.println(Arrays.toString(chars));} catch (IOException e) {e.printStackTrace();} finally {try {if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}}}}

5.使用字符流来复制文件

package org.westos.demo6;import java.io.*;public class MyTest {public static void main(String[] args) throws IOException {//使用字符流来复制文件/*InputStreamReader的构造方法InputStreamReader(InputStream is):用默认的编码(GBK)读取数据InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据*/InputStreamReader in = new InputStreamReader(new FileInputStream("MyTest2.java"));OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("Mytest4.java"));//读一个字符,写一个字符int ch=0;//用来记录每次读取到的字符while ((ch=in.read())!=-1){out.write(ch);out.flush();}in.close();out.close();}
}
-------------------------package org.westos.demo6;import java.io.*;public class MyTest2 {public static void main(String[] args) throws IOException {//使用字符流来复制文件/*InputStreamReader的构造方法InputStreamReader(InputStream is):用默认的编码(GBK)读取数据InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据*/InputStreamReader in = new InputStreamReader(new FileInputStream("MyTest2.java"));OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("Mytest5.java"));//一次读写一个字符数组来复制int len=0;//用来记录实际读取到的字符个数char[] chars = new char[1024*8];//定义一个字符数组,充当缓冲区while ((len=in.read(chars))!=-1){out.write(chars,0,len);out.flush();}in.close();out.close();}
}

6.流的异常处理

package org.westos.demo7;import java.io.*;public class MyTest {public static void main(String[] args) {//流的异常处理/*InputStreamReader的构造方法InputStreamReader(InputStream is):用默认的编码(GBK)读取数据InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据*/InputStreamReader in = null;OutputStreamWriter out = null;try {in = new InputStreamReader(new FileInputStream("MyTest2.java"));out = new OutputStreamWriter(new FileOutputStream("Mytest5.java"));//一次读写一个字符数组来复制int len=0;//用来记录实际读取到的字符个数char[] chars = new char[1024*8];//定义一个字符数组,充当缓冲区while ((len=in.read(chars))!=-1){out.write(chars,0,len);out.flush();}} catch (IOException e) {e.printStackTrace();} finally {if (in!=null){try {in.close();} catch (IOException e) {e.printStackTrace();}}if (out!=null){try {out.close();} catch (IOException e) {e.printStackTrace();}}}}
}

7.复制GBK编码的文件

package org.westos.demo7;import java.io.*;public class MyTest2 {public static void main(String[] args) throws IOException {//复制GBK编码的文件//InputStreamReader(InputStream is,String charsetName):用指定的编码读取数据InputStreamReader in = new InputStreamReader(new FileInputStream("MyTest2.java"),"GBK");OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("MyTest6.java"));int len=0;char[] chars = new char[1024*8];while ((len=in.read(chars))!=-1){out.write(chars,0,len);out.flush();}in.close();out.close();}
}

二.便捷字符流

1.便捷字符流的概述

A:
FileReader和FileWriter的出现转换流的名字比较长,而我们常见的操作都是按照本地默认编码实现的,所以,为了简化我们的书写,转换流提供了对应的子类。   FileWriterFileReader
B:
字符流便捷类: 因为转换流的名字太长了,并且在一般情况下我们不需要制定字符集,于是java就给我们提供转换流对应的便捷类转换流 父类              便捷类 子类- OutputStreamWriter  ------- FileWriter- InputStreamReader   -------     FileReader便捷字符流,唯一就是不能指定编码 他自己也没有特有的方法,用的是继承下来的方法。

2.构造方法

     FileReader(String fileName)在给定从中读取数据的文件名的情况下创建一个新 FileReader。FileReader(File file)在给定从中读取数据的 File 的情况下创建一个新 FileReader。FileWriter(File file)根据给定的 File 对象构造一个 FileWriter 对象。FileWriter(String fileName)根据给定的文件名构造一个 FileWriter 对象。FileWriter(String fileName, boolean append)根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
package org.westos.demo7;import java.io.*;public class MyTest3 {public static void main(String[] args) throws IOException {//便捷字符流/*父类                  子类OutputStreamWriter   FileWriterInputStreamReader   FileReader*//* FileReader(String fileName)在给定从中读取数据的文件名的情况下创建一个新 FileReader。FileReader(File file)在给定从中读取数据的 File 的情况下创建一个新 FileReader。*//* FileWriter(File file)根据给定的 File 对象构造一个 FileWriter 对象。FileWriter(String fileName)根据给定的文件名构造一个 FileWriter 对象。FileWriter(String fileName, boolean append)根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。*///FileReader reader = new FileReader("MyTest2.java");FileReader reader = new FileReader(new File("MyTest2.java"));FileWriter writer = new FileWriter("MyTest7.java");char[] chars = new char[1024*8];//定义一个字符数组充当缓冲区int len=0;//记录每次读取的有效字符个数int count=1;while ((len=reader.read(chars))!=-1){System.out.println("循环次数" + (count++));writer.write(chars,0,len);writer.flush();}reader.close();writer.close();}
}

三.高效字符流

1.高效字符流的概述

public class BufferedWriter extends Writer {}
public class BufferedReader extends Reader {}构造方法:BufferedReader(Reader in)创建一个使用默认大小输入缓冲区的缓冲字符输入流。BufferedWriter(Writer out)创建一个使用默认大小输出缓冲区的缓冲字符输出流。
package org.westos.demo8;import java.io.*;public class MyTest {public static void main(String[] args) throws IOException {//高效字符流/*构造方法:BufferedReader(Reader in)创建一个使用默认大小输入缓冲区的缓冲字符输入流。BufferedWriter(Writer out)创建一个使用默认大小输出缓冲区的缓冲字符输出流。*/BufferedReader reader = new BufferedReader(new FileReader("MyTest2.java"));BufferedWriter writer = new BufferedWriter(new FileWriter("MyTest8.java"));char[] chars = new char[1024*8];int len=0;while ((len=reader.read(chars))!=-1){writer.write(chars,0,len);writer.flush();}reader.close();writer.close();}
}

2.高效字符流的特殊功能

A:字符缓冲流的特殊功能BufferedWriter:  public void newLine():根据系统来决定换行符 具有系统兼容性的换行符BufferedReader: public String readLine():一次读取一行数据  是以换行符为标记的 读到换行符就换行 没读到数据返回null包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
package org.westos.demo8;import java.io.*;public class MyTest2 {public static void main(String[] args) throws IOException {//高效的字符流//BufferedReader 里面有特有的方法 String readLine() 一次读一行文本//BufferedWriter void newLine() 写入一个换行符,具有平台兼容性。//读一行,写一行BufferedReader reader = new BufferedReader(new FileReader("MyTest2.java"));BufferedWriter writer = new BufferedWriter(new FileWriter("MyTest9.java"));String line=null;//定义一个变量,来记录每次读取到的一行文本while ((line=reader.readLine())!=null){writer.write(line);writer.write("\r\n");writer.newLine();writer.flush();}writer.close();}
}

四.练习

1.案例一:

A:案例演示: 需求:把ArrayList集合中的字符串数据存储到文本文件
package org.westos.demo3;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;public class MyTest {public static void main(String[] args) throws IOException {//A:案例演示: 需求:把ArrayList集合中的字符串数据存储到文本文件ArrayList<String> list = new ArrayList<>();list.add("李白");list.add("杜甫");list.add("王维");list.add("关羽");list.add("马超");System.out.println(list);System.out.println("==================");//遍历集合往文本文件中写入BufferedWriter writer = new BufferedWriter(new FileWriter("c.txt"));for (String s : list) {writer.write(s);writer.newLine();writer.flush();}writer.close();}
}

2.案例二

A:案例演示:  需求:从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合
package org.westos.demo3;import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;public class MyTest2 {public static void main(String[] args) throws IOException {//A:案例演示:   需求:从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合BufferedReader reader = new BufferedReader(new FileReader("c.txt"));String line=null;//用来记录每一行的字符串数据ArrayList<String> list = new ArrayList<>();while ((line=reader.readLine())!=null){list.add(line);}reader.close();System.out.println(list);}
}

3.案例三

   案例演示:需求:我有一个文本文件,每一行是一个学生的名字,请写一个程序,每次允许随机获取一个学生名称
package org.westos.demo4;import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Random;public class MyTest {public static void main(String[] args) throws IOException {/*案例演示:需求:我有一个文本文件,每一行是一个学生的名字,请写一个程序,每次允许随机获取一个学生名称*/BufferedReader reader = new BufferedReader(new FileReader("c.txt"));String line=null;//记录每一行读取的数据ArrayList<String> list = new ArrayList<>();while ((line=reader.readLine())!=null){list.add(line);}reader.close();//如何随机获取学生姓名Random random = new Random();int index = random.nextInt(list.size());String s = list.get(index);System.out.println(s);}
}

4.案例四

复制多级文件夹
package org.westos.demo2;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;public class MyTest2 {public static void main(String[] args) throws IOException {/*  A:案例演示:需求:复制D:\\course这文件夹到E:\\course- 分析:-a:封装D:\\course为一个File对象- b:封装E:\\course为一个File对象, 然后判断是否存在, 如果不存在就是创建一个目录- c:获取a中的File对应的路径下所有的文件对应的File数组- d:遍历数组, 获取每一个元素, 进行复制- e:释放资源*///复制多级文件夹//1.封装源文件夹File srcFolder = new File("C:\\Users\\user\\Desktop\\demo");//2.封装目标文件夹File targetFolder = new File("D:\\"+srcFolder.getName());//如果不存在,创建该文件夹if (!targetFolder.exists()){targetFolder.mkdir();}//进行复制copyFolder(srcFolder,targetFolder);}//复制文件夹的方法private static void copyFolder(File srcFolder, File targetFolder) throws IOException {//对源文件夹进行遍历,取出每一个文件,放到目标文件夹File[] files = srcFolder.listFiles();for (File f : files) {if (f.isFile()){//是文件直接复制copyFiles(f,targetFolder);} else {//是子文件夹不能复制,需要创建//f就是源子文件夹//封装目标子文件夹,名字与源子文件夹保持一致File mbFolder = new File(targetFolder,f.getName());if (!mbFolder.exists()){mbFolder.mkdirs();}//递归copyFolder(f,mbFolder);}}}//用来复制文件,f代表源文件夹里面的文件private static void copyFiles(File f, File targetFolder) throws IOException {FileInputStream in = new FileInputStream(f);//封装目标文件,参数1是目标文件的父路径,参数2是目标文件的名字File mbFile = new File(targetFolder, f.getName());FileOutputStream out = new FileOutputStream(mbFile);byte[] bytes = new byte[1024*8];int len=0;while ((len=in.read(bytes))!=-1){out.write(bytes,0,len);out.flush();}in.close();out.close();}
}

5.案例五

复制指定目录下指定后缀名的文件并改名需求: 复制D:\\demo目录下所有以.java结尾的文件到E:\\demo .并且将其后缀名更改文.jad
package org.westos.demo5;import java.io.*;
import java.lang.reflect.Field;public class MyTest {public static void main(String[] args)throws IOException {//复制指定目录下指定后缀名的文件并改名//需求: 复制D:\\demo目录下所有以.java结尾的文件到E:\\demo .并且将其后缀名更改文.jadFile srcFolder = new File("C:\\Users\\user\\Desktop\\demo");File targetFolder= new File("C:\\Users\\user\\Desktop\\demo2");if (!targetFolder.exists()){targetFolder.mkdirs();}File[] files = srcFolder.listFiles(new FileFilter() {@Overridepublic boolean accept(File f) {return f.isFile()&&f.getName().endsWith(".txt");}});for (File file : files) {String name = file.getName();name=name.replace(".txt",".doc");File file1 = new File(targetFolder, name);copyFile(file,file1);}}//复制文件private static void copyFile(File file1,File file2)throws IOException {FileInputStream in = new FileInputStream(file1);FileOutputStream out = new FileOutputStream(file2);int len=0;byte[] bytes = new byte[1024*8];while ((len=in.read(bytes))!=-1){out.write(bytes,0,len);out.flush();}in.close();out.close();}
}

案例六

 A:案例演示:需求:键盘录入3个学生信息(姓名,语文成绩(chineseScore), 数学成绩(mathScore), 英语成绩(englishScore)),按照总分从高到低存入文本文件
package org.westos.demo2;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Comparator;
import java.util.Date;
import java.util.Scanner;
import java.util.TreeSet;public class MyTest3 {public static void main(String[] args) throws IOException {/*  A:案例演示:需求:键盘录入3个学生信息(姓名, 语文成绩(chineseScore), 数学成绩(mathScore), 英语成绩(englishScore)),按照总分从高到低存入文本文件*///有序存储,使用treeSetTreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {int num=s1.getTotalScore()-s2.getTotalScore();int num2=num==0?s1.getName().compareTo(s2.getName()):num;return -num2;}});for (int i = 1; i <= 3; i++) {Scanner sc = new Scanner(System.in);System.out.println("请输入第"+i+"个学生的姓名");String name = sc.nextLine();System.out.println("请输入第"+i+"个学生的语文成绩");int chineseScore = sc.nextInt();System.out.println("请输入第"+i+"个学生的数学成绩");int mathScore = sc.nextInt();System.out.println("请输入第"+i+"个学生的英语成绩");int englishScore = sc.nextInt();int num=chineseScore+mathScore+englishScore;Student student = new Student(name, chineseScore, mathScore, englishScore);set.add(student);}//对学生集合进行遍历,放到文本文件中/*?* 2.如何追加写入?在传进来的FileWriter里设置true* 3.增加一个需求:每一次录入成绩,都保存在一个新的文件中?*   用时间来命名这个文件名* */long l = System.currentTimeMillis();Date date = new Date(l);SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");String format = simpleDateFormat.format(date);BufferedWriter writer = new BufferedWriter(new FileWriter(format,true));writer.write("序号\t姓名\t语文\t数学\t英语\t总分");writer.newLine();writer.flush();int i=1;//遍历set集合for (Student student : set) {writer.write((i++)+"\t"+student.getName()+"\t"+student.getChineseScore()+"\t"+student.getMathScore()+"\t"+student.getChineseScore()+"\t"+student.getTotalScore());writer.newLine();writer.flush();}writer.close();}
}

IO流之字符流+便捷字符流+高效字符流相关推荐

  1. JavaSE——IO(上)(File、字节流、字符流、转换流、打印流、缓存流)

    第3节 IO(上) 一.File类与文件基本操作 在程序中经常需要用到文件的操作,Java有专门的类来进行文件的操作--File类. 1.1 File类概述 它是对文件和目录路径名的抽象表示. 即它本 ...

  2. 字节流转化为文件流_JAVA IO分析一:File类、字节流、字符流、字节字符转换流...

    因为工作事宜,又有一段时间没有写博客了,趁着今天不是很忙开始IO之路:IO往往是我们忽略但是却又非常重要的部分,在这个讲究人机交互体验的年代,IO问题渐渐成了核心问题. 一.File类 在讲解File ...

  3. 20170118:File类与IO流,File类,IO流的基本原理,IO流的分类,文件字节流与文件字符流

    一.File类 1.java.io.File类代表系统文件(文件和目录) 访问文件属性步骤 1). 创建文件对象:File file = new File(String pathname); 2). ...

  4. JAVA笔记11__File类/File类作业/字节输出流、输入流/字符输出流、输入流/文件复制/转换流...

    /*** File类:文件的创建.删除.重命名.得到路径.创建时间等,是唯一与文件本身有关的操作类*/ public class Main {public static void main(Strin ...

  5. 【Java I/O流】File、字符集、字节流、字符流、缓冲流、数据流、对象流、序列化、try-with-resources语句

    I/O流 File File 常用方法 File 练习:搜索.删除.剪切 字符集(Character Set) 字符编码(Character Encoding) 字符编码比较 乱码 try-with- ...

  6. 系统学习JAVA第十七天(字节流、字符流、缓冲的字节流、缓冲的字符流、将字节流转换为缓冲的字符流、面向对象——>字节流转成对象)

    系统学习JAVA第十七天 第一阶段在2021.2.1结束了! 一.数据传输 IO输入和输出,硬盘之间的数据交换 1.文件读写流程 ①创建文件的容器 ②判断方向 合适的类 创建和文件之间的通道 ③ 调用 ...

  7. 标准输入流和输出流分别是啥,高效字符流的方法

    标准输入流的书System.in,默认是指向键盘的,可以接受用户键盘录入的数据 标准输出流是System.out,默认指向控制台,可以将结果打印到控制台. 高效字符流: readLine() 读取一行 ...

  8. java字符的输入流_Java:字节流和字符流(输入流和输出流)

    InputStream是抽象基类,所以它不可以创建对象,但它可以用来"接口化编程",因为大部分子类的函数基类都有定义,所以利用基类来调用函数. FileInputStream是用来 ...

  9. java字符流的父类_Java基于代码实战的字符流父类、字符转换流、缓冲字符流、过滤流...

    1. Java输入输出(I/O)流的知识回顾: 补充:因为这篇文章是基于上一篇的延续,因此将上一篇进行简单的回顾,以便理解本节内容. 1)输入输出(I/O)流分类:共分为字节型输入输出流和字符型输入输 ...

最新文章

  1. 人工智能到底是啥_人工智能的本质究竟是什么?
  2. the more wites of color
  3. 【Kafka】Kafka-分区数-备份数-如何设置-怎么确定-怎么修改
  4. 被捧上天的深度学习,遇到这些问题根本干不过简单模型
  5. FileUpload路径
  6. mysql触发器预约实例_Mysql触发器实例分析
  7. 推荐一个好组件Javascript文本比较工具
  8. 在Edge浏览器中设置编码方式
  9. DDD中的“领域模型”
  10. selenium爬取新浪滚动新闻
  11. 1000: 从今天开始入坑C语言
  12. 虽焦虑迷惘,仍选择自由职业,只因……
  13. 无惧黑暗强光,纯视觉导航也能全天候作业
  14. feature map
  15. C++ Primer Plus(第6版)读书笔记--c++自定义函数
  16. 多功能音乐沙漏的设计与实现
  17. 解决Android11版本无法获取安装应用APP版本号的问题
  18. 【论文】龙王山小青椒 - 论文写作指导
  19. 辉芒微(FMD)单片机开发环境搭建
  20. 10G网络硬盘免费领 唯一款不用翻墙就能用的良心网络硬盘

热门文章

  1. Raspberry Pi Pico代替鼠标和键盘操作
  2. 2018年总结与2019年目标与计划
  3. 巧用Wireshark有效管理内网
  4. 若百度把贴吧分拆,估值远超微博+陌陌?
  5. SQL Server 2017中的Python:增强的数据库内机器学习
  6. QQ集体被盗号,猝不及防的大型社死名场面
  7. java中的约瑟夫问题_java算法实现之约瑟夫问题(Josephu)
  8. 狼性百度凶狠反扑 神马有如此威胁?
  9. 如何从 iPhone 远程访问电脑
  10. QT UTC(T和Z格式)时间转换为北京时间