java基础笔记-IO流


十一 IO流

11.1 File类

java.io.File类 :一个对象代表一个文件或一个文件目录

构造器:

这里只是构造了一个对象,还没有涉及到硬盘读写操作,所以文件不存在也

//方法1
File file1 = new File("hello.txt");//相对路径
File file1 = new File("C:\\file\\t.o");//绝对路径,\\转义字符
//方法2
File file2 = new File("C:\\file","t.o");//new File(String parent,String child),一个指定目录,一个指定文件
File file2 = new File("C:\\file");//new File(String pathname),只创建了目录的File对象
//方法3
File file3 = new File(file2,"x.o");//File(File file,String child),使用第二种构造器对象的目录,然后再自己指定文件

路径分隔符取决于系统:windows和DOS使用 \ , unix和URL使用 /

方法:

读文档去。。。

11.2 IO流原理及流分类

? java中对于数据的IO,都是以stream 的方式进行

? java.io包下提供了各种stream类和接口,但是提供了统一的标准方法

分类:

按照数据单位的不同:字节流8 bit,字符流16 bit

流的角色不同:节点流(基础的流),处理流(在节点流的基础上包一层处理)(下面四个基类看作用在这两种流的哪一种上,就称为啥流)(不是一个考虑维度的)

抽象基类 字节流 (操作的基本单位Byte) 字符流( 操作的基本单位char)
输入流 InputStream Reader
输出流 OutputStream Writer

IO流涉及到了40多个类,但是都是从以上4个抽象基类派生的,命名规则都是 Xxxx基类名

例如访问文件的FileInputStream(可以看成节点流)

访问数组的,访问管道的,访问字符串的,缓冲流,转换流,对象流,打印流,回推输入流...........(处理流)

基本读操作

@Test
public void testFileReader()  {//能用try catch就别throws,原因:可能中途的异常导致最后的close方法未执行
    FileReader fr = null;
    try {
        //1 创建文件对象
        File file = new File("hello");//相较于当前Module
        //如果是main方法则是相对于当前工程
        System.out.println(file.getAbsoluteFile());

        //2 提供流
        fr = new FileReader(file);

        //3 数据读入
        //read(),返回读入的一个字符,达到文件尾返回-1
        int data = fr.read();
        while (data != -1){
            System.out.print((char)data);
            data=fr.read();//i++
        }
        //方式2
        //while((data=fr.read())!=-1){....}
        
         //方法3
        char[] cbuf=new char[5];
        int len;
        while((len = fr.read(cbuf))!=-1){
            for(int i=0;i

基本写操作(到文件)

文件不存在会自动创建,存在则覆盖

/*
从内存中写出文件到文件
*/
@Test
public void testFileWriter() throws IOException {
    File file =new File("hello.out");
    FileWriter fw = new FileWriter(file,true);//在原有文件上追加写,w+
    fw.write("i have a dream\n");
    fw.write("llalalalala");
    fw.close();
}

11.3 缓冲流

BufferedReader BufferedWriter BufferedOutputStream BufferedInputStream

11.4 转换流

输入字符流的范畴内

字节流和字符流之间的转换,

字节输入流 ----> InputStreamReader(字符输入流) --> 字符输入流

字符输出流 -----> OutputStreamWriter(字符输出流)---->字节输出流

try{
    InputStreamReader isr = new InputStreamReader(new FileInputStream("hello.txt"),"UTF-8");
    char[] cbuf = new char[20];
    int len;
    while((len=isr.read())!=-1){
        String str =new String(cbuf,offset:0,len);
        sout(str);
    }
}catch(IOException e){
    e.print;
}final{
    if(isr!=null)
    	isr.close();
}

/*
    将utf-8文件字节流读入,转化为字符流,在转换为字节流gbk保存
*/
public void test2(){
    InputStreamReader isr = null;
    OutputStreamWriter osw = null;
    try {
        isr = new InputStreamReader(new FileInputStream(new File("hello.out")),"utf-8");
        osw = new OutputStreamWriter(new FileOutputStream(new File("hello_gbk.out")),"gbk");

        char[] cbuf =new char[20];
        int len;
        while ((len=isr.read(cbuf))!=-1){
            osw.write(cbuf,0,len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (osw != null) {
            try {
                osw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (isr != null) {
            try {
                isr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

11.5 标准输入输出流

11.6 打印流

11.8 对象流

麻蛋看到IO流这章就一点动力都没了。。。

全部跳过