Java-----IO编程

IO编程

只是学习笔记,如果有错误,请在评论区指出,谢谢

一、字节流与字符流

​ 1、File类只能够操作文件本身而不能操作文件内容

​ 2、IO操作的核心意义在于:输入与输出操作 实际上就是一种数据流的处理形式,数据流就是字节数据

3、字节流的处理形式在java.io包里面提供有两类支持

  • 字节处理流:OutputStream(输出字节流)、InputStream(输入字节流)
  • 字符处理流:Writer(输出字符流)、Reader(输入字符流)
二、流操作的统一步骤
  • 如果要进行的是文件的读写操作,一定要通过File类找到一个文件路径

  • 通过字节流或字符流的子类为父类对象实例化

  • 利用字节流或字符流中的方法实现数据的输入与输出操作

  • 流的操作属于资源操作,资源操作必须进行关闭处理

三、OutputStream字节输出流
  1. 字节的数据是以byte类型为主实现的操作,在进行字节内容输出的时候可以使用OutputStream类完成
  2. OutputStream类属于一个抽象类,应该依靠他的子类来实例化对象,如果要从文件读取一定使用FileOutputStream

​ public abstract class OutputStream exends Object implments Closeable,Flushable

package com.yyr.OutInputText;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

//输入信息到文件里
public class OutputText {
    public static void main(String[] args) throws  Exception{
        File file=new File("c:"+File.separator+"open"+File.separator+"class.txt");//指定要操作的文件的路径
        if (!file.getParentFile().exists()) {//文件不存在
        file.getParentFile().mkdirs();//创建父目录

        }
        OutputStream output=new FileOutputStream(file);//通过子类实例化
        String str="欢迎光临";
        output.write(str.getBytes());//字节码输入
        output.close();//关闭资源

    }
}
package com.yyr.OutInputText;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

//输入信息到文件里
public class OutputText {
    public static void main(String[] args) throws  Exception{
        File file=new File("c:"+File.separator+"open"+File.separator+"class.txt");//指定要操作的文件的路径
        if (!file.getParentFile().exists()) {//文件不存在
        file.getParentFile().mkdirs();//创建父目录

        }
        OutputStream output=new FileOutputStream(file);//通过子类实例化
        String str="欢迎光临";
        output.write(str.getBytes());
        output.close();

    }
}

在这里插入图片描述

package com.yyr.OutInputText;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

//输入信息到文件里
public class OutputText {
    public static void main(String[] args) throws  Exception{
        File file=new File("c:"+File.separator+"open"+File.separator+"class.txt");//指定要操作的文件的路径
        if (!file.getParentFile().exists()) {//文件不存在
        file.getParentFile().mkdirs();//创建父目录

        }
        OutputStream output=new FileOutputStream(file,true);//通过子类实例化,可以追加更多数据
        String str="欢迎光临\r\n";//换行
        output.write(str.getBytes());//字节码输入
        output.close();//关闭资源

    }
}

三、OutputStream字节输出流

1.InputStream类属于一个抽象类,应该依靠他的子类来实例化对象,如果要从文件读取一定使用FileInputStream类

范例:读取数据

package com.yyr.InputText;
import java.io.*;

public class InputDemo {
    public static void main(String[] args) throws IOException {
        File file=new File("c:"+File.separator+"open"+File.separator+"class.txt");//指定要操作的文件的路径
        InputStream input=new FileInputStream(file);
        byte data []=new byte[1024];//开辟一个缓冲区读取数据
        int len=input.read(data);//读取数据,数据保存在字节数组中
        System.out.println("["+new String(data,0,len)+"]");
        input.close();
    }
}


输出

[欢迎光临欢迎光临欢迎光临欢迎光临
欢迎光临
]
四、Writer字符输出流
package com.yyr.OutInputText;

import java.io.*;

public class WriterText {
    public static void main(String[] args) throws IOException {
        File file=new File("c:"+File.separator+"open"+File.separator+"class.txt");//指定要操作的文件的路径
        if (!file.getParentFile().exists()) {//文件不存在
            file.getParentFile().mkdirs();//创建父目录

        }
        Writer out=new FileWriter(file,true);//不覆盖加true
        String str="美丽的小姐们\r\n";//换行
        out.write(str);
        out.close();

    }
}

