Java笔记第六弹

字符缓冲流

//构造方法
BufferedWriter(Writer out);
BufferedReader(Reader in);
相关应用:
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedWriter bw=new BufferedWriter(new FileWriter("myCharStream\\bw.txt"));
    
        bw.write("hello\r\n");
        bw.write("world\r\n");
        
        bw.close();
    }
}

import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("myCharStream\\bw.txt"));

        int ch;
        while((ch=br.read())!=-1){
            System.out.println(ch);
        }

        char[] cc=new char[1024];
        int len;
        while((len=br.read(cc))!=-1){
            System.out.println(new String(cc,0,len));
        }
        br.close();
    }
}
案例:复制Java文件(字符缓冲流改进版)
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("myCharStream\\ConversionStreamDemo.java"));
        BufferedWriter bw=new BufferedWriter(new FileWriter("myCharStream\\Cpoy.java"));
        
        char[] by=new char[1024];
        int len;
        while((len=br.read(by))!=-1){
            bw.write(new String(by,0,len));
        }
        
        bw.close();
        br.close();
    }
}
字符缓冲流的特有功能
BufferedWriter:void newLine();//写一行行分隔符,由系统属性定义
BufferedReader:public String readLine();//读一行文字,不包括终止字符,到达末尾,为null
相关应用:
//BufferedWriter
import java.io.*;

public class Main{
    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
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("myCharStream\\bw.txt"));

        String line;
        while((line=br.readLine())!=null){//只读内容,不读换行符号
            System.out.println(line);
        }
        
        br.close();
    }
}
案例:复制Java文件(字符缓冲流特有功能改进版)
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("myCharStream\\ConversionStreamDemo.java"));
        BufferedWriter bw=new BufferedWriter(new FileWriter("myCharStream\\Copy.java"));
    
        String line;
        while((line=br.readLine())!=null){
            bw.write(line);
            bw.newLine();
        }
        
        bw.close();
        br.close();
    
    }
}
IO流小结

字节流的分类、字节输入流、字节输出流;

字符流的分类、字符输入流、字符输出流;

案例:集合到文件
//即将ArrayList集合中的字符串数据写入到文本文件
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        ArrayList<String> arr=new ArrayList<String>();
        arr.add("hello");
        arr.add("world");
        arr.add("java");
        
        BufferedWriter bw=new BufferedWriter(new FileWriter("myCharStream\\bw.txt"));
        
        for(String s:arr){
            bw.write(s);
            bw.newLine();
            bw.flush();
        }
        
        bw.close();
        
    }
}

//改进版
import java.util.*;
import java.io.*;
//Student.java已省略
public class Main{
    public static void main(String[] args) throws IOException {
        ArrayList<Student> arr=new ArrayList<Student>();
        
        Student s1=new Student("lili",19);
        Student s2=new Student("wangwu",20);
        Student s3=new Student("lisi",18);
        
        arr.add(s1);
        arr.add(s2);
        arr.add(s3);
        
        BufferedWriter bw=new BufferedWriter(new FileWriter("myCharStream\\java.txt"));

        for(Student s:arr){
            StringBuilder sb=new StringBuilder();
            sb.append(s.getName()).append(",").append(s.getAge());
        
            bw.write(sb.toString());
            bw.newLine();
            bw.flush();
        }
        
        bw.close();

       
    }
}

//数据排序改进版
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        TreeSet<Student> ts=new TreeSet<Student>(new Comparator<Student>(){
            
            public int compare(Student s1,Student s2){
                int num=s2.getYuwen()+s2.getMath()-s1.getYuwen()-s1.getMath();
                int num2=num==0?s1.getYuwen()-s2.getYuwen():num;
                int num3=num2==0?s1.getMath()-s2.getMath():num2;
                int num4=num3==0?s1.getName().compareTo(s2.getName()):num3;
                return num4;
            }
        });
        
        for(int i=0;i<5;i++){
            Scanner sc=new Scanner(System.in);
            System.out.println("请录入第"+(i+1)+"学生的信息,");
            System.out.println("姓名:");
            String name=sc.nextLine();
            System.out.println("语文成绩:");
            int yuwen=sc.nextInt();
            System.out.println("数学成绩:");
            int math=sc.nextInt();
            
            Student s=new Student();
            s.setName(name);
            s.setYuwen(yuwen);
            s.setMath(math);
            
            ts.add(s);
        }
        
        BufferedWriter bw=new BufferedWriter(new FileWriter("myCharStream\\student.txt"));
        
        for(Student s:ts){
            StringBuilder sb=new StringBuilder();
            sb.append(s.getName()).append(",").append(s.getYuwen()).append(",").append(s.getMath());
            bw.write(sb.toString());
            bw.newLine();
            bw.flush();
        }
        bw.close();
    }
}
案例:文件到集合
//即将文本文件中的数据读取到集合中,并遍历集合
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("myCharStream\\bw.txt"));
        
        ArrayList<String> arr=new ArrayList<String>();
        
        String line;
        while((line=br.readLine())!=null){
            arr.add(line);
        }
        br.close();
        
        for(String s:arr){
            System.out.println(s);
        }
    }
}

