IO输入输出流——Java面向对象基础(29)

一、概念

IO(输入输出流)

InputStream 输入流

OutputStream 输出流

 

输入输出流广义上就是物理存储介质、设备、容器数据的传输过程。

 

Java中提供一个强大的api操作IO,java.io包

二、常见的File类

File常常用于操作系统文件或目录,其中常用的方法务必掌握。

File file = new File("填写文件|文件目录的路径");

createNewFile()  创建文件

delete()   删除文件或目录

exists()  判断文件或目录是否存在

mkdir() 创建目录

mkdirs() 创建目录(父目录)

listRoots() 列出可用的文件系统根。

File.listRoots()[index].listFiles()  获取某个磁盘的所有文件目录

getAbsoluteFile() 返回此抽象路径名的绝对形式。

file.getAbsoluteFile().getAbsolutePath()  获取绝对路径 -- String字符路径

toURI() 构造一个表示此抽象路径名的 file: URI。

三、字节流

输入流:

//字节流
    @Test
    public void test02(){
        File file=new File("file\\test.txt");
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        InputStream is=null;
        try{
            is=new FileInputStream(file);//创建一个输入字节流
        int nr;
        while((nr=is.read())!=-1){//每次从文件中读出一个字节
            baos.write(nr);//将读出的字节,写入一个字节数组缓冲流
        }
        baos.flush();//刷新,强制写入
        byte[] bytes=baos.toByteArray();
        String str=new String(bytes);
        System.out.println(str);

        }catch(IOException e){
            e.printStackTrace();
        }finally{
            try {
                if(baos!=null){
                    baos.close();
                }
                if(is!=null){
                    is.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

输出流:

//字节流
    @Test
    public void test01() {
        String say="hello world";
        byte[] bys=say.getBytes();//将要写入的字符串,变为字节数组
        File file=new File("file");
        //判断目录是否存在,不存在创建目录
        if(!file.exists()){
            file.mkdir();
        }
        File txtfile=new File("file\\test.txt");
        //判断文件是否存在,不存在创建文件
        if(!txtfile.exists()){
            try {
                txtfile.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        OutputStream os=null;
        try {
            os = new FileOutputStream(txtfile);//创建一个字节输出流数据
            os.write(bys);//将字节数组写入文件
            os.flush();//刷新字节流缓冲区,强制写入文件

        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                if(os != null){
                    os.close();//释放字节流对象资源
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

综合:

//字节流,输入并输出
    @Test
    public void test03(){
        File sourceFile=new File("");
        File targetFile=new File("");
        InputStream is=null;
        OutputStream os=null;
        byte[] bys=new byte[1024];//一个字节数组用于存放读出的字节
        int len;
        try{
            is=new FileInputStream(sourceFile);//创建一个字节输入流
            os=new FileOutputStream(targetFile);//创建一个字节输出流
            while((len=is.read(bys))!=-1){//一次读入多个字节储存在bys字节数组中,len为本次读取的字节数
                os.write(bys, 0, len);//设置偏移值,一次可以写入多个字节
            }
            os.flush();
        }catch(IOException e){
            e.printStackTrace();
        }finally{

            try {
                if(is!=null){
                    is.close();
                }
                if(os!=null){
                    os.close();
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

四、字符流

提供了两个操作字符流的父类

java.io.Reader   ---   字符输入流

|- InputStreamReader

  |- FileReader 操作字符便捷类

|- BufferedReader

java.io.Writer

|- OutpustStreamWriter

  |- FileWriter 操作字符便捷类

|- BufferedWriter

1.字符流

//字符流 输入
    @Test
    public void test05(){
        File file=new File("file\\test.txt");
        try {
            InputStream is=new FileInputStream(file);//创建一个字节流对象
            //InputStreamReader构造函数将传入的字节流转化为字符流,并且可以设置编码方式
            InputStreamReader isr=new InputStreamReader(is,"UTF-8");
            int len;
            StringBuffer sb=new StringBuffer();
            while((len=isr.read())!=-1){//isr.read()返回读取到字符相应的int值,每次读取一个字符
                sb.append((char)len);
            }
            System.out.println(sb);
        } catch (IOException e) {

            e.printStackTrace();
        }

    }
//字符流 输出
    @Test
    public void test04(){
        String say ="hello 你们好";
        OutputStream os=null;
        OutputStreamWriter osw=null;
        try {
            os=new FileOutputStream("file\\test.txt",true);//创建一个字节流对象
            //OutputStreamWriter构造函数将传入的字节流转化为字符流,并且可以设置编码方式
            osw=new OutputStreamWriter(os,"UTF-8");
            osw.write(say);
            osw.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally{
            try {
                if(osw!=null){
                    osw.close();
                }
                if(os!=null){
                    os.close();
                }

            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }

2.字符缓冲流(效率高些)

//BufferWriter输出
    @Test
    public void test06() throws IOException{
        File file=new File("file\\test.txt");
        OutputStream os=new FileOutputStream(file);
        //将字节流转换为字符流
        Writer osw=new OutputStreamWriter(os);
        //将字符流转换为字符缓冲流————创建缓冲字符流
        BufferedWriter bw=new BufferedWriter(osw);
        bw.write("\n hello");
        bw.flush();
        bw.close();
    }
//BufferReader
    @Test
    public void test07() throws IOException{
        File file=new File("file\\test.txt");
        InputStream is=new FileInputStream(file);
        //将字节流转换为字符流
        Reader isr=new InputStreamReader(is);
        //将字符流转换为字符缓冲流————创建缓冲字符流
        BufferedReader br=new BufferedReader(isr);
        StringBuffer sb=new StringBuffer();
        String str;
        while((str=br.readLine())!=null){//一行一行的读入
            sb.append(str);
            sb.append("\n");
        }
        System.out.println(sb);
        br.close();
    }

3.便捷类(无法设置编码格式)

//FileWriter
    @Test
    public void test08() throws IOException{
        File file=new File("file\\test.txt");
        FileWriter fw=new FileWriter(file);
        fw.write("\n hello");
        fw.flush();
        fw.close();
    }
//FileReader
    @Test
    public void test09() throws IOException{
        File file=new File("file\\test.txt");
        FileReader fr=new FileReader(file);
        StringBuffer sb=new StringBuffer();
        int str;
        while((str=fr.read())!=-1)
        {
            sb.append((char)str);
        }
        System.out.println(sb.toString());
        fr.close();
    }

原文地址:https://www.cnblogs.com/Unlimited-Rain/p/12562623.html

时间: 2024-10-12 17:45:23

IO输入输出流——Java面向对象基础(29)的相关文章

【Java面向对象基础(三)】面向对象思想

[喵"的Android之路][基础篇(三)][Java面向对象基础]面向对象思想 1 面向对象的WWH 1.1 What--什么是面向对象 首先,要理解“对象”.在Thinking in Java中提到“Everything is an object”,即万物皆对象.这里的“对象”指的是任何实体或者任何可以当作实体看待的“虚幻的事物”.比如现实中的人(男人.女人.老人.小孩而...).动物(大象.狮子.猴子...).桌子.凳子.汽车.ATM机等等,也可以使看不见摸不着的空气(氧气.二氧化碳.氮气

【Java面向对象基础(一)】数据类型与运算符

[喵"的Android之路][基础篇(一)][Java面向对象基础]数据类型与运算符 1.数据类型介绍 在Java中,数据类型分为两种:基本数据类型和引用类型. 基本数据类型共8种,见下表: 基本数据类型 字节数 二进制位数 最小值 最大值 默认值 byte 1 8-bit -2^7 +2^7 - 1 0 short 2 16-bit -2^15 +2^15 - 1 0 int 4 32-bit -2^31 +2^31 - 1 0 long 8 64-bit -2^63 +2^63 - 1 0

【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder

[喵"的Android之路][基础篇(二)][Java面向对象基础]细说String.StringBuffer和StringBuilder 1.String String是Java中的一个final类,主要用于字符串的处理. 1.1 不可变性 String内的字符串是不可变的,每一次修改都会重新生成一个新的String对象实例. 例: 1 // 在堆中会创建一个"Hello"字符串实例,把地址赋给对象a 2 String a = new String("Hello&

java.IO输入输出流:过滤流:buffer流和data流

java.io使用了适配器模式装饰模式等设计模式来解决字符流的套接和输入输出问题. 字节流只能一次处理一个字节,为了更方便的操作数据,便加入了套接流. 问题引入:缓冲流为什么比普通的文件字节流效率高? 不带缓冲的操作,每读一个字节就要写入一个字节. 由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低. 带缓冲的流,可以一次读很多字节,但不向磁盘中写入,只是先放到内存里. 等凑够了缓冲区大小的时候一次性写入磁盘,这种方式可以减少磁盘操作次数,速度就会提高很多! 这就是两者的区别

Java IO输入输出流 笔记

String s = "慕课ABC"; byte[] bytes1 = s.getBytes();//转换成字节序列用的是项目默认的编码 ,编码GBK for(byte b : bytes1) { //把字节(转换成)int以16进制的方式显示, 只显示后8位 System.out.println(Integer.toHexString(b & 0xff) + " "); } //gbk编码中文占用两个字节,英文占用1个字节 //utf-8编码中文占用3个字

Java IO输入/输出流的套接

缓冲字符流BufferedInputStream / BufferedOutputStream 文件操作流 InputStream / OutputStream java 输入输出流的套接,测试一下流链的速度 因为节点流在程序中并不是很常用,一般常通过过滤流将多个流套接在一起,利用各流的特性共同处理数据,套接的多个流构成了一个流链: 我们来分析他们的运行时间.(因为在不同的系统(maxOX,Linux,WIN(32/64))上运行的时间可能都不相同)我截取了几段时间来进行对比. 1.缓冲字符流B

C++笔记(9):IO输入输出流

输入输出流 C++的输入输出流是IO系统向用户提供一个统一的接口,它隔离了具体的设备差异.包括标准输入输出流和文件流.标准输入输出流 istream是输入流类,cin就是istream类型的对象.ostream是输出流类,cout是ostream类型的对象. 在C++中允许用户重载运算符"<<"和">>",实现对象的输入和输出. 重载这二个运算符时,在对象所在的类中,将重载这二个运算符的函数说明该类的友元函数. C++在头文件fstream.

关于JAVA面向对象基础整理以及个人的理解(适合初学者阅读)

JAVA的基础语法等都跟C有很大的相似之处,所以这里就不多啰嗦了.直接从数组开始. 数组: 1.声明 int [] a; 在声明的过程中,并没有分配空间给数组.我们可以在声明的同时,用new来分配相应的空间 int [] a = new int[100]; 这里开辟了一个空间为100大小的数组,内存分配也完成了. 我们可以在声明的同时也确定元素个数 int [] a = new int[]{1,3,5,7,9}; 面向对象(重点) class Human{ int height; void br

c++中IO输入输出流总结&lt;二&gt;

1 文件的打开和关闭 1.1 定义流对象 ifsteam iflie;//文件输入流对象 ifsteam iflie;//文件输出流对象 fsteam iflie;//文件输入输出流对象 1.2 打开文件 void open(const unsigned char* filename,int mode,int accessfilebuf:opnprot) mode为打开的方式,相关标记如下图所示(ios中) 注意: (1)通常打开方式用|组合起来 ios::in|ios::out  //读写方式