Java的io初体验

Java IO初体验,今天学了java.io的内容,我总结了以下的知识:
1.我们输入指的是 外存文件上的内容 输入到内存中,称为输入input 或者写入read
2.我们输出指的是 将内存中的数据内容写入到外存保存到相应的文件中,称为输出output或者写出write
3.当我们进行输入输出的时候:
主要用到的接口为 InputStream ,OutputStream, Reader, Writer
其中Stream结尾的为字节流 , Reader,Writer为字符流,我们要清楚我们的字节流一次只能读取8为二进制位的字节数据,但是我们的字符流就是一次读取是以字符为单位,也就是说我们的数据可能是两个字节的字符,可能是一个字节的字符,我们都是以字符为单位的输入输出,一次读取一个字符
4.我们的输入输出都有异常的处理,并且在用完流后都要关闭流进行资源释放,跟我们数据库的链接一样,都要进行资源的释放

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

public class dateTest{
    public static void main(String[] args)  {
        FileInputStream fis =null;
        FileOutputStream fos=null;
        try {
            fis=new FileInputStream("test.txt");
            System.out.println(fis.available());
            fos =new FileOutputStream("a.txt");
            byte[] bytes=new byte[4];
            int dateLine=0;
            while ((dateLine=fis.read(bytes)) != -1){
                String str=new String(bytes,0,dateLine);
                System.out.println(str);
                fis.skip(2);
                fos.write(bytes ,0,dateLine);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


如上图的代码所示:
我们对文件test.txt建立了字节输入流,对文件a.txt建立了字节输出流,然后将test.txt中的内容读取到a.txt文件中
avaliable方法是查找出输入文件中还有多少字节的数据没有读入
skip方法是跳过多少个字节的数据

控制台输出:
在这里插入图片描述

test.txt文件内容:
在这里插入图片描述
a.txt文件的内容:
在这里插入图片描述


重点来了:
我们利用read 和write方法有数组元素未读满时的覆盖的问题:
比如我们定义了一个byte数组长度为4的时候,我们读取abcdef内容,我们第一次读取如下如图所示,

在这里插入图片描述
第一次读取:
在这里插入图片描述
第二次读取:
在这里插入图片描述
我们注意到我们第二次的读取没有读满数组,但是我们第一次读入的数组中后两个元素没有被覆盖掉,所以还是存留在内存数组中,所以我们用read方法要注意返回值是此次读入的字节数量,我们不能用数组的length属性来进行读写,应该用返回值判断读入的字节数量来进行操作,否则可能会有最后一次的数组未读满,但是错误的将上次读后的内容未被覆盖也进行了操作,所以这是我们应该注意的一点。


之后我们的看一些Writer的内容:

import java.io.FileWriter;
import java.io.IOException;

public class fileWriterTest {
    public static void main(String[] args) {
        FileWriter fileWriter=null;
        try {
            fileWriter = new FileWriter("test.txt");
            //不加true就是在清空源文件后加入新写入的内容
            //fileWriter = new FileWriter("test.txt",true);就是在源文件上追加
            fileWriter.write('中');
            fileWriter.append('爱');
            fileWriter.write("中国我爱你");
            fileWriter.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (fileWriter !=null){
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

在这里插入图片描述
fileWriter = new FileWriter(“test.txt”),不加true就是在清空源文件后加入新写入的内容
fileWriter = new FileWriter(“test.txt”,true);就是在源文件上追加新的内容

Writer不仅能将字符,字符数组,还能将String的内容的写入,我们都能写入文件当中。因为我们可以将String对象看为字符数组。我们可以这样理解,String string = new String(char[]);对吧!!!!
还有一个重点,我们对于输出流一定要进行flush清空,我们才能看到文件中的有内容,切记!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值