java输入流与输出流

简介: io流

输入流和输出流
按照流的流向来分,可以分为输入流和输出流。输入,输出都是从程序运行所在内存的角度来划分的。
输入流:只能从中读取数据,而不能向其写入数据,由InputStream和Reader作为基类。
输出流:只能向其写入数据,而不能从中读取数据。由OutputStream和Writer作为基类。

在JAVA语言中,定义了专门的类用来表示输入和输出,这些类放在java.io包中。按数据传输单位划分,可以分为字节流和字符流。其中:

字节流:InputStream:继承自InputStream的流都是用于向程序中输入数据的,且数据单位都是字节(8位)。 OutputStream:继承自OutputStream的流都是程序用于向外输出数据的,且数据单位都是字节(8位)。

       字符流:Reader:继承自Reader的流都是用于向程序中输入数据的,且数据单位都是字符(16位)。

Writer:继承自Writer的流都是程序用于向外输出数据的,且数据单位都是字符(16位)。

这是在d盘中创建一个a的文件,然后再a文件中写入。
public static void main(String[] args) throws IOException {

    File f1 = new File("d:/a");
    f1.createNewFile();

    OutputStream out = new FileOutputStream(f1);

// Scanner sc = new Scanner(System.in);
// System.out.println("请输入:");
// String msg = sc.next();

    String msg1 ="爱你在每一个你不知道的瞬间";
    byte[] bytes = msg1.getBytes();//获取字符串对应解析后的 byte[]数组
    out.write(bytes);

}

读取文件中的内容使用这个代码之前必须先创建在磁盘里创建一个a.txt文件,文件中任意写入几个字母
image.png
读取文件中的字母
public static void main(String[] args) throws IOException {

    /**
     * 使用这个代码之前必须先创建在磁盘里创建一个a.txt文件,文件中要写入几个字母
     */
    //输出流:内存的内容输出到文件(写操作)  输入流:文件内容输入到内存中(读操作)
    File f1=new File("d:/a.txt");
    //创建一个输入流,读取f1这个文件
    InputStream input = new FileInputStream(f1);
    //读取文件的一个字符,然后把字符转换为对应的数字放回。如果读取到文件的末尾,返回的是-1

// int n;
// while ((n=input.read())!=-1){
// System.out.println((char)n);
// }

    //int read(byte[] b)使用缓冲区读取: 一次读取数组长度个元素,读取到的字符转换成数字存入数组中

// byte[] b=new byte[10];//定义byte数组,指定长度,作为每次读取的缓冲区
// int n = input.read(b);//按照数组长度读取,读取的内容存在数组中,返回的是实际读取的字节数
// System.out.println("读取的字节数:"+b);
// String s = new String(b,0,n);//对数组 从 0 索引开始 截取实际读取的长度10产生字符串
// System.out.println(s);
//
// byte[] b1=new byte[10];
// int n1 =input.read(b1);//要求读十个,实际只有 5个 b数组中有五个是无效数据
// System.out.println("读取的字节数:"+n1);
// String s1 =new String(b1,0,n1);
// System.out.println(s1);
//
// byte[] b2=new byte[10];
// int n2=input.read(b2);
// System.out.println("读取的字节数:"+n2);
// String s2=new String(b2,0,-1);
// System.out.println(s2);

    
    //因为上面重复的代码过多,所以下面这个直接使用循环判断
    byte[] buffer=new byte[10];
    while (true) {
        int n = input.read(buffer);
        if (n!=-1){
            String s = new String(buffer,0,n);
            System.out.print(s);
        }else{
            break;
        }
    }
}

输入流,输出流 综合案例:

可以把一个文件夹里的txt复制到一个空的文件夹中
public static void main(String[] args) throws IOException {

    //1.定义源文件和目的文件的文件对象
    File f1= new File("d:/a.txt");
    File newFile= new File("d:/a/b.txt");

    //2.创建目的文件
    newFile.createNewFile();

    //3.定义输入流:  使用输入流读取内容   使用输出流写入内容
    InputStream in =new FileInputStream(f1);
    OutputStream out=new FileOutputStream(newFile);

    //4.循环读取文件内容,同时写入指定的文件

// int n;
// while ((n=in.read())!=-1){
// out.write(n);
// }

     byte[] buffer=new byte[10];
    int n;
    while ((n=in.read())!=-1){//读取文件,返回实际读取的字节数
        out.write(n);//数组从0开始,截取读取到有效字节数n  写入到目的文件中
        }

    }
}
相关文章
|
2天前
|
Java
使用java字节输入流读取文件
使用java字节输入流读取文件
4 0
|
1月前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
15 1
|
10月前
|
缓存 Java
深入解析 Java 中的 OutputStream:输出流的精髓揭秘
在 Java 编程中,输出流(OutputStream)是一个关键概念,它为我们提供了一种向目标写入数据的方法。无论是写入文件、网络数据还是其他输出目标,OutputStream 都是实现数据输出的不可或缺的工具。本文将带您深入探索 Java 中的 OutputStream,揭示其原理、用法以及在实际开发中的应用。
|
10月前
|
缓存 网络协议 Java
深入理解 Java 中的 InputStream:输入流的奥秘解析
在 Java 编程中,输入流(InputStream)是一个重要的概念,它为我们提供了一种从数据源读取数据的方式。无论是读取文件、网络数据还是其他数据源,InputStream 都是不可或缺的工具。本文将带您深入探索 Java 中的 InputStream,解析其原理、用法以及在实际开发中的应用
|
10月前
|
Java
Java IO流--标准输入System.in,输出流System.out的使用
Java IO流--标准输入System.in,输出流System.out的使用
142 0
|
10月前
|
Java
Java IO流之访问文件的字节输入流FileInputStream和字节输入流FileOutputStream的详解
Java IO流之访问文件的字节输入流FileInputStream和字节输入流FileOutputStream的详解
78 0
|
10月前
|
Java
Java IO流--使用FileReader字符输入流读入数据到java程序或者内存的基本操作
Java IO流--使用FileReader字符输入流读入数据到java程序或者内存的基本操作
136 0
|
存储 缓存 Java
【Java I/O 流】字符输入输出流:Reader 和 Writer
前面我们已经学会了字节流的使用,本篇开始介绍字符流。字符输入输出流是所有字符流的超类,学会了它们的方法,也基本上掌握了其子类的使用了。
101 0
java202303java学习笔记第三十六天字符输入流的底层原理解析2
java202303java学习笔记第三十六天字符输入流的底层原理解析2
49 0
java202303java学习笔记第三十五天字符输入流的底层原理解析1
java202303java学习笔记第三十五天字符输入流的底层原理解析1
52 0