//改进版
import java.util.*;
import java.io.*;
//Student.java已省略
public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("myCharStream\\java.txt"));
        
        ArrayList<Student> arr=new ArrayList<Student>();
        

        String line;
        while((line=br.readLine())!=null){
            //将里面的每一个元素取出来赋值给学生对象的成员变量值
            String[] strarr=line.split(",");
            Student s=new Student();
            s.setName(strarr[0]);
            s.setAge(Integer.parseInt(strarr[1]));
            //添加到集合
            arr.add(s);
        }
        
        br.close();
        
        for(Student s:arr){
            System.out.println(s.getName()+","+s.getAge());
        }
    }
}
案例:点名器
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new FileReader("myCharStream\\java.txt"));
        
        ArrayList<String> arr=new ArrayList<String>();
        
        String name;
        while((name=br.readLine())!=null){
            arr.add(name);
        }
        
        br.close();
        
        Random rr=new Random(arr.size());
        int index=rr.nextInt();
        
        String namename=arr.get(index);
        System.out.println(namename);
    }
}
案例:复制单级文件夹
import java.io.*;

import static org.apache.commons.io.FileUtils.copyFile;

public class Main{
    public static void main(String[] args) throws IOException {
        File ff=new File("E:\\itcast");
        
        //获取数据源目录File对象的名称(itcast)
        String ffname=ff.getName();
        
        //创建目的地目录File对象
        File destFolder =new File("myCharStream",ffname);
        
        if(!destFolder.exists()){
            destFolder.mkdir();
        }
        
        //获取数据源目录下所有文件的File数组
        File[] listFiles=ff.listFiles();
        
        //遍历
        for(File f:listFiles){
            String srcFileName=f.getName();
            
            File destFile=new File(destFolder,srcFileName);
            
            copyFile(f,destFile);
        }
    }
}
复制文件的异常处理

try...catch..finally...

JDK7改进方案:try..catch...

JDK9改进方案:定义输入流对象、定义输出流对象、try...catch...

特殊操作流

标准输入输出流
//两个静态成员变量
    public static final InputStream in:标准输入流
        public static final PrintStream out:标准输出流
相关应用:
//标准输入流
import java.util.*;
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
       BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入一个字符串:");
        String line=br.readLine();
        System.out.println("你输入的字符串是:"+line);

        System.out.println("请输入一个整数:");
        int id=Integer.parseInt(br.readLine());
        System.out.println("你输入的整数是:"+id);
        
        //键盘录入数据
        Scanner sc=new Scanner(System.in);
    }
}

//标准输出流
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
       //BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(System.out));
        PrintStream ps=System.out;

        ps.print("hello");
        ps.print(100);
        ps.println("world");
        ps.println(300);//System.out.println(300);
    }
}
//不带ln,必须有参数
打印流

字节打印流:

PrintStream
    只负责输出数据,不负责读取数据
    PrintStream(String FileName);//使用指定的文件名创建新的打印流
相关应用:
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
       PrintStream ps=new PrintStream("myOtherStream\\ps.txt");
       //字节输出流
       ps.write(97);//a--查看时会转码
       //使用特有方法
        ps.println(97);//97--查看时,原样输出
        ps.println(98);//98
       ps.close();
    }
}

字符打印流:

PrintWriter的构造方法:
    PrintWriter(String fileName);//使用指定的文件名创建一个新的PrintWriter,而不需要自动更新
    PrintWriter(Writer out,boolean autoFlush);//创建一个新的PrintWriter
相关应用:
//基础版
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
       PrintWriter pw=new PrintWriter("myOtherStream\\pw.txt");
       
       pw.write("hello");
       pw.flush();//刷新流
        //相当于pw.println("hello");
        //pw.flush();
        pw.write("world");
        pw.flush();//刷新流
        
    }
}

//改进版
import java.io.*;

public class Main{
    public static void main(String[] args) throws IOException {
        PrintWriter pw=new PrintWriter(new FileWriter("myOtherStream\\pw.txt"),true);
        //true表示能够自动刷新
        pw.println("hello");//实现自动更新

    }
}
posted @ 2022-07-27 20:32  yesyes1  阅读(21)  评论(0编辑  收藏  举报