Java进阶io与文件操作从懵逼到了然

Posted 布小禅

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java进阶io与文件操作从懵逼到了然相关的知识,希望对你有一定的参考价值。

在这里插入图片描述

前言(先扯几句家常)

个人主张自学,但是也不能忘记了讨论的重要性,但是由于平时不z怎么看CSDN,所以呢我这边搞了一个小圈子,欢迎大家来哦~可以畅所欲言呀——小圈子

不过CSDN评论区我也会不定时观看的,所以非强制性要求哦


关于本篇,引用一个群大佬的话:

stream是管道,文件是数据载体,IO(InPut(输入)、OutPut(输出))是数据的流动的方向

Stream流

Java流是对于字节和字符来说的,所以是字节流,字符流。

什么是流,大家看一个词,水流,什么是水流大家都知道,那么换成字节流,字符流不过是同样的意思罢了。
什么是字节流?单个字节或者字符,而单个字节或者字符很明显构不成流,得是多个字节或者字符。

那么这么解释,应该是不会再感觉到困惑啦。

下面看看实操吧。

从键盘获取数据

咦,突然有种莫名的熟悉感。这不是Scanner吗!

不不不,今天我们讲的是另一个:InPutSteamReader

看着好长啊,我们这次先不去管它是什么,我们先看看他能干什么:获取键盘数据

  1. 获取一个字符:
import java.io.*;

public class Ex5_9io {
    public static void main(String[] args) throws IOException{
        BufferedReader a = new BufferedReader(new InputStreamReader(System.in));
        //获取单个字符
        char c;
        c = (char) a.read();  //使用c来接收字符
        System.out.println(c);   //输出
    }
}

运行结果:

在这里插入图片描述

玩点花的:

import java.io.*;

public class Ex5_9io {
    public static void main(String[] args) throws IOException{
        BufferedReader a = new BufferedReader(new InputStreamReader(System.in));
        //获取单个字符
        ArrayList<Character> c = new ArrayList<>();
        for (int i = 0;i<10;i++){
            c.add((char) a.read());
        }
        System.out.println(c);
    }
}

都是之前学过的东西,如果你看不懂,说明基础大的不太牢固哦,可以去看看我的哪一篇集合博客——集合理解

运行结果:

在这里插入图片描述

嘿嘿

在这里插入图片描述

可以看到,虽然我们输入了一句话,但是我们的Java却一个字符一个字符的存入了集合c中

获取多个字符,也就是获取字符串

import java.io.*;

public class Ex5_9io {
    public static void main(String[] args) throws IOException {
        BufferedReader a = new BufferedReader(new InputStreamReader(System.in));
        String str;
        str = a.readLine();
        System.out.println(str);
    }
}

运行试试

在这里插入图片描述

嗯,效果还可以,那就玩点花里胡哨的:

import java.io.*;

public class Ex5_9io {
    public static void main(String[] args) throws IOException {
        BufferedReader a = new BufferedReader(new InputStreamReader(System.in));
        //获取字符串
        ArrayList<String> str = new ArrayList<>();
        while (true){
            String st = a.readLine();
            if (st.equals("quit")){
                break;
            }
            str.add(st);
        }
        System.out.println(str);
    }
}

我们尝试输出一堆字符串并保存在集合中。

运行结果:在这里插入图片描述

输出数据到控制台

这还有什么可好说的?

  1. System.out.print(); 不换行输出
  2. System.out.println(); 换行输出
  3. System.out.write(); 输出低八位字节
  4. System.out.printf() 格式化输出(这个之前好像没说过)
System.out.println(0);  //输出一个,并换行
System.out.print(1+" "); //输出一个 后面跟个空格,不换行
System.out.write('a');//输出一个字符a 不换行
System.out.println(); //加个这个,换行,美观一点
System.out.printf("这是一个数字 %d 这是一个字符串 %s ",1,"hello"); //格式化输出

运行结果:
在这里插入图片描述

读写文件

关于对文件的操作,要说的话,有很多很多,就直接实战看例子吧

首先呢,我们先导包

import java.io.*;

然后利用OutputStream创建一个文件,并往里面输入一点东西

OutputStream fwrite = new FileOutputStream("C:/java/text.txt");  //创建文件对象
for (int i = 0;i<10;i++){
//循环向里面存数据
fwrite.write(i);
}
fwrite.close();  //关闭文件

然后利用InputStream读取文件

InputStream fread = new FileInputStream("C:/java/text.txt");  //创建文件对象
byte[] fb = fread.readAllBytes();  //创建数组接收数据
fread.close();  //关闭文件
for (byte b : fb) {
//循环读取
System.out.println(b);
}

全部代码:

import java.io.*;

public class Ex5_9io {
    public static void main(String[] args) throws IOException {
        OutputStream fwrite = new FileOutputStream("C:/java/text.txt");
        for (int i = 0;i<10;i++){
            fwrite.write( i);
        }
        fwrite.close();
        InputStream fread = new FileInputStream("C:/java/text.txt");
        byte[] fb = fread.readAllBytes();
        fread.close();
        for (byte b : fb) {
            System.out.println(b);
        }

    }
}

结语

学习的时光总是很快的,我们再见!
个人主张自学,但是也不能忘记了讨论的重要性,我这边搞了一个小圈子,欢迎大家来玩哦~可以畅所欲言呀 ~ ——小圈子

在这里插入图片描述

以上是关于Java进阶io与文件操作从懵逼到了然的主要内容,如果未能解决你的问题,请参考以下文章

零基础学习软件测试从懵逼到吊炸天之基础与进阶篇

您有新的未分配天赋点网络流:从懵逼到完全懵逼

redux中间件的原理——从懵逼到恍然大悟

elasticsearch_dsl从懵逼到入坑的经验

Path

RMI学习