在这里插入图片描述

字符处理的优势在于中文的处理

五、Reader字符输出流

1.Reader是实现字符输入流的一种类型,其本身属于一个抽象类.

package com.yyr.InputText;

import java.io.File;

import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;


public class ReaderText {
   public static void main(String[] args) throws IOException {
       File file=new File("c:"+File.separator+"open"+File.separator+"class.txt");//指定要操作的文件的路径
       if (!file.getParentFile().exists()) {//文件不存在
           file.getParentFile().mkdirs();//文件存在则进行读取

       }
       Reader re=new FileReader(file);
       String str="美丽的小姐们\r\n";//换行
       char data []=new char[1024];//开辟一个缓冲区读取数据
       int len=read.read(data);//
       System.out.println("["+new String(data,0,len)+"]");
       re.close();

   }
}


输出

[美丽的小姐们
美丽的小姐们
美丽的小姐们
美丽的小姐们
欢迎光临]
六、字节流和字符流的处理

1.在使用OutputStream类输出的时候如果没有使用close方法关闭输出流还可以正常使用,使用Writer的时候没有使用close方法关闭输出流,内容将无法输出,因为Writer使用到了缓冲区.当使用close方法会有强制刷新缓冲区的情况,所以会将内容输出.可以使用flush方法强制刷新缓冲区.

2.字节流在进行处理的时候并不会使用到缓冲区,二字符流会使用到缓冲区.设计到中文信息的输出一般都是使用字符流输出.

七、转换流

转换操作类:

  1. InputStreamReader

  2. OutputStreamWriter

八、IO操作深入

1、字符编码

2、内存操作流:

  • 字节内存操作流:ByteArrayInputStream :ByteArrayOutputStream

  • 字符内存操作流::ByteArrayWriter :ByteArrayReader

    范例:小写字母转大写字母

package com.yyr.IO深入操作;

import java.io.*;

public class ByteArrayTest {
    public static void main(String[] args) throws IOException {
        String str="www.aliyun.cn";
        InputStream input=new ByteArrayInputStream(str.getBytes());//将数据保存在内存流
        OutputStream out=new ByteArrayOutputStream();//读取内存中的数据
        int data=0;
        while((data=input.read())!=-1){//每次读取一个字节
            out.write(Character.toUpperCase(data));//保存数据

        }
        System.out.println(out);
        input.close();
        out.close();
    }
}

输出:

WWW.ALIYUN.CN

3.管道流:实现两个线程之间的IO操作

  • 字符管道流:PIpeWriter PipeReader
  • 字节管道流:PipeInputStream PIpeOutputStream
package com.yyr.IO深入操作;

import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Random;

public class RandomAcessText {
    public static void main(String[] args) throws IOException {
        File file=new File("c:"+File.separator+"open"+File.separator+"class.txt");//指定要操作的文件的路径
        RandomAccessFile raf=new RandomAccessFile(file,"rw");
        String names[]=new  String[]{"zhangsan","lisi    ","wangwu  "};
        int ages[]=new  int[]{30,25,38};
        for (int i = 0; i < names.length; i++) {
            raf.write(names[i].getBytes());
            raf.write(ages[i]);
        }
        raf.close();

    }
}


十一、BufferedReader类

键盘输入的类

package com.yyr.IO深入操作;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class BufferdRederText {
    public static void main(String[] args) throws IOException {
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        System.out.println("请输入您的年龄");
        String msg=br.readLine();
        if(msg.matches("\\d{1,3}")){
            int age=Integer.parseInt(msg);
            System.out.println("您的年龄为:"+age);
        }
        else
            System.out.println("请不要随意输入,请输入正确的年龄");
    }
}

请输入您的年龄
56
您的年龄为:56
十二、Scanner

扫描流,为了解决输入流的访问问题,可以替代BufferedReader类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值