Java的 io流( 八 )


这里好像不能一次运行太多流,要写成方法的形式
//由于字符流的基本流只能一个一个的读取数据,不方便,所以用字符流的缓冲流读取写入public static void main(String[] args) throws IOException {//读取BufferedReader br=new BufferedReader(new FileReader("D:\\我的世界\\csb.txt"));String s;ArrayListlist=new ArrayList<>();while ((s=br.readLine())!=null){list.add(s);}//排序Collections.sort(list, new Comparator() {@Overridepublic int compare(String o1, String o2) {String s1 = o1.split("\\.")[0];int i1 = Integer.parseInt(s1);String s2=o2.split("\\.")[0];int i2=Integer.parseInt(s2);return i1-i2;}});//写入br.close();BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\我的世界\\copy.txt"));for (String s1 : list) {bw.write(s1);bw.newLine();}bw.close();}
//将第一种写法的Arraylist改成TreeMap,可以自动根据序号排序public static void main(String[] args) throws IOException {//读取BufferedReader br=new BufferedReader(new FileReader("D:\\我的世界\\csb.txt"));String s;TreeMaplist=new TreeMap<>();while ((s=br.readLine())!=null){String s1 = s.split("\\.")[0];String s2 = s.split("\\.")[1];int i = Integer.parseInt(s1);list.put(i,s2);}//写入br.close();BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\我的世界\\copy.txt"));Set> entries = list.entrySet();for (Map.Entry entry : entries) {String value = http://www.kingceram.com/post/entry.getValue();bw.write(value);bw.newLine();}bw.close();}
//这个练习的关键就是统计次数,//所以统计次数的变量不能定义在程序中,而是定义在本地文件中//读取本地文件获得运行次数public static void main(String[] args) throws IOException {BufferedReader br=new BufferedReader(new FileReader("D:\\我的世界\\count.txt"));String s = br.readLine();int count = Integer.parseInt(s);count++;BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\我的世界\\count.txt"));bw.write(count+"");//注意,这里写字符串的原因是:// 如果直接写入数字,在写入时会变成数字在字符集中对应的字符,所以写入字符串if(count<=3){System.out.println("第"+count+"次使用免费");}else{System.out.println("开始收费喽!");}bw.close();br.close();}
使用IO流的原则:什么时候用就什么时候创建,什么时候不用就什么时候关闭
转换流
属于字符流的一种高级流
转换流是字符流和字节流之间的桥梁
通过转换输入流()把字节流转换成字符流,这样就可以在转换的过程中让字节流有字符流的特性
写出时,再通过转换输出流()把字符流转成字节流,存储到文件中
转换流的应用场景:
作用1:指定字符集读写数据(在jdk11后被淘汰)
作用2:字节流想要使用字符流的方法
练习:
方法名说明
( is)
把字节流转成字符流
( is, )
把字节流包装成字符流,第二个参数可以指定字符流的字符集
( os)
把字符流包装成字节流
( os, )
把字符流包装成字节流,第二个参数可以指定字符流的字符集,这个方法基本不用
public static void main(String[] args) throws IOException {/*需求1*///了解,在jdk11被淘汰//InputStreamReader isr=new InputStreamReader(new FileInputStream("D:\\我的世界\\one.txt"),"GBK");//int b;//while ((b=isr.read())!=-1){//System.out.print((char)b);//}//isr.close();//掌握,FileReader的构造方法参数//FileReader fr=new FileReader("D:\\我的世界\\one.txt", Charset.forName("GBK"));//int b;//while ((b=fr.read())!=-1){//System.out.print((char)b);//}//fr.close();/*需求2*///了解,在jdk11被淘汰//OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("D:\\我的世界\\one.txt"),"GBK");//String s="我好你不好";//osw.write(s);//osw.close();//掌握,FileWriter的构造方法参数//FileWriter fw=new FileWriter("D:\\我的世界\\one.txt",Charset.forName("GBK"));//fw.write("你好你好杨");//fw.close();/*需求3*/FileReader fr=new FileReader("D:\\我的世界\\one.txt", Charset.forName("GBK"));FileWriter fw=new FileWriter("D:\\我的世界\\two.txt");int b;while ((b=fr.read())!=-1){fw.write(b);}fw.close();fr.close();}