java IO流初试与读取

什么是IO流

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

class Main{
    public static void main(String[] args) throws IOException {
 /*什么是IO流,以及它的作用:
        I:input;
        O:output;
        通过IO,可以对硬盘(外存)进行读与写。
 流的种类:
        1按字节(byte)进行读取,一次读取一个字节,也就是一次读取8个二进制位,(8bit);
        ------可以读取任何文件,音频,文本等等
        2按字符读取:一次一个字符,只能读纯文本文件(txt);
  流所在的包
        java.io.*;
  以stream结尾都是字节流,以reader/writer结尾的是字符流
  问:xxxstreamReader是什么流?是字符流,因为stream没有结尾,结尾的是Reader
flush:
        输出流(输入流没有)都有的一个方法,可以将管道(硬盘到内存大概)里没输出完的数据,强行输出。
   */
        FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");
        System.out.println(fi.read());
        System.out.println(fi.read());
        System.out.println(fi.read());
        System.out.println(fi.read());
        //就会一直往下读!
    }
}

以上是一个输入流的用法
ol.txt文件里的是abcdefgl(随手打的)
输出的是字母的ASCII码
运行结果如下:

97
98
99
100
+++++++++++++++++++++++++++++++++++

用.read()迭代ol.txt文件,返回的是ASCII码

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

class Main{
    public static void main(String[] args) throws IOException {

        FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");

        int k=0;
        while((k=fi.read())!=-1){
            System.out.println(k);
 /*
 **注意,不能写成
 int k = fi.read();
 while(k!=-1){
 sout(k);
 为什么呢:因为k会被赋予第一个character的值,这里是101。
 然后它就一直在打印101了,因为101恒大于-1,它不能迭代变化了。**
  */
 }

        }
 
}

输出结果:
101
102
103
108
13
10

++++++++++++++++++++++++++++++++

利用***数组***输出ol.txt文件里的内容(数组所存储的内容),(这个文件的内容较前面被更改了一下)

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

class Main{
    public static void main(String[] args) throws IOException {

      FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");

        byte[] bytes = new byte[4];//定义一个数组
        System.out.println(fi.read(bytes));//这里打印的是读了多少个字节。
        System.out.println(fi.read(bytes));
        System.out.println(fi.read(bytes));
        System.out.println(fi.read(bytes));
        System.out.println(new String(bytes));

 }

        }

把ol.txt文件内容改了一下:改成了abcdefghi,9个字母;
然后输出是:
4
4
1
-1
ifgh

数组一次存4个,然后有9个character,所以最后只存1个。最后没有了,是-1
存一个的时候,i把前一个的e覆盖掉,然后存入
所以是ifgh
+++++++++++++++++++++++++++++++++++++++

数组+while if输出文本的全部内容

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

class Main {
    public static void main(String[] args) throws IOException {
        int k = 0;
        FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");

        byte[] bytes = new byte[8];//定义一个数组
        while (true) {//写一个死循环;
            if ((k = fi.read(bytes)) == -1)
                break;//**记住!!!跳出死循环,while if语句的常见操作**
            System.out.print(new String(bytes, 0, k));
            **//注意这里不能写println,他会自动给换行,破坏文本**
        }
    }
 }

ol.txt里的内容已经被我换成代码了
这样就可以输出文本了
切记这个迭代格式
输出结果:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

class Main {
public static void main(String[] args) throws IOException {
int k = 0;
FileInputStream fi = new FileInputStream(“D:\newfile\ol.txt”);

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

fi.available(),获取剩余的没读取的字节个数。当没有进行任何读取时,返回的就是全部的字节数了。

利用这个可以new一个大的byte类型数组,将内容全部输出出去。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

class Main {
    public static void main(String[] args) throws IOException {
        int k = 0;
        FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");
        k=fi.available();//可以得知一共->剩下有多少个字节,也因为是字节流的原因!
        //如果没有去读取,那么available就是你所获取的文本全部的字节数了!
        //这一点和数组集合就可以很方便的打印文本了
        System.out.println(k);
        //int[] a = new int[k];error:咳咳,不是int类型
        byte[] a = new byte[fi.available()];
        fi.read(a);
        //System.out.println(a);error:咳咳,返回的是地址;
        System.out.println(new String(a));
        //这次成功了

    }
 }


++++++++++++++++++++++++++++++++++++++++++++++++
skip方法

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

class Main {
    public static void main(String[] args) throws IOException {
        int k = 0;
        FileInputStream fi = new FileInputStream("D:\\newfile\\ol.txt");
        fi.skip(9);
        System.out.println(fi.read());
    }
 }


ol.txt里的内容1234567890
输出结果:
48
所以迭代直接跳过前9个,打印了0的ASCII码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

不惭_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值