【Java学习】IO流(初步完成)

一.文件流

1.简介

  • 文件流:文件在程序中是以流的形式来操作的
  • 流:数据在数据源(文件)和程序(内存)之间经历的路径
  • 输入流:数据从数据源(文件)到程序(内存)的路径
  • 输出流:数据从程序(内存)到数据源(文件)的路径

2.常用的文件操作

  1. 创建文件对象相关构造器和方法
    new Flie(String,pathname)//根据路径构建一个File对象
    new File(File parent,String child)//根据父目录文件+子路径构建
    new File(String parent,String child)//根据父目录+子路径构建
    createNewFile//创建新文件
    
  • 代码实操
    package com.java.io_;
    
    import java.io.File;
    import java.io.IOException;
    
    public class NewFile1 {
        public static void main(String[] args) throws IOException {
            create01();
            create02();
            create03();
        }
    
        //方法1:new Flie(String,pathname)//根据路径构建一个File对象
    
        public static void create01() throws IOException {
            String filePath = "src/com/java/io_/1.txt";
            File file1 = new File(filePath);
            file1.createNewFile();
            System.out.println("文件创建成功");
    
        }
    
        //方法2:new File(File parent,String child)//根据父目录文件+子路径构建
        public static void create02() throws IOException {
            File ParentFile = new File("src/com/java/io_/");
            String fileName = "2.txt";
            File file = new File(ParentFile, fileName);
            file.createNewFile();
    
    
        }
    
        //方式 3 new File(String parent,String child) //根据父目录+子路径构建
        public static void create03() {
    
            String parentPath = "src/com/java/io_/";
            String fileName = "3.txt";
            File file = new File(parentPath, fileName);
            try {
                file.createNewFile();
                System.out.println("创建成功~");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
  1. 目录的操作和文件的删除
  • mkdir创建一级目录,mkdirs创建多级目录,delete删除空目录或文件
  • 代码实现:
import java.io.File;

public class NewFile2 {
    public static void main(String[] args) {
        info();
    }

    public static void info() {
        File file = new File("src/com/java/io_/1.txt");
       //判断一个文件是否存在如果存在就把它删除
        if(file.exists()){
            System.out.println("文件存在");
            if(file.delete()){
                System.out.println("文件删除成功!");
            }else{
                System.out.println("文件删除失败");
            }
        }else{
            System.out.println("文件不存在");
        }
        //看这个目录是否存在如果不存在就把这个目录创建出来
        File file1 = new File("src/com/java/io_/1/2/3");
        if(file1.isDirectory()){
            System.out.println("目录存在!");

        }else{
            System.out.println("目录不存在!");
            if(file1.mkdirs()){//创建多级目录
                System.out.println("目录创建成功");
            }else{
                System.out.println("目录创建失败");
            }

        }

    }
}

3.常用方法

  • 直接上代码
package com.java.io_;

import java.io.File;

public class NewFile2 {
    public static void main(String[] args) {
        info();
    }

    public static void info() {
        File file = new File("src/com/java/io_/1.txt");
        System.out.println("文件的名字" + file.getName());
        System.out.println("文件的父级目录" + file.getParent());
        System.out.println("文件的绝对路径" + file.getAbsolutePath());
        System.out.println("文件的大小单位字节" + file.length());
        System.out.println("文件的是否存在" + file.exists());
        System.out.println("是不是一个文件" + file.isFile());
        System.out.println("是不是一个目录" + file.isDirectory());
    }
}
===========================================================================
文件的名字1.txt
文件的父级目录src/com/java/io_
文件的绝对路径/Users/houpengju/Desktop/java/Java2/src/com/java/io_/1.txt
文件的大小单位字节0
文件的是否存在true
是不是一个文件true
是不是一个目录false

二.IO流原理及流的分类

1.IO流原理

  1. i/o技术是非常实用的技术,用于处理数据传输,如读写文件。网络通讯等
  2. java程序中,对于数据的输入或输出操作是以流(stream)的方式进行
  3. java.io包下提供了各种流类和接口,用以获取不同种类的数据,并通过方法输入或输出数据
  4. 输入input读取外部数据(磁盘,硬盘等存储设备的数据)到程序(内存)当中
  5. 输出output将程序(内存)数据输出到存储设备当中

2. 流的分类

  • 按操作数据单位的不同分为:字节流(8bit)操作二进制文件可以实现无损操作、字符流(按字符编码计算大小)
  • 按数据流的流向:输入流、输出流
  • 按流的角色的不同分为:节点流、处理流/包装流
抽象基类字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter
  • java中IO流共涉及40多个类,实际上非常规则,都是以如上4个抽象基类派生的
  • 由这四个类派生出来的子类名称都是以其父类名作为子类名后缀

三.字节流

1.字节输入流常用子类(InputStream)

1.1 FileInputStream 文件输入流

  • 直接实操上代码
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class FileInputStream_ {
    public static void main(String[] args) throws Exception {
        FileInputStream fileInputStream = new FileInputStream(new File("src/com/java/io_/1.txt"));
       int read1 =0;
       // while ((read1 = fileInputStream.read())!=-1){//单个字节读取效率比较低
       //   System.out.print((char)read1);
       //}
        byte[] buf = new byte[9];
        //如果正常,返回实际读取的字节数
        //read(byte[])功能:读取多个字节到byte[],返回读取到的自己饿个数,如果到文件末尾,返回-1
        while ((read1 = fileInputStream.read(buf)) != -1) {
        	//将读取到的字节0-len 转成string输出
            System.out.print(new String(buf, 0, read1));
        }
       
        fileInputStream.close();
    }
}

1.2 BufferedInputStream 缓冲字节输入流

1.3 ObjectInputStream 对象字节输入流

2.字节输出流常用子类(OutputStream)

2.1 FileOutputStream 文件输出流

  • 直接代码实操
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStream_ {
    public static void main(String[] args) throws IOException {
        //演示使用FileOutputStream 将数据写到文件当中
        String filepath= "src/com/java/io_/outputstream_/1.txt";
        //当以以下方式创建后,当写入内容会覆盖原来的内容,我们只要在后面加一个true就能把覆盖变成追加写入
//        FileOutputStream outputStream = new FileOutputStream(filepath);
        FileOutputStream outputStream = new FileOutputStream(filepath,true);
       //写入一个字节,当我们没有创建这个文件的时候,后自动创建出这个文件
        outputStream.write('h');
        // 写入字符串
       String str ="hello world";
       //getByte()可以把一个字符串转换成一个字节数组
        outputStream.write(str.getBytes());
        //通俗的讲就是把数组指定区间中的数据写入到文件当中
        outputStream.write(str.getBytes(),0,/*str.getBytes().length*/ 4);
         outputStream.close();
    }
}

2.2 BufferedOutputStream 缓冲字节输出流

2.3 ObjectOutputStream 对象字节输出流

3.输入输出流具体应用

3.1文件输入输出流拷贝文件

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;


public class FileCopy {
    public static void main(String[] args) throws IOException {
        //完成文件的拷贝
        //思路分析
        //先创建文件的输入流,将文件读入到程序当中
        //创建文件的输出流,将读取的文件数据,写入到指定的位置
        FileInputStream fis = new FileInputStream("2.png");
        FileOutputStream fos = new FileOutputStream("src/com/java/io_/file_/2.PNG");
        byte[] bytes = new byte[1024];
        int f = 0;
        while ((f = fis.read(bytes)) != -1) {
            fos.write(bytes, 0, f);

        }
        fos.close();
        fis.close();

    }
}

四.字符流

1.FileReader和FileWriter

  • 因为代码类似就不演示了,无非是把byte变成了char,getbyte 变成toCharArray
  • FileWriter使用后必须关闭或者刷新(flush)否则写入不到指定文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来半杯冰可